Rick Jelliffe, Topologi Pty. Ltd.
2001-06-20
The current RDF Recommendation is almost impossible to implement because the discipline of a DTD was not used. Consequently, RDF implementations lack exchangability, and most people coming to the RDF Spec (from outside the 'RDF Community') expecting clear description of syntax must go away disappointed/
Furthermore, the advent of RDFS raises compatability issues, in that certain elements are used in RDFS, but are only general names in RDF.
This proposal suggests the the situation could be improved by:
I propose that this DTD should be included as a normative part of the RDF specification, and the BNF sections removed or reworded to fit in with it.
The main features of this proposal are:
Of course, this DTD does not reflect several constraints in RDF, such as the co-occurrence of value attributes and contents. However, XML Schemas cannot represent this either: some alternative like Schematron or RELAX could be used for that. The handling of the abbreviated syntax has always been problematic: the solution here is to allow the DTD creator to freely add their own _n declarations as needed. However, probably only Schematron can handle this constraint (i.e. where the names of allowed attributes can only be known by string matching not by enumeration.)
<!-- ===================================================================== --> <!-- RDF-ARCHITECTURE.DTD Architectural DTD for Resource Description Framework (RDF) Created from the document: "Resource Description Framework (RDF) Model and Syntax Specification " W3C Recommendation 22 February 1999 http://www.w3.org/TR/REC-rdf-syntax/ and "Resource Description Framework (RDF) Schema Specification 1.0" W3C Candidate Recommendation 27 March 2000 http://www.w3.org/TR/rdf-schema/ Created by: Rick Jelliffe, Topologi, Pty. Ltd. ricko@allette.com.au 2001-06-16 --> <!-- =================== PARAMETER ENTITY DECLARATIONS ==================== --> <!ENTITY % propEltAttr "rdf:ID ID #IMPLIED rdf:parseType ( Resource | Literal ) #IMPLIED rdf:resource CDATA #IMPLIED rdf:bagID NMTOKEN #IMPLIED rdf:value CDATA #IMPLIED" > <!ENTITY % rdf-propEltAttr "rdf:ID ID #IMPLIED rdf:parseType ( Resource | Literal ) #IMPLIED rdf:resource CDATA #IMPLIED rdf:bagID NMTOKEN #IMPLIED rdf:value CDATA #IMPLIED" > <!ENTITY % rdf-alt-syntax-atts ' rdf:_1 CDATA #IMPLIED rdf:_2 CDATA #IMPLIED rdf:_3 CDATA #IMPLIED rdf:_4 CDATA #IMPLIED rdf:_5 CDATA #IMPLIED rdf:_6 CDATA #IMPLIED rdf:_7 CDATA #IMPLIED rdf:_8 CDATA #IMPLIED '> <!ENTITY % rdf-extra-containers "" > <!ENTITY % rdf-extra-property-types "" > <!ENTITY % rdf-li-types "" > <!-- =================== ELEMENT TYPE DECLARATIONS =========================== --> <!ELEMENT rdf:RDF ( rdf:Description | rdf:Bag | rdf:Seq | rdf:Alt %rdf-extra-containers; )* > <!ATTLIST rdf:RDF xsi:type CDATA #FIXED "rdf:RDF" xmlns:rdf CDATA #FIXED "http://www.w3.org/1999/02/22-rdf-syntax-ns#" > <!ENTITY % rdf-RDF-content ' ( rdf:Description | rdf:Bag | rdf:Seq | rdf:Alt %rdf-extra-containers; )* '> <!ENTITY % rdf-RDF-atts ' xsi:type CDATA #FIXED "rdf:RDF-type" xmlns:rdf CDATA #FIXED "http://www.w3.org/1999/02/22-rdf-syntax-ns#" '> <!ELEMENT rdf:Description ( rdf:Property | rdf:Seq | rdf:Alt | rdf:Bag | | rdf:subject | rdf:object | rdf:type | rdf:predicate %rdf-extra-property-types; )* > <!ATTLIST rdf:Description xsi:type CDATA #FIXED "rdf:Description" ID ID #IMPLIED type CDATA #IMPLIED about CDATA #IMPLIED aboutEach CDATA #IMPLIED aboutEachPrefix CDATA #IMPLIED bagID NMTOKEN #IMPLIED > <!ENTITY % rdf-Description-contents ' ( rdf:Property | rdf:Seq | rdf:Alt | rdf:Bag | | rdf:subject | rdf:object | rdf:type | rdf:predicate %rdf-extra-property-types; )* '> <!ENTITY % rdf-Description-atts ' xsi:type CDATA #FIXED "rdf:Description-type" rdf:ID ID #IMPLIED rdf:type CDATA #IMPLIED rdf:about CDATA #IMPLIED rdf:aboutEach CDATA #IMPLIED rdf:aboutEachPrefix CDATA #IMPLIED rdf:bagID NMTOKEN #IMPLIED '> <!ELEMENT rdf:Seq ( rdf:li %rdf-li-types; )* > <!ATTLIST rdf:Seq xsi:type CDATA #FIXED "rdf:Seq" ID ID #IMPLIED %rdf-alt-syntax-atts; > <!ENTITY % rdf-container-contents ' ( rdf:li %rdf-li-types; )* '> <!ENTITY % rdf-Seq-atts ' xsi:type CDATA #FIXED "rdf:Seq-type" rdf:ID ID #IMPLIED %rdf-alt-syntax-atts; '> <!ELEMENT rdf:Bag ( rdf:li %rdf-li-types;)* > <!ATTLIST rdf:Bag xsi:type CDATA #FIXED "rdf:Bag" ID ID #IMPLIED %rdf-alt-syntax-atts; > <!ENTITY % rdf-Bag-atts ' xsi:type CDATA #FIXED "rdf:Bag-type" rdf:ID ID #IMPLIED %rdf-alt-syntax-atts; '> <!ELEMENT rdf:Alt ( rdf:li %rdf-li-types;)* > <!ATTLIST rdf:Alt xsi:type CDATA #FIXED "rdf:Alt" ID ID #IMPLIED %rdf-alt-syntax-atts; > <!ENTITY % rdf-Alt-atts ' xsi:type CDATA #FIXED "rdf:Alt-type" rdf:ID ID #IMPLIED %rdf-alt-syntax-atts; '> <!ELEMENT rdf:li ANY > <!ATTLIST rdf:li xsi:type CDATA #FIXED "rdf:li" resource CDATA #IMPLIED parseType ( Resource | Literal ) #IMPLIED > <!ENTITY % rdf-li-atts ' xsi:type CDATA #FIXED "rdf:li-type" rdf:resource CDATA #IMPLIED rdf:parseType ( Resource | Literal ) #IMPLIED '> <!ELEMENT rdf:Property ANY > <!ATTLIST rdf:Property xsi:type CDATA #FIXED "rdf:Property" %propEltAttr; > <!ENTITY % rdf-Property-atts ' xsi:type CDATA #FIXED "rdf:Property-type" %rdf-propEltAttr; '> <!ELEMENT rdf:subject ANY> <!ATTLIST rdf:subject xsi:type CDATA #FIXED "rdf:subject" %propEltAttr; > <!ENTITY % rdf-subject-atts ' xsi:type CDATA #FIXED "rdf:subject-type" %rdf-propEltAttr; > '> <!ELEMENT rdf:predicate ANY> <!ATTLIST rdf:predicate xsi:type CDATA #FIXED "rdf:predicate" %propEltAttr; > <!ENTITY % rdf-predicate-atts ' xsi:type CDATA #FIXED "rdf:predicate-type" %rdf-propEltAttr; > '> <!ELEMENT rdf:object ANY> <!ATTLIST rdf:object xsi:type CDATA #FIXED "rdf:object" %propEltAttr; > <!ENTITY % rdf-object-atts ' xsi:type CDATA #FIXED "rdf:object-type" %rdf-propEltAttr; > '> <!ELEMENT rdf:type ANY> <!ATTLIST rdf:type xsi:type CDATA #FIXED "rdf:type" %propEltAttr; > <!ENTITY % rdf-type-atts ' xsi:type CDATA #FIXED "rdf:type-type" %rdf-propEltAttr; > '> <!ELEMENT rdf:value ANY> <!ATTLIST rdf:value xsi:type CDATA #FIXED "rdf:value" <!ENTITY % rdf-value-atts ' xsi:type CDATA #FIXED "rdf:value-type" '>
Given the RDF communities obvious (from the lack of a DTD) antipathy to DTDs, I expect the obvious question will be "Why DTDs now?", since there is talk of XML Schemas and alternative syntaxes.
My answers would be some combination of