Copyright © 2008 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
This document reports on implementations of the RDFa Syntax and Processing rules [RDFa Syntax]. Such implementations are able to parse an XHTML+RDFa document, and extract the embedded RDF graph in order to query, serialise, convert or process it further.
This is an Editor's Draft, hence work in progress. Publication as a Editor's Draft does not imply endorsement by the W3C Membership. As this is a draft document, it may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
The worked described herein has been produced by the RDF in HTML Task Force [RDFHTML-TF], a joint task force of the Semantic Web Deployment Working Group [SWD-WG] and HTML Working Group [HTML-WG].
For comments, please send a mail to public-rdf-in-xhtml-tf@w3.org, with http://lists.w3.org/Archives/Public/public-rdf-in-xhtml-tf/ being the public archive.
Last Modified: $Date: 2008/07/06 10:45:14 $
The goal of this report is to verify if the RDFa Syntax and Processing rules [RDFa Syntax] specification is implementable. However, the report does not attempt to test the conformance of the implementations.
In the following the RDFa processors are listed that have been used in the RDFa Implementation Report. We differentiate between server-side processors which typically run as a kind of Webservice on a server an take some kind of XHTML+RDFa as input (via URI, etc.) and client-side processors, working on the client side (e.g. as a UA plug-in).
| Name | Contact | Programming Language | Home | Service URI |
|---|---|---|---|---|
| RDFa2RDFXML | Fabien Gandon | XSLT | http://ns.inria.fr/grddl/rdfa/ |
http://ns.inria.fr/grddl/rdfa/2008/04/08/RDFa2RDFXML.xsl |
| ARC2 | Benjamin Nowack | PHP | http://arc.semsol.org/download |
http://arc.web-semantics.org/demos/rdfa_tests/extract.php?url= |
| RDFa Distiller (PyRDFa) | Ivan Herman | Python | http://www.w3.org/2007/08/pyRdfa/ |
http://www.w3.org/2007/08/pyRdfa/extract?uri= |
| librdfa | Manu Sporny | C | http://rdfa.digitalbazaar.com/librdfa/ |
http://rdfa.digitalbazaar.com/librdfa/rdfa2rdf.py?uri= |
| SPREAD | Shane McCarron | Perl | ? |
http://htmlwg.mn.aptest.com/rdfa/extract_rdfa.pl?format=xml&uri= |
| Cognition | Toby Inkster | Perl | http://buzzword.org.uk/cognition/ |
http://srv.buzzword.org.uk/crazy-ivan.cgi?uri= |
| shark | Florian Schmedding | C# | http://shark.informatik.uni-freiburg.de/ |
http://shark.informatik.uni-freiburg.de/Ocean/SharkWeb.asmx/Parse?url= |
| Name | Contact | Environment | Home |
|---|---|---|---|
| Operator | Michael Kaply, Elias Torres | Firefox Plug-in | http://www.kaply.com/weblog/operator/ |
| RDFa in Javascript | Ben Adida | Javascript | http://www.w3.org/2006/07/SWD/RDFa/impl/js/ |
The following table lists the results of the implementation test. The approved RDFa Test Cases have been used as reference tests.
Where possible, the test result have been created automatically using the EARL-exporter of the RDFa Test Harness along with an XSLT to create the Table 3..
| Test | Purpose | RDFa Distiller (PyRDFa) | ARC2 | librdfa | Cognition | Summary (+ ... pass, - ... fail) |
|---|---|---|---|---|---|---|
| Test0001 | Tests @property to establish the predicate; literal object is in the content of the element. | pass | pass | pass | pass | ++++ |
| Test0006 | Tests @rev and @rel together, with the object being specified by @href, ignoring content | pass | pass | pass | pass | ++++ |
| Test0007 | Tests @rel, @rev, @property, and @content together to generate several RDF triples. | pass | pass | pass | pass | ++++ |
| Test0008 | Tests empty @about. | pass | pass | pass | pass | ++++ |
| Test0009 | Tests @rev. | pass | pass | pass | pass | ++++ |
| Test0010 | Tests @rel, @rev, and @href to generate two RDF triples. | pass | pass | pass | pass | ++++ |
| Test0011 | Tests XMLLiteral content | fail | fail | fail | fail | ---- |
| Test0012 | Tests @xml:lang | pass | pass | pass | pass | ++++ |
| Test0013 | Tests @xml:lang inheritance | pass | pass | pass | +++ | |
| Test0014 | Tests setting the @datatype to xsd:integer | pass | pass | pass | fail | +++- |
| Test0015 | Tests meta and link with no parent @about | pass | pass | pass | pass | ++++ |
| Test0018 | Tests @rel to establish predicate. | pass | pass | pass | pass | ++++ |
| Test0019 | Tests @about to establish subject. | pass | pass | pass | pass | ++++ |
| Test0020 | Tests @about inheritance to establish subject. | pass | pass | pass | +++ | |
| Test0021 | Tests inheritance of subject when no @about can be found | pass | pass | pass | pass | ++++ |
| Test0023 | Tests that @id does not generate subjects | pass | pass | pass | pass | ++++ |
| Test0025 | Tests simple chaining with cascade of @resource and @property | pass | pass | pass | pass | ++++ |
| Test0026 | Tests @content for literal object | pass | pass | pass | pass | ++++ |
| Test0027 | Tests @content for literal object, overriding element content. | pass | pass | pass | pass | ++++ |
| Test0029 | Tests markup stripping from a span element with @datatype=xsd:string | pass | pass | pass | pass | ++++ |
| Test0030 | Tests omitted @about. | pass | pass | pass | pass | ++++ |
| Test0031 | Tests if @resource sets URIref object correct. | pass | pass | pass | fail | +++- |
| Test0032 | Tests if @resource overrides @href to set the URIref object. | pass | pass | pass | fail | +++- |
| Test0033 | Tests simple chaining with cascade of bNode and @property | pass | pass | pass | pass | ++++ |
| Test0034 | Tests if a @src (in img element) correctly sets the URIref object | pass | pass | pass | pass | ++++ |
| Test0035 | Tests if @href overwrites @src | pass | pass | pass | pass | ++++ |
| Test0036 | Tests if @resource overwrites @src | pass | pass | pass | pass | ++++ |
| Test0037 | Tests if @resource overwrites both @href and @src | pass | pass | pass | pass | ++++ |
| Test0038 | Tests if a @src (in img element) correctly sets the URIref subject (due to @rev) | pass | pass | pass | pass | ++++ |
| Test0041 | Tests if @resource overwrites both @href and @src correctly to set the URIref subject (due to @rev) | pass | pass | pass | pass | ++++ |
| Test0046 | Tests @typeof with @rel present, no @href, @resource, or @about | pass | pass | pass | pass | ++++ |
| Test0047 | Tests @typeof with @rel and @resource present, no @about | pass | pass | pass | pass | ++++ |
| Test0048 | Tests @typeof with @about and @rel present, no @resource | pass | pass | pass | pass | ++++ |
| Test0049 | Tests @typeof with @about, no @rel or @resource | pass | pass | pass | pass | ++++ |
| Test0050 | Tests @typeof without anything else | pass | pass | pass | pass | ++++ |
| Test0051 | Tests @typeof with a single @property | pass | pass | pass | fail | +++- |
| Test0052 | Tests to ensure that @typeof does not apply to @resource | pass | pass | pass | fail | +++- |
| Test0053 | Tests to make sure that @typeof does not apply to @resource, but @resource sets the subject for the next triple to be generated | pass | pass | pass | pass | ++++ |
| Test0054 | Tests multiple @property separated by white spaces | pass | pass | pass | pass | ++++ |
| Test0055 | Tests multiple @rel separated by white spaces | pass | pass | pass | pass | ++++ |
| Test0056 | Tests if @typeof applies to @about on same element with hanging @rel | pass | pass | pass | pass | ++++ |
| Test0057 | Tests if hanging @rel creates multiple triples | pass | pass | pass | pass | ++++ |
| Test0058 | Tests if hanging @rel creates multiple triples with @typeof permutation | pass | pass | pass | pass | ++++ |
| Test0059 | Tests multiple hanging @rels with multiple children | pass | pass | pass | pass | ++++ |
| Test0060 | Tests conformance with UTF-8 encoding | pass | pass | pass | pass | ++++ |
| Test0061 | Tests @rel in head using reserved, non-prefixed XHTML value | pass | pass | pass | pass | ++++ |
| Test0062 | Tests @rev in head using reserved, non-prefixed XHTML value | pass | pass | pass | pass | ++++ |
| Test0063 | Tests @rel in head using reserved XHTML value and empty-prefix CURIE syntax | pass | pass | pass | pass | ++++ |
| Test0064 | Tests if @about generates a proper triple when a safe CURIE is used | pass | pass | pass | pass | ++++ |
| Test0065 | Tests if @rel properly connects triples generated when safe CURIEs are used | pass | pass | pass | pass | ++++ |
| Test0066 | Test to make sure that @about (with current document) is implied in the head, and the proper triples are generated using @typeof | pass | pass | pass | fail | +++- |
| Test0067 | Test to make sure that @property in head uses the implied current document as the subject if no other subject is specified | pass | pass | pass | pass | ++++ |
| Test0068 | Tests to ensure that relative URI is resolved correctly when used in @about | pass | pass | pass | pass | ++++ |
| Test0069 | Tests to ensure that relative URI is resolved correctly when used in @href | pass | pass | pass | pass | ++++ |
| Test0070 | Tests to ensure that relative URI is resolved correctly when used in @resource | pass | pass | pass | pass | ++++ |
| Test0071 | Tests to ensure that a triple is generated even if @typeof and @about is not specified anywhere in the document | pass | pass | pass | pass | ++++ |
| Test0072 | Tests to ensure that relative URIs are resolved correctly when used in @about with XHTML base set in head | pass | pass | pass | fail | +++- |
| Test0073 | Tests to ensure that relative URIs are resolved correctly when used in @resource with XHTML base set in head | pass | pass | pass | fail | +++- |
| Test0074 | Tests to ensure that relative URIs are resolved correctly when used in @href with XHTML base set in head | pass | pass | pass | fail | +++- |
| Test0075 | Tests to ensure that the XHTML+RDFa reserved word 'license' when used in @rel (with no @about) generates the proper triple | pass | pass | pass | fail | +++- |
| Test0076 | Tests to ensure that all reserved XHTML words are supported in @rel | pass | pass | pass | pass | ++++ |
| Test0077 | Tests to ensure that all reserved XHTML words are supported in @rev | pass | pass | pass | pass | ++++ |
| Test0078 | Tests multiple ways of handling incomplete triples; the first two triples should use the same bnode as subject ('merged'). The third should have a separate bNode. | pass | pass | pass | pass | ++++ |
| Test0079 | Tests role of @resource and @href in completing incomplete triples (including their mutual priorities) | pass | pass | pass | pass | ++++ |
| Test0080 | Tests if @about has a higher priority than @resource in handling incomplete triples | pass | pass | pass | pass | ++++ |
| Test0081 | Tests multiple ways of handling incomplete triples, this time with @rev | pass | pass | pass | pass | ++++ |
| Test0082 | Tests multiple ways of handling incomplete triples, this time with both @rel and @rev | pass | pass | pass | pass | ++++ |
| Test0083 | Tests multiple ways of handling incomplete triples; the first two triples should use the same bNode as subject ('merged'); the third case should use @about | pass | pass | pass | pass | ++++ |
| Test0084 | Tests multiple ways of handling incomplete triples, this time with both @rel and @rev. There is an intermediate div that should be ignored by the process | pass | pass | pass | pass | ++++ |
| Test0085 | Tests the role of @resource and @href in completing incomplete triples (including their mutual priorities), but with an intermediate layer (ie, bNode) added | pass | pass | pass | pass | ++++ |
| Test0086 | Test that NO triple should be generated for a non-reserved @rel value | pass | pass | pass | pass | ++++ |
| Test0087 | Tests to ensure that all reserved XHTML words are supported in @rel (with :xxx) | pass | pass | pass | pass | ++++ |
| Test0088 | Test the interpretation of the CURIE "_:" | pass | pass | fail | pass | ++-+ |
| Test0089 | Tests to ensure that @src sets a new subject (focuses on @typeof). | pass | pass | pass | fail | +++- |
| Test0090 | Tests to ensure that @src sets a new subject (focuses on @rel/@href). | pass | pass | pass | pass | ++++ |
| Test0091 | Tests to ensure that non-reserved, un-prefixed CURIEs, when used in @property, generate triples. | pass | pass | fail | fail | ++-- |
| Test0092 | Tests the explicit specification of an RDF XMLLiteral with @datatype. | fail | fail | fail | fail | ---- |
| Test0093 | Tests the explicit specification of an RDF XMLLiteral with @datatype using a non-RDF namespace, yielding a user-data-typed literal | pass | pass | fail | fail | ++-- |
| Test0094 | Tests the explicit specification of an RDF XMLLiteral with @datatype using the proper RDF namespace, but with an unusual prefix - bla: | fail | fail | fail | fail | ---- |
| Test0099 | Tests the preservation of white space in literals. | pass | fail | pass | fail | +-+- |
| Test0100 | Tests XML elements with explicit namespace. Each of the XML elements in the literal should have at least those namespaces declared that are used in that literal (more is acceptable) | fail | fail | fail | fail | ---- |
| Test0101 | Tests XML elements with explicit namespace. Each of the XML elements in the literal should have at least those namespaces declared that are used in that literal (more is acceptable). Furthermore, the xml:lang should also be set for each of those elements. | fail | fail | fail | fail | ---- |
| Test0102 | Tests XML elements with explicit namespace. Each of the XML elements in the literal should have at least those namespaces declared that are used in that literal (more is acceptable). Furthermore, the xml:lang should also be set on the first element but existing language declaration should not be changed. | fail | fail | fail | fail | ---- |
| Test0103 | Tests XML elements with explicit namespace. Each of the XML elements in the literal should have at least those namespaces declared that are used in that literal (more is acceptable), but locally set namespaces should not be changed; i.e., the default namespace for the svg element should remain unchanged in the output | fail | fail | fail | fail | ---- |
| Test1001 | Tests Vevent using @typeof (inlc. dtstart, dtend, etc.) | pass | pass | pass | fail | +++- |
This document is the result of discussions within the RDF in HTML Task Force. The editors would like to thank Manu Sporny for creating an excellent Test Harness producing directly usable EARL documents which have been used as the main input for this report. We want to thank all the implementors; thanks for your great work and the patience.