Too simple, but maybe useful

A thread on xmlschema-dev@w3.org, started by Dave Beckett, led me to
the following.

It's a general approach which could serve as the starting point for a
template for anyone wishing to define a document type which provides
for RDF descriptions from a fixed vocabulary.

Please feel from to develop this further, and to forward it to other
appropriate list(s).

Note the example is not completely valid, intentionally -- banana is
not allowed -- it's there to illustrate that lax validation does get
to the embedded Description.

ht

restricted-rdf.xsd:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSchema 200102//EN"
                 "http://www.w3.org/2001/XMLSchema.dtd">
<xs:schema xmlns="http://www.w3.org/2001/XMLSchema"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  targetNamespace="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

  <xs:element name="RDF">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="rdf:Description" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>     
    </xs:complexType>
  </xs:element>

  <xs:element name="Description">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="rdf:any" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>     
      <xs:attribute ref="rdf:about" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:attribute name="about" type="anyURI"/>
 
 <xs:element name="any" abstract="true">
  <xs:annotation>
   <xs:documentation>Import this into a schema, and put something into the
       substitution group of rdf:any to get a simple restricted version
       of rdf:RDF</xs:documentation>
  </xs:annotation>
 </xs:element>

</xs:schema>

simple-rdf-example.xml:

<?xml version='1.0'?>
<top xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns="http://purl.org/dc/elements/1.1/"
     xsi:schemaLocation="http://purl.org/dc/elements/1.1/
                       simple-rdf-xmpl.xsd">
 <rdf:RDF>
  <rdf:Description rdf:about="http://www.ltg.ed.ac.uk/~ht/xsv-status.html">
     <creator>Henry S. Thompson</creator>
     <subject>The XSV Schema Validator</subject>
  </rdf:Description>
  <rdf:Description rdf:about="http://www.w3.org/">
    <creator>Tim Berners Lee</creator>
    <subject>
     <rdf:Description>
      <subject>this should break</subject>
      <banana>because this isn't allowed</banana>
     </rdf:Description>
    </subject>
  </rdf:Description>
 </rdf:RDF>
</top>

simple-rdf-example.xsd:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSchema 200102//EN"
                 "http://www.w3.org/2001/XMLSchema.dtd">
<xs:schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        targetNamespace="http://purl.org/dc/elements/1.1/">

 <xs:import namespace="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
            schemaLocation="restricted-rdf.xsd"/>

 <xs:element name="top">
  <xs:annotation>
   <xs:documentation>
     Having this in the dc namespace is a bit off.
     At the expense of a further schema doc, it could be in a separate
     NS.
   </xs:documentation>
  </xs:annotation>
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="rdf:RDF"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 
  <xs:element name="any" abstract="true" substitutionGroup="rdf:any"/>

  <xs:element name="title" substitutionGroup="dc:any"/>

  <xs:element name="creator" substitutionGroup="dc:any"/>

  <xs:element name="subject" substitutionGroup="dc:any"/>

  <xs:element name="description" substitutionGroup="dc:any"/>

  <xs:element name="publisher" substitutionGroup="dc:any"/>

  <xs:element name="contributor" substitutionGroup="dc:any"/>

  <xs:element name="date" substitutionGroup="dc:any"/>

  <xs:element name="type" substitutionGroup="dc:any"/>

  <xs:element name="format" substitutionGroup="dc:any"/>

  <xs:element name="identifier" substitutionGroup="dc:any"/>

  <xs:element name="source" substitutionGroup="dc:any"/>

  <xs:element name="language" substitutionGroup="dc:any"/>

  <xs:element name="relation" substitutionGroup="dc:any"/>

  <xs:element name="coverage" substitutionGroup="dc:any"/>

  <xs:element name="rights" substitutionGroup="dc:any"/>
   
</xs:schema>

ht
-- 
  Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
          W3C Fellow 1999--2001, part-time member of W3C Team
     2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
	    Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk
		     URL: http://www.ltg.ed.ac.uk/~ht/

Received on Friday, 11 January 2002 11:15:28 UTC