Ask a Question

RDF

Along with JSON, Dgraph supports RDF format to create, delete, import and export data.

RDF 1.1 is a Semantic Web Standards for data interchange. It expresses statements about resources. The format of these statements is simple and in the form of triples.

A triple has the form

<subject> <predicate> <object> .

In RDF terminology, a predicate is the smallest piece of information about an object. A predicate can hold a literal value or can describe a relation to another entity :

<0x01> <name> "Alice" .
<0x01> <knows> <0x02> .

when we store that an entity name is “Alice”. The predicate is name and predicate value is the string "Alice". It becomes a node property. when we store that Alice knows Bob, we may use a predicate knows with the node representing Alice. The value of this predicate would be the uid of the node representing Bob. In that case, knows is a relationship.

Each triple ends with a period.

The subject of a triple is always a node in the graph, while the object may be a node or a value (a literal).

Blank nodes in mutations

When creating nodes in Dgraph, you should let Dgraph assign a UID.

However you need to reference the node in the mutation.

Blank nodes in mutations, written _:identifier, identify nodes within a mutation. Dgraph creates a UID identifying each blank node.

Language for string values

Languages are written using @lang. For example

<0x01> <name> "Adelaide"@en .
<0x01> <name> "Аделаида"@ru .
<0x01> <name> "Adélaïde"@fr .
<0x01> <dgraph.type> "Person" .

See also how language strings are handled in queries.

Types

You can specify literals type with the standard ^^ separator. For example

<0x01> <age> "32"^^<xs:int> .
<0x01> <birthdate> "1985-06-08"^^<xs:dateTime> .

The supported RDF datatypes and the corresponding internal type in which the data is stored are as follows.

Storage Type Dgraph type
<xs:string> string
<xs:dateTime> dateTime
<xs:date> datetime
<xs:int> int
<xs:integer> int
<xs:boolean> bool
<xs:double> float
<xs:float> float
<geo:geojson> geo
<xs:password> password
<http://www.w3.org/2001/XMLSchema#string> string
<http://www.w3.org/2001/XMLSchema#dateTime> dateTime
<http://www.w3.org/2001/XMLSchema#date> dateTime
<http://www.w3.org/2001/XMLSchema#int> int
<http://www.w3.org/2001/XMLSchema#positiveInteger> int
<http://www.w3.org/2001/XMLSchema#integer> int
<http://www.w3.org/2001/XMLSchema#boolean> bool
<http://www.w3.org/2001/XMLSchema#double> float
<http://www.w3.org/2001/XMLSchema#float> float

Facets

Creating a list with facets

{
  set {
    _:Julian <name> "Julian" .
    _:Julian <nickname> "Jay-Jay" (kind="first") .
    _:Julian <nickname> "Jules" (kind="official") .
    _:Julian <nickname> "JB" (kind="CS-GO") .
  }
}
{
  q(func: eq(name,"Julian")){
    name
    nickname @facets
  }
}

Result:

{
  "data": {
    "q": [
      {
        "name": "Julian",
        "nickname|kind": {
          "0": "first",
          "1": "official",
          "2": "CS-GO"
        },
        "nickname": [
          "Jay-Jay",
          "Jules",
          "JB"
        ]
      }
    ]
  }
}