package eu.fbk.knowledgestore.datastore.hbase.utils; import com.google.common.collect.ImmutableList; import org.apache.avro.Schema; import org.apache.avro.Schema.Field; import org.apache.avro.Schema.Type; /** * Definition of AVRO schemas for nodes of the data model. */ public final class AvroSchemas { /** The namespace for KS-specific AVRO schemas. */ public static final String NAMESPACE = "eu.fbk.knowledgestore"; /** AVRO schema for NULL. */ public static final Schema NULL = Schema.create(Type.NULL); /** AVRO schema for boolean literals. */ public static final Schema BOOLEAN = Schema.create(Type.BOOLEAN); /** AVRO schema for string literals. */ public static final Schema STRING = Schema.create(Type.STRING); /** AVRO schema for string literals with a language. */ public static final Schema STRING_LANG = Schema.createRecord("stringlang", null, AvroSchemas.NAMESPACE, false); /** AVRO schema for long literals. */ public static final Schema LONG = Schema.create(Type.LONG); /** AVRO schema for int literals. */ public static final Schema INT = Schema.create(Type.INT); /** AVRO schema for short literals. */ public static final Schema SHORT = Schema.createRecord("short", null, AvroSchemas.NAMESPACE, false); /** AVRO schema for byte literals. */ public static final Schema BYTE = Schema.createRecord("byte", null, AvroSchemas.NAMESPACE, false); /** AVRO schema for double literals. */ public static final Schema DOUBLE = Schema.create(Type.DOUBLE); /** AVRO schema for float literals. */ public static final Schema FLOAT = Schema.create(Type.FLOAT); /** AVRO schema for big integer literals. */ public static final Schema BIGINTEGER = Schema.createRecord("biginteger", null, AvroSchemas.NAMESPACE, false); /** AVRO schema for big decimal literals. */ public static final Schema BIGDECIMAL = Schema.createRecord("bigdecimal", null, AvroSchemas.NAMESPACE, false); /** AVRO schema for non-compressed IDs (URIs, BNodes). */ public static final Schema PLAIN_IDENTIFIER = Schema // .createRecord("plainidentifier", null, AvroSchemas.NAMESPACE, false); /** AVRO schema for compressed ID (URIs, BNodes). */ public static final Schema COMPRESSED_IDENTIFIER = Schema // .createRecord("compressedidentifier", null, AvroSchemas.NAMESPACE, false); /** AVRO schema for any ID (URIs, BNodes). */ public static final Schema IDENTIFIER = Schema.createUnion(ImmutableList.<Schema>of( PLAIN_IDENTIFIER, COMPRESSED_IDENTIFIER)); /** AVRO schema for calendar literals. */ public static final Schema CALENDAR = Schema.createRecord("calendar", null, AvroSchemas.NAMESPACE, false); /** AVRO schema for RDF statements. */ public static final Schema STATEMENT = Schema.createRecord("statement", null, AvroSchemas.NAMESPACE, false); /** AVRO schema for record nodes ({@code Record}). */ public static final Schema RECORD = Schema.createRecord("struct", null, AvroSchemas.NAMESPACE, false); /** AVRO schema for generic data model nodes. */ public static final Schema NODE = Schema.createUnion(ImmutableList.<Schema>of( AvroSchemas.BOOLEAN, AvroSchemas.STRING, AvroSchemas.STRING_LANG, AvroSchemas.LONG, AvroSchemas.INT, AvroSchemas.SHORT, AvroSchemas.BYTE, AvroSchemas.DOUBLE, AvroSchemas.FLOAT, AvroSchemas.BIGINTEGER, AvroSchemas.BIGDECIMAL, AvroSchemas.PLAIN_IDENTIFIER, AvroSchemas.COMPRESSED_IDENTIFIER, AvroSchemas.CALENDAR, AvroSchemas.STATEMENT, AvroSchemas.RECORD)); /** AVRO schema for lists of nodes. */ public static final Schema LIST = Schema.createArray(AvroSchemas.NODE); /** AVRO schema for properties of a record node. */ public static final Schema PROPERTY = Schema.createRecord("property", null, AvroSchemas.NAMESPACE, false); private AvroSchemas() { } static { AvroSchemas.STRING_LANG.setFields(ImmutableList.<Field>of(new Field("label", AvroSchemas.STRING, null, null), new Field("language", AvroSchemas.STRING, null, null))); AvroSchemas.SHORT.setFields(ImmutableList.<Field>of(new Field("short", AvroSchemas.INT, null, null))); AvroSchemas.BYTE.setFields(ImmutableList.<Field>of(new Field("byte", AvroSchemas.INT, null, null))); AvroSchemas.BIGINTEGER.setFields(ImmutableList.<Field>of(new Field("biginteger", AvroSchemas.STRING, null, null))); AvroSchemas.BIGDECIMAL.setFields(ImmutableList.<Field>of(new Field("bigdecimal", AvroSchemas.STRING, null, null))); AvroSchemas.PLAIN_IDENTIFIER.setFields(ImmutableList.<Field>of(new Field("identifier", AvroSchemas.STRING, null, null))); AvroSchemas.COMPRESSED_IDENTIFIER.setFields(ImmutableList.<Field>of(new Field( "identifier", AvroSchemas.INT, null, null))); AvroSchemas.CALENDAR.setFields(ImmutableList .<Field>of(new Field("timezone", AvroSchemas.INT, null, null), new Field( "timestamp", AvroSchemas.LONG, null, null))); AvroSchemas.STATEMENT.setFields(ImmutableList.<Field>of( new Field("subject", AvroSchemas.IDENTIFIER, null, null), new Field("predicate", AvroSchemas.IDENTIFIER, null, null), new Field("object", Schema.createUnion(ImmutableList.<Schema>of( AvroSchemas.BOOLEAN, AvroSchemas.STRING, AvroSchemas.STRING_LANG, AvroSchemas.LONG, AvroSchemas.INT, AvroSchemas.SHORT, AvroSchemas.BYTE, AvroSchemas.DOUBLE, AvroSchemas.FLOAT, AvroSchemas.BIGINTEGER, AvroSchemas.BIGDECIMAL, AvroSchemas.CALENDAR, AvroSchemas.PLAIN_IDENTIFIER, AvroSchemas.COMPRESSED_IDENTIFIER)), null, null), // new Field("context", AvroSchemas.IDENTIFIER, null, null))); AvroSchemas.PROPERTY .setFields(ImmutableList.<Field>of( new Field("propertyURI", AvroSchemas.COMPRESSED_IDENTIFIER, null, null), new Field("propertyValue", Schema.createUnion(ImmutableList.<Schema>of( AvroSchemas.BOOLEAN, AvroSchemas.STRING, AvroSchemas.STRING_LANG, AvroSchemas.LONG, AvroSchemas.INT, AvroSchemas.SHORT, AvroSchemas.BYTE, AvroSchemas.DOUBLE, AvroSchemas.FLOAT, AvroSchemas.BIGINTEGER, AvroSchemas.BIGDECIMAL, AvroSchemas.CALENDAR, AvroSchemas.PLAIN_IDENTIFIER, AvroSchemas.COMPRESSED_IDENTIFIER, AvroSchemas.STATEMENT, AvroSchemas.RECORD, AvroSchemas.LIST)), null, null))); AvroSchemas.RECORD.setFields(ImmutableList.<Field>of( new Field("id", Schema.createUnion(ImmutableList.<Schema>of(AvroSchemas.NULL, AvroSchemas.PLAIN_IDENTIFIER, AvroSchemas.COMPRESSED_IDENTIFIER)), null, null), // new Field("properties", Schema.createArray(AvroSchemas.PROPERTY), null, null))); } }