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