- From: Rick Jelliffe <ricko@allette.com.au>
- Date: Fri, 14 Sep 2001 01:15:34 +1000
- To: "www-rdf-comments" <www-rdf-comments@w3.org>
From: "Dave Beckett" <dave.beckett@bristol.ac.uk>
> I was wondering if pattern-matching technologies such as schematron
> would have a lot of problems with RDF's XML syntax since some of the
> allowed things depend on the context (node or property) which can't
> be determined without considering the containing XML elements etc.
At the end I have the new Schematron schema in progress. I think it
will cope with the contexts of RDF. If anyone
can check that the rules are OK, I would appreciate it. I am trying
to capture the infoset rather than just the simple validation rules.
The key to reading the schema is to remember that a pattern is
a big if-then-else list.
B.t.w. why is the production "literal" needed? It says it is non-empty
but then parseLiteral allows list(). Why just make literal be
any string including the empty string?
Also, I am confused. I thought the RDF WG had made rdf:_n elements,
but even the 6.31 attributes are removed. Is that correct?
Cheers
Rick
<schema xmlns="http://www.asc.net/xml/schematron ">
<title>RDF </title>
<pattern>
<rule id="top" context="rdf:RDF">
<assert test="count(ancestor::*) =0">The rdf:RDF element can only appear at the top-level
</assert>
<report test="@rdf:*">An rdf:* attribute cannot go on rdf:RDF.</report>
</rule>
<rule id="obsolete" context="rdf:Bag | rdf:Set | rdf:Alt ">
<report test="true">The Bag, Set and Alt elements are obsolete.</report>
</rule>
<rule id="otherElements" context="*[ancestor::*[@rdf:parseType="parseOther"]]">
<report test="rdf:* or *[@rdf:*]">Any rdf elements or attributes inside a parseOther section
are not significant to the RDF document as rdf markup.</report>
</rule>
<rule id="descriptionElement" context="/* | /rdf:RDF/* | *[not(@parseType)]/*">
<assert test="true">A description element can appear at the top-level,
as the child of rdf:RDF, or the child of a property element with no parseType.
An rdf:Description is a description. A description can contain property elements.</assert>
<assert test="@rdf:resource or @rdf:parseType"
>Only property elements can have resource attributes or parseTypes</assert>
</rule>
<rule id="propertyElement" context="/*/* | /rdf:RDF/*/* | rdf:Description/* | *[not@parseType]/*/*
| *[string-normalize(@parseType)='Resource']/* ">
<assert test="true">A property element appears as the child of a description element
or the child of an element with parseType of "Resource"</assert>
<report test="rdf:bagID">A property element should not have any bagIDs.</report>
<report test="??">A property element should not have any property attributes.</report>
<report test="self::rdf:Description">An rdf:Description element cannot appear where
a property element is expected.</report>
</rule>
<rule id="rdf-error" context="rdf:*">
<report test="true">The only elements in the RDF namespace are RDF and Description
</report>
</rule>
<rule id="error" context="*">
<report test="true">This element is incorrect.</report>
</rule>
</pattern>
<!-- To do -->
<pattern name="attributes" context="??">
<assert test="">The rdf:ID attribute should have unique token values in a document.</assert?
<assert test="">The rdf:bagID attribute should have unique token values in a document.</assert>
<assert test="">A element should only have one about, aboutEach or ID or resource attribute.</assert>
<assert test="">The only attributes in the RDF namespace are ID, about, aboutEach, bagID,
type, resource, parseType, and rdf:_*.</assert>
</pattern>
</schema>
Received on Thursday, 13 September 2001 11:09:37 UTC