TriX support in Apache Jena

Jena supports TriX, a simple XML format for RDF, for both reading and writing RDF data.

The support is of the TriX core, without processing instructions.

Both the original HPlabs and W3C DTDs are supported for reading. Writing is according to the W3C DTD, that is using root element <trix>, rather than <TriX>.

Note: This format should not be confused with RDF/XML, the W3C standardised XML format for RDF.

TriX History

TriX originated from work by Jeremy Carroll (then at HP Labs, Bristol) and Patrick Stickler (then at Nokia) and published as a tech report HPL-2004-56 There is also earlier work published in HPL-2003-268.

The work within the Semantic Web Interest Group on Named Graphs, including TriX, is documented at https://www.w3.org/2004/03/trix/.

TriX DTD: http://www.w3.org/2004/03/trix/trix-1/trix-1.0.dtd
Trix XML Schema: http://www.w3.org/2004/03/trix/trix-1/trix-1.0.xsd

The W3C DTD differs from HPL-2004-56 by having root element <trix> not <TriX>.

<!-- TriX: RDF Triples in XML -->
<!ELEMENT trix         (graph*)>
<!ATTLIST trix         xmlns CDATA #FIXED "http://www.w3.org/2004/03/trix/trix-1/">
<!ELEMENT graph        (uri, triple*)>
<!ELEMENT triple       ((id|uri|plainLiteral|typedLiteral), uri, (id|uri|plainLiteral|typedLiteral))>
<!ELEMENT id           (#PCDATA)>
<!ELEMENT uri          (#PCDATA)>
<!ELEMENT plainLiteral (#PCDATA)>
<!ATTLIST plainLiteral xml:lang CDATA #IMPLIED>
<!ELEMENT typedLiteral (#PCDATA)>
<!ATTLIST typedLiteral datatype CDATA #REQUIRED>

TriX-star

The format is extended for RDF-star with embedded triples by allowing nested <triple>.

Trix-star (2021) adds ’triple’ to subject and object positions of ELEMENT triple.

<!ELEMENT triple       ((id|uri|plainLiteral|typedLiteral|triple), uri, (id|uri|plainLiteral|typedLiteral|triple))>

Example

The Turtle:

PREFIX :      <http://example/>

:s      :p      "ABC" .
<< :s :p :o >>  :q  :r .

is written in Trix as:

<trix xmlns="http://www.w3.org/2004/03/trix/trix-1/">
  <graph>
    <triple>
      <uri>http://example/s</uri>
      <uri>http://example/p</uri>
      <plainLiteral>ABC</plainLiteral>
    </triple>
    <triple>
      <triple>
        <uri>http://example/s</uri>
        <uri>http://example/p</uri>
        <uri>http://example/o</uri>
      </triple>
      <uri>http://example/q</uri>
      <uri>http://example/r</uri>
    </triple>
  </graph>
</trix>