1<?xml version="1.0" encoding="UTF-8"?> 2<!--*********************************************************** 3 * 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 * 21 ***********************************************************--> 22 23<grammar xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ns="http://www.w3.org/XML/1998/namespace" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" xmlns:xml="http://www.w3.org/XML/1998/namespace"> 24 <start> 25 <ref name="doc"/> 26 </start> 27 <!-- I cannot seem to do this in RNGC so they are expanded in-line --> 28 <!-- 29 coreSyntaxTerms = rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype 30 syntaxTerms = coreSyntaxTerms | rdf:Description | rdf:li 31 oldTerms = rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID 32 nodeElementURIs = * - ( coreSyntaxTerms | rdf:li | oldTerms ) 33 propertyElementURIs = * - ( coreSyntaxTerms | rdf:Description | oldTerms ) 34 propertyAttributeURIs = * - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms ) 35 --> 36 <!-- 37 Also needed to allow rdf:li on all property element productions 38 since we can't capture the rdf:li rewriting to rdf_<n> in relaxng 39 --> 40 <!-- Need to add these explicitly --> 41 <define name="xmllang"> 42 <attribute name="xml:lang"/> 43 </define> 44 <define name="xmlbase"> 45 <attribute name="xml:base"/> 46 </define> 47 <!-- and to forbid every other xml:* attribute, element --> 48 <define name="doc"> 49 <ref name="RDF"/> 50 </define> 51 <define name="RDF"> 52 <element name="rdf:RDF"> 53 <optional> 54 <ref name="xmllang"/> 55 </optional> 56 <optional> 57 <ref name="xmlbase"/> 58 </optional> 59 <ref name="nodeElementList"/> 60 </element> 61 </define> 62 <define name="nodeElementList"> 63 <zeroOrMore> 64 <ref name="nodeElement"/> 65 </zeroOrMore> 66 </define> 67 <!-- 68 Should be something like: 69 ws* , ( nodeElement , ws* )* 70 but RELAXNG does this by default, ignoring whitespace separating tags. 71 --> 72 <define name="nodeElement"> 73 <element> 74 <anyName> 75 <except> 76 <nsName ns=""/> 77 <name>rdf:RDF</name> 78 <name>rdf:ID</name> 79 <name>rdf:about</name> 80 <name>rdf:parseType</name> 81 <name>rdf:resource</name> 82 <name>rdf:nodeID</name> 83 <name>rdf:datatype</name> 84 <name>rdf:li</name> 85 <name>rdf:aboutEach</name> 86 <name>rdf:aboutEachPrefix</name> 87 <name>rdf:bagID</name> 88 </except> 89 </anyName> 90 <optional> 91 <choice> 92 <ref name="idAttr"/> 93 <ref name="nodeIdAttr"/> 94 <ref name="aboutAttr"/> 95 </choice> 96 </optional> 97 <optional> 98 <ref name="xmllang"/> 99 </optional> 100 <optional> 101 <ref name="xmlbase"/> 102 </optional> 103 <zeroOrMore> 104 <ref name="propertyAttr"/> 105 </zeroOrMore> 106 <ref name="propertyEltList"/> 107 </element> 108 </define> 109 <!-- 110 It is not possible to say "and not things 111 beginning with _ in the rdf: namespace" in RELAX NG. 112 --> 113 <define name="ws"> 114 <value> </value> 115 </define> 116 <!-- 117 Not used in this RELAX NG schema; but should be any legal XML 118 whitespace defined by http://www.w3.org/TR/2000/REC-xml-20001006#NT-S 119 --> 120 <define name="propertyEltList"> 121 <zeroOrMore> 122 <ref name="propertyElt"/> 123 </zeroOrMore> 124 </define> 125 <!-- 126 Should be something like: 127 ws* , ( propertyElt , ws* )* 128 but RELAXNG does this by default, ignoring whitespace separating tags. 129 --> 130 <define name="propertyElt"> 131 <choice> 132 <ref name="resourcePropertyElt"/> 133 <ref name="literalPropertyElt"/> 134 <ref name="parseTypeLiteralPropertyElt"/> 135 <ref name="parseTypeResourcePropertyElt"/> 136 <ref name="parseTypeCollectionPropertyElt"/> 137 <ref name="parseTypeOtherPropertyElt"/> 138 <ref name="emptyPropertyElt"/> 139 </choice> 140 </define> 141 <define name="resourcePropertyElt"> 142 <element> 143 <anyName> 144 <except> 145 <nsName ns=""/> 146 <name>rdf:RDF</name> 147 <name>rdf:ID</name> 148 <name>rdf:about</name> 149 <name>rdf:parseType</name> 150 <name>rdf:resource</name> 151 <name>rdf:nodeID</name> 152 <name>rdf:datatype</name> 153 <name>rdf:Description</name> 154 <name>rdf:aboutEach</name> 155 <name>rdf:aboutEachPrefix</name> 156 <name>rdf:bagID</name> 157 <nsName/> 158 </except> 159 </anyName> 160 <optional> 161 <ref name="idAttr"/> 162 </optional> 163 <optional> 164 <ref name="xmllang"/> 165 </optional> 166 <optional> 167 <ref name="xmlbase"/> 168 </optional> 169 <ref name="nodeElement"/> 170 </element> 171 </define> 172 <define name="literalPropertyElt"> 173 <element> 174 <anyName> 175 <except> 176 <nsName ns=""/> 177 <name>rdf:RDF</name> 178 <name>rdf:ID</name> 179 <name>rdf:about</name> 180 <name>rdf:parseType</name> 181 <name>rdf:resource</name> 182 <name>rdf:nodeID</name> 183 <name>rdf:datatype</name> 184 <name>rdf:Description</name> 185 <name>rdf:aboutEach</name> 186 <name>rdf:aboutEachPrefix</name> 187 <name>rdf:bagID</name> 188 <nsName/> 189 </except> 190 </anyName> 191 <optional> 192 <choice> 193 <ref name="idAttr"/> 194 <ref name="datatypeAttr"/> 195 </choice> 196 </optional> 197 <optional> 198 <ref name="xmllang"/> 199 </optional> 200 <optional> 201 <ref name="xmlbase"/> 202 </optional> 203 <text/> 204 </element> 205 </define> 206 <define name="parseTypeLiteralPropertyElt"> 207 <element> 208 <anyName> 209 <except> 210 <nsName ns=""/> 211 <name>rdf:RDF</name> 212 <name>rdf:ID</name> 213 <name>rdf:about</name> 214 <name>rdf:parseType</name> 215 <name>rdf:resource</name> 216 <name>rdf:nodeID</name> 217 <name>rdf:datatype</name> 218 <name>rdf:Description</name> 219 <name>rdf:aboutEach</name> 220 <name>rdf:aboutEachPrefix</name> 221 <name>rdf:bagID</name> 222 <nsName/> 223 </except> 224 </anyName> 225 <optional> 226 <ref name="idAttr"/> 227 </optional> 228 <ref name="parseLiteral"/> 229 <optional> 230 <ref name="xmllang"/> 231 </optional> 232 <optional> 233 <ref name="xmlbase"/> 234 </optional> 235 <ref name="literal"/> 236 </element> 237 </define> 238 <define name="parseTypeResourcePropertyElt"> 239 <element> 240 <anyName> 241 <except> 242 <nsName ns=""/> 243 <name>rdf:RDF</name> 244 <name>rdf:ID</name> 245 <name>rdf:about</name> 246 <name>rdf:parseType</name> 247 <name>rdf:resource</name> 248 <name>rdf:nodeID</name> 249 <name>rdf:datatype</name> 250 <name>rdf:Description</name> 251 <name>rdf:aboutEach</name> 252 <name>rdf:aboutEachPrefix</name> 253 <name>rdf:bagID</name> 254 <nsName/> 255 </except> 256 </anyName> 257 <optional> 258 <ref name="idAttr"/> 259 </optional> 260 <ref name="parseResource"/> 261 <optional> 262 <ref name="xmllang"/> 263 </optional> 264 <optional> 265 <ref name="xmlbase"/> 266 </optional> 267 <ref name="propertyEltList"/> 268 </element> 269 </define> 270 <define name="parseTypeCollectionPropertyElt"> 271 <element> 272 <anyName> 273 <except> 274 <nsName ns=""/> 275 <name>rdf:RDF</name> 276 <name>rdf:ID</name> 277 <name>rdf:about</name> 278 <name>rdf:parseType</name> 279 <name>rdf:resource</name> 280 <name>rdf:nodeID</name> 281 <name>rdf:datatype</name> 282 <name>rdf:Description</name> 283 <name>rdf:aboutEach</name> 284 <name>rdf:aboutEachPrefix</name> 285 <name>rdf:bagID</name> 286 <nsName/> 287 </except> 288 </anyName> 289 <optional> 290 <ref name="idAttr"/> 291 </optional> 292 <optional> 293 <ref name="xmllang"/> 294 </optional> 295 <optional> 296 <ref name="xmlbase"/> 297 </optional> 298 <ref name="parseCollection"/> 299 <ref name="nodeElementList"/> 300 </element> 301 </define> 302 <define name="parseTypeOtherPropertyElt"> 303 <element> 304 <anyName> 305 <except> 306 <nsName ns=""/> 307 <name>rdf:RDF</name> 308 <name>rdf:ID</name> 309 <name>rdf:about</name> 310 <name>rdf:parseType</name> 311 <name>rdf:resource</name> 312 <name>rdf:nodeID</name> 313 <name>rdf:datatype</name> 314 <name>rdf:Description</name> 315 <name>rdf:aboutEach</name> 316 <name>rdf:aboutEachPrefix</name> 317 <name>rdf:bagID</name> 318 <nsName/> 319 </except> 320 </anyName> 321 <optional> 322 <ref name="idAttr"/> 323 </optional> 324 <optional> 325 <ref name="xmllang"/> 326 </optional> 327 <optional> 328 <ref name="xmlbase"/> 329 </optional> 330 <ref name="parseOther"/> 331 <ref name="any"/> 332 </element> 333 </define> 334 <define name="emptyPropertyElt"> 335 <element> 336 <anyName> 337 <except> 338 <nsName ns=""/> 339 <name>rdf:RDF</name> 340 <name>rdf:ID</name> 341 <name>rdf:about</name> 342 <name>rdf:parseType</name> 343 <name>rdf:resource</name> 344 <name>rdf:nodeID</name> 345 <name>rdf:datatype</name> 346 <name>rdf:Description</name> 347 <name>rdf:aboutEach</name> 348 <name>rdf:aboutEachPrefix</name> 349 <name>rdf:bagID</name> 350 <nsName/> 351 </except> 352 </anyName> 353 <optional> 354 <ref name="idAttr"/> 355 </optional> 356 <optional> 357 <choice> 358 <ref name="resourceAttr"/> 359 <ref name="nodeIdAttr"/> 360 </choice> 361 </optional> 362 <optional> 363 <ref name="xmllang"/> 364 </optional> 365 <optional> 366 <ref name="xmlbase"/> 367 </optional> 368 <zeroOrMore> 369 <ref name="propertyAttr"/> 370 </zeroOrMore> 371 </element> 372 </define> 373 <define name="idAttr"> 374 <attribute name="rdf:ID"> 375 <ref name="IDsymbol"/> 376 </attribute> 377 </define> 378 <define name="nodeIdAttr"> 379 <attribute name="rdf:nodeID"> 380 <ref name="IDsymbol"/> 381 </attribute> 382 </define> 383 <define name="aboutAttr"> 384 <attribute name="rdf:about"> 385 <ref name="URI-reference"/> 386 </attribute> 387 </define> 388 <define name="propertyAttr"> 389 <attribute> 390 <anyName> 391 <except> 392 <nsName ns=""/> 393 <name>rdf:RDF</name> 394 <name>rdf:ID</name> 395 <name>rdf:about</name> 396 <name>rdf:parseType</name> 397 <name>rdf:resource</name> 398 <name>rdf:nodeID</name> 399 <name>rdf:datatype</name> 400 <name>rdf:li</name> 401 <name>rdf:Description</name> 402 <name>rdf:aboutEach</name> 403 <name>rdf:aboutEachPrefix</name> 404 <name>rdf:bagID</name> 405 <nsName/> 406 </except> 407 </anyName> 408 <data type="string" datatypeLibrary=""/> 409 </attribute> 410 </define> 411 <define name="resourceAttr"> 412 <attribute name="rdf:resource"> 413 <ref name="URI-reference"/> 414 </attribute> 415 </define> 416 <define name="datatypeAttr"> 417 <attribute name="rdf:datatype"> 418 <ref name="URI-reference"/> 419 </attribute> 420 </define> 421 <define name="parseLiteral"> 422 <attribute name="rdf:parseType"> 423 <value>Literal</value> 424 </attribute> 425 </define> 426 <define name="parseResource"> 427 <attribute name="rdf:parseType"> 428 <value>Resource</value> 429 </attribute> 430 </define> 431 <define name="parseCollection"> 432 <attribute name="rdf:parseType"> 433 <value>Collection</value> 434 </attribute> 435 </define> 436 <define name="parseOther"> 437 <attribute name="rdf:parseType"/> 438 </define> 439 <define name="URI-reference"> 440 <data type="string" datatypeLibrary=""/> 441 </define> 442 <define name="literal"> 443 <ref name="any"/> 444 </define> 445 <define name="IDsymbol"> 446 <data type="NMTOKEN"/> 447 </define> 448 <define name="any"> 449 <mixed> 450 <zeroOrMore> 451 <element> 452 <anyName/> 453 <zeroOrMore> 454 <attribute> 455 <anyName/> 456 </attribute> 457 </zeroOrMore> 458 <ref name="any"/> 459 </element> 460 </zeroOrMore> 461 </mixed> 462 </define> 463</grammar> 464