]> code.delx.au - gnu-emacs/blob - etc/schema/rdfxml.rnc
Merge from emacs--rel--22
[gnu-emacs] / etc / schema / rdfxml.rnc
1 #
2 # RELAX NG Compact Schema for RDF/XML Syntax
3 #
4 # This schema is for information only and NON-NORMATIVE
5 #
6 # It is based on one originally written by James Clark in
7 # http://lists.w3.org/Archives/Public/www-rdf-comments/2001JulSep/0248.html
8 # and updated with later changes.
9 #
10
11 namespace local = ""
12 namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
13 datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"
14
15
16 start = doc
17
18
19 # I cannot seem to do this in RNGC so they are expanded in-line
20
21 # coreSyntaxTerms = rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype
22 # syntaxTerms = coreSyntaxTerms | rdf:Description | rdf:li
23 # oldTerms = rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID
24 # nodeElementURIs = * - ( coreSyntaxTerms | rdf:li | oldTerms )
25 # propertyElementURIs = * - ( coreSyntaxTerms | rdf:Description | oldTerms )
26 # propertyAttributeURIs = * - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms )
27
28 # Also needed to allow rdf:li on all property element productions
29 # since we can't capture the rdf:li rewriting to rdf_<n> in relaxng
30
31 # Need to add these explicitly
32 xmllang = attribute xml:lang { text }
33 xmlbase = attribute xml:base { text }
34 # and to forbid every other xml:* attribute, element
35
36 doc =
37 RDF
38
39 RDF =
40 element rdf:RDF {
41 xmllang?, xmlbase?, nodeElementList
42 }
43
44 nodeElementList =
45 nodeElement*
46
47 # Should be something like:
48 # ws* , ( nodeElement , ws* )*
49 # but RELAXNG does this by default, ignoring whitespace separating tags.
50
51 nodeElement =
52 element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
53 rdf:resource | rdf:nodeID | rdf:datatype | rdf:li |
54 rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID ) {
55 (idAttr | nodeIdAttr | aboutAttr )?, xmllang?, xmlbase?, propertyAttr*, propertyEltList
56 }
57
58 # It is not possible to say "and not things
59 # beginning with _ in the rdf: namespace" in RELAX NG.
60
61 ws =
62 " "
63
64 # Not used in this RELAX NG schema; but should be any legal XML
65 # whitespace defined by http://www.w3.org/TR/2000/REC-xml-20001006#NT-S
66
67
68 propertyEltList =
69 propertyElt*
70
71 # Should be something like:
72 # ws* , ( propertyElt , ws* )*
73 # but RELAXNG does this by default, ignoring whitespace separating tags.
74
75 propertyElt =
76 resourcePropertyElt |
77 literalPropertyElt |
78 parseTypeLiteralPropertyElt |
79 parseTypeResourcePropertyElt |
80 parseTypeCollectionPropertyElt |
81 parseTypeOtherPropertyElt |
82 emptyPropertyElt
83
84 resourcePropertyElt =
85 element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
86 rdf:resource | rdf:nodeID | rdf:datatype |
87 rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
88 xml:* ) {
89 idAttr?, xmllang?, xmlbase?, nodeElement
90 }
91
92 literalPropertyElt =
93 element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
94 rdf:resource | rdf:nodeID | rdf:datatype |
95 rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
96 xml:* ) {
97 (idAttr | datatypeAttr )?, xmllang?, xmlbase?, text
98 }
99
100 parseTypeLiteralPropertyElt =
101 element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
102 rdf:resource | rdf:nodeID | rdf:datatype |
103 rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
104 xml:* ) {
105 idAttr?, parseLiteral, xmllang?, xmlbase?, literal
106 }
107
108 parseTypeResourcePropertyElt =
109 element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
110 rdf:resource | rdf:nodeID | rdf:datatype |
111 rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
112 xml:* ) {
113 idAttr?, parseResource, xmllang?, xmlbase?, propertyEltList
114 }
115
116 parseTypeCollectionPropertyElt =
117 element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
118 rdf:resource | rdf:nodeID | rdf:datatype |
119 rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
120 xml:* ) {
121 idAttr?, xmllang?, xmlbase?, parseCollection, nodeElementList
122 }
123
124 parseTypeOtherPropertyElt =
125 element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
126 rdf:resource | rdf:nodeID | rdf:datatype |
127 rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
128 xml:* ) {
129 idAttr?, xmllang?, xmlbase?, parseOther, any
130 }
131
132 emptyPropertyElt =
133 element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
134 rdf:resource | rdf:nodeID | rdf:datatype |
135 rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
136 xml:* ) {
137 idAttr?, (resourceAttr | nodeIdAttr)?, xmllang?, xmlbase?, propertyAttr*
138 }
139
140 idAttr =
141 attribute rdf:ID {
142 IDsymbol
143 }
144
145 nodeIdAttr =
146 attribute rdf:nodeID {
147 IDsymbol
148 }
149
150 aboutAttr =
151 attribute rdf:about {
152 URI-reference
153 }
154
155 propertyAttr =
156 attribute * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
157 rdf:resource | rdf:nodeID | rdf:datatype | rdf:li |
158 rdf:Description | rdf:aboutEach |
159 rdf:aboutEachPrefix | rdf:bagID |
160 xml:* ) {
161 string
162 }
163
164 resourceAttr =
165 attribute rdf:resource {
166 URI-reference
167 }
168
169 datatypeAttr =
170 attribute rdf:datatype {
171 URI-reference
172 }
173
174 parseLiteral =
175 attribute rdf:parseType {
176 "Literal"
177 }
178
179 parseResource =
180 attribute rdf:parseType {
181 "Resource"
182 }
183
184 parseCollection =
185 attribute rdf:parseType {
186 "Collection"
187 }
188
189 parseOther =
190 attribute rdf:parseType {
191 text
192 }
193
194 URI-reference =
195 string
196
197 literal =
198 any
199
200 IDsymbol =
201 xsd:NMTOKEN
202
203 any =
204 mixed { element * { attribute * { text }*, any }* }
205