view etc/schema/rdfxml.rnc @ 103264:b269cabac20c

* syntax.texi (Position Parse): Document rationale for ignored arguments to syntax-ppss-flush-cache. * processes.texi (Input to Processes): Mark PROCESS arg to process-running-child-p as optional. (Network Options): Document NO-ERROR arg to set-network-process-option. * buffers.texi (Indirect Buffers): Mark clone-indirect-buffer as a command. * searching.texi (POSIX Regexps): Mark posix-search-forward and posix-search-backward as commands. * os.texi (Killing Emacs): Mark kill-emacs as a command. (Suspending Emacs): Mark suspend-emacs as a command. (Processor Run Time): Mark emacs-uptime and emacs-init-time as commands. (Terminal Output): Remove obsolete function baud-rate. Document TERMINAL arg for send-string-to-terminal. * nonascii.texi (Terminal I/O Encoding): Document TERMINAL arg for terminal-coding-system and set-terminal-coding-system. (Explicit Encoding): Mark DESTINATION arg of decode-coding-region as optional. (Character Sets): Document RESTRICTION arg of char-charset. (Character Codes): Mark POS argument to get-byte as optional. * minibuf.texi (Minibuffer Misc): Document ARGS arg for minibuffer-message. * files.texi (Create/Delete Dirs): Mark make-directory and delete-directory as commands. * abbrevs.texi (Abbrev Tables): Fix arglist for make-abbrev-table. * text.texi (Base 64): Mark base64-decode-string and base64-encode-string as commands. (Columns): Mark move-to-column as a command. (Mode-Specific Indent): Document RIGID arg to indent-for-tab-command. (Region Indent): Mark TO-COLUMN arg to indent-region as optional. Mark indent-code-rigidly as a command. (Substitution): Mark translate-region as a command. * frames.texi (Size and Position): Remove obsolete functions screen-height and screen-width.
author Chong Yidong <cyd@stupidchicken.com>
date Wed, 20 May 2009 02:56:33 +0000
parents 3b42757aabec
children
line wrap: on
line source

# RELAX NG Compact Schema for RDF/XML Syntax
#
# Copyright (C) 2001-2008 World Wide Web Consortium, (Massachusetts
# Institute of Technology, European Research Consortium for
# Informatics and Mathematics, Keio University).  All Rights Reserved.
# This work is distributed under the W3C(R) Software License in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even
# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE.
#
# This schema is for information only and NON-NORMATIVE
#
# It is based on one originally written by James Clark in
# http://lists.w3.org/Archives/Public/www-rdf-comments/2001JulSep/0248.html
# and updated with later changes.

namespace local = ""
namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"


start = doc


# I cannot seem to do this in RNGC so they are expanded in-line

# coreSyntaxTerms = rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype
# syntaxTerms = coreSyntaxTerms | rdf:Description | rdf:li
# oldTerms    = rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID
# nodeElementURIs       = * - ( coreSyntaxTerms | rdf:li | oldTerms )
# propertyElementURIs   = * - ( coreSyntaxTerms | rdf:Description | oldTerms )
# propertyAttributeURIs = * - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms )

# Also needed to allow rdf:li on all property element productions
# since we can't capture the rdf:li rewriting to rdf_<n> in relaxng

# Need to add these explicitly
xmllang = attribute xml:lang { text }
xmlbase = attribute xml:base { text }
# and to forbid every other xml:* attribute, element

doc = 
  RDF

RDF =
  element rdf:RDF { 
     xmllang?, xmlbase?, nodeElementList
}

nodeElementList = 
  nodeElement*

  # Should be something like:
  #  ws* , (  nodeElement , ws* )*
  # but RELAXNG does this by default, ignoring whitespace separating tags.

nodeElement =
  element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
                rdf:resource | rdf:nodeID | rdf:datatype | rdf:li |
                rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID ) {
      (idAttr | nodeIdAttr | aboutAttr )?, xmllang?, xmlbase?, propertyAttr*, propertyEltList
  }

  # It is not possible to say "and not things
  # beginning with _ in the rdf: namespace" in RELAX NG.

ws = 
  " "

  # Not used in this RELAX NG schema; but should be any legal XML
  # whitespace defined by http://www.w3.org/TR/2000/REC-xml-20001006#NT-S


propertyEltList = 
  propertyElt*

  # Should be something like:
  #  ws* , ( propertyElt , ws* )*
  # but RELAXNG does this by default, ignoring whitespace separating tags.

propertyElt = 
  resourcePropertyElt | 
  literalPropertyElt | 
  parseTypeLiteralPropertyElt |
  parseTypeResourcePropertyElt |
  parseTypeCollectionPropertyElt |
  parseTypeOtherPropertyElt |
  emptyPropertyElt

resourcePropertyElt = 
  element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
                rdf:resource | rdf:nodeID | rdf:datatype |
                rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
                xml:* ) {
      idAttr?, xmllang?, xmlbase?, nodeElement
  }

literalPropertyElt =
  element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
                rdf:resource | rdf:nodeID | rdf:datatype |
                rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
                xml:* ) {
      (idAttr | datatypeAttr )?, xmllang?, xmlbase?, text 
  }

parseTypeLiteralPropertyElt = 
  element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
                rdf:resource | rdf:nodeID | rdf:datatype |
                rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
                xml:* ) {
      idAttr?, parseLiteral, xmllang?, xmlbase?, literal 
  }

parseTypeResourcePropertyElt = 
  element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
                rdf:resource | rdf:nodeID | rdf:datatype |
                rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
                xml:* ) {
      idAttr?, parseResource, xmllang?, xmlbase?, propertyEltList
  }

parseTypeCollectionPropertyElt = 
  element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
                rdf:resource | rdf:nodeID | rdf:datatype |
                rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
                xml:* ) {
      idAttr?, xmllang?, xmlbase?, parseCollection, nodeElementList
  }

parseTypeOtherPropertyElt = 
  element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
                rdf:resource | rdf:nodeID | rdf:datatype |
                rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
                xml:* ) {
      idAttr?, xmllang?, xmlbase?, parseOther, any
  }

emptyPropertyElt =
   element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
                 rdf:resource | rdf:nodeID | rdf:datatype |
                 rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
                 xml:* ) {
       idAttr?, (resourceAttr | nodeIdAttr)?, xmllang?, xmlbase?, propertyAttr*
   }

idAttr = 
  attribute rdf:ID { 
      IDsymbol 
  }

nodeIdAttr = 
  attribute rdf:nodeID { 
      IDsymbol 
  }

aboutAttr = 
  attribute rdf:about { 
      URI-reference 
  }

propertyAttr = 
  attribute * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
                  rdf:resource | rdf:nodeID | rdf:datatype | rdf:li |
                  rdf:Description | rdf:aboutEach |
		  rdf:aboutEachPrefix | rdf:bagID |
                  xml:* ) {
      string
  }

resourceAttr = 
  attribute rdf:resource {
      URI-reference 
  }

datatypeAttr = 
  attribute rdf:datatype {
      URI-reference 
  }

parseLiteral = 
  attribute rdf:parseType {
      "Literal" 
  }

parseResource = 
  attribute rdf:parseType {
      "Resource"
  }

parseCollection = 
  attribute rdf:parseType {
      "Collection"
  }

parseOther = 
  attribute rdf:parseType {
      text
  }

URI-reference = 
  string

literal =
  any

IDsymbol = 
  xsd:NMTOKEN

any =
  mixed { element * { attribute * { text }*, any }* }