Skip to content
Browse files
Documentation for RDF*
  • Loading branch information
afs committed May 19, 2020
1 parent cf94d57 commit d57a3e9734fa14b973fddfd5fafd0151a1767c1e
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 2 deletions.
@@ -2,6 +2,8 @@


# IntelliJ generated
@@ -72,17 +72,17 @@
<li><a href="/documentation/javadoc.html">Javadoc</a></li>
<li><a href="/documentation/rdf/index.html">RDF API</a></li>
<li><a href="/documentation/io/">RDF I/O</a></li>
<li><a href="/documentation/fuseki2/index.html">Fuseki</a></li>
<li><a href="/documentation/query/index.html">ARQ (SPARQL)</a></li>
<li><a href="/documentation/rdfconnection/">RDF Connection - SPARQL API</a></li>
<li><a href="/documentation/tdb/index.html">TDB</a></li>
<li><a href="/documentation/tdb2/index.html">TDB2</a></li>
<li><a href="/documentation/query/text-query.html">Text Search</a></li>
<li><a href="/documentation/shacl/index.html">SHACL</a></li>
<li><a href="/documentation/geosparql/index.html">GeoSPARQL</a></li>
<li><a href="/documentation/rdfstar/index.html">RDF*</a></li>
<li><a href="/documentation/tools/index.html">Command-line tools</a></li>
<li><a href="/documentation/hadoop/index.html">Elephas - tools for RDF on Hadoop</a></li>
<li><a href="/documentation/jdbc/index.html">SPARQL over JDBC</a></li>
<li><a href="/documentation/fuseki2/index.html">Fuseki</a></li>
<li><a href="/documentation/permissions/index.html">Permissions</a></li>
<li><a href="/documentation/assembler/index.html">Assembler</a></li>
<li><a href="/documentation/ontology/">Ontology API</a></li>
@@ -0,0 +1,118 @@
title: Support of RDF*
slug: index
[RDF\*]( is an extension to RDF that provides
a way for one triple to refer to another triple. Another resource about RDF\* is
[Olaf Hartig's blog entry](


<< :john foaf:name "John Smith" >> dct:source <http://example/directory> .

The part `<< :john foaf:name "John Smith" >>` is a triple term and refers to the triple with subject `:john`, property `foaf:name` and object `"John Smith"`.

Triple terms can be in the subject or object position.

Jena provides support for RDF\* and the related SPARQL\*.

Support for RDF* is experimentation in Jena 3.15.0 (released May 2020):

* Turtle, N-Triples, TriG and N-Quads extended for Triple Terms syntax. There is no output in RDF/XML.
* SPARQL extended with Triple Term syntax for graph matching (in code, use `Syntax.syntaxARQ`).
* SPARQL Result formats for JSON and XML extended to support Triple Terms in results.
* Support in memory-based storage (graphs and datasets).
* Support in the Model API.

All this is active by default in Fuseki.

This support is experimental and subject to change. The aim is to follow the definition of RDF* as well as emerging _de facto_ consensus in other implementations.

Later releases will extend support to persistent storage in [TDB1](/documentation/tdb) and [TDB2](/documentation/tdb2/).

## RDF\*

RDF\* syntax for triple terms is added to the parsers for Turtle, N-Triples, TriG and N-Quads.

Datasets may have graphs that have triple terms that refer to triples anywhere, not just in the same graph.


Matches for triple terms:

SELECT ?name { <<:john foaf:name ?name >> dct:source <http://example/directory> }

Insert triples terms into the default graph to record the graph source.

INSERT { <<?s ?p ?o>> dct:source <http://example/directory> }
GRAPH <http://example/directory> {
?s ?p ?o

### SPARQL Functions related to triple terms

These functions cause an expression error if passed the wrong type of arguments. `afn:`
is a prefix for `<>`.

| Function | Description |
| -------- | ----------- |
| `afn:subject(?t)` | Return the subject of the triple term |
| `afn:predicate(?t)` | Return the predicate (property) of the triple term |
| `afn:object(?t)` | Return the object of the triple term |
| `afn:triple(?s, ?p, ?o)` | Create a triple term from s/p/o |
| `afn:isTriple(?t)` | Return true if the argument value is a triple term |

### SPARQL results

The syntaxes for SPARQL results from a SELECT query, `application/sparql-results+json`,
`application/sparql-results+xml` are extended to include triple terms:

The triple term `<< _:b0 <http://example/p> 123 >>` is encoded, in
`application/sparql-results+json` as:

"type": "triple" ,
"value": {
"subject": { "type": "bnode" , "value": "b0" } ,
"property": { "type": "uri" , "value": "http://example/p" } ,
"object": { "type": "literal" , "datatype": "" , "value": "123" }
and similarly in `application/sparql-results+xml`:
<literal datatype="">123</literal>
## Model API
RDF* triple terms are treated as `Resource` to preserve the typed Model API.
They occur in the subject and object positions.
A `Resource` contains a `Statement` object if the underlying RDF term is a RDF* triple term.
New methods include:
* `Statement Resource.getStatement()`
* `Resource Model.createResource(Statement)`
* `Resource ResourceFactory.createStatement`

0 comments on commit d57a3e9

Please sign in to comment.