Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

320 lines
7.7 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: nvdl.rnc,v 1.5 2005/01/03 01:49:50 makoto Exp makoto $ -->
<grammar xmlns:nvdl="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" ns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<element name="rules">
<optional>
<ref name="schemaType"/>
</optional>
<zeroOrMore>
<ref name="trigger"/>
</zeroOrMore>
<choice>
<zeroOrMore>
<ref name="rule"/>
</zeroOrMore>
<group>
<attribute name="startMode">
<data type="NCName"/>
</attribute>
<oneOrMore>
<ref name="mode"/>
</oneOrMore>
</group>
</choice>
</element>
</start>
<define name="trigger">
<element name="trigger">
<attribute name="ns">
<data type="string"/>
</attribute>
<attribute name="name">
<data type="NCName"/>
</attribute>
</element>
</define>
<define name="mode">
<element name="mode">
<attribute name="name">
<data type="NCName"/>
</attribute>
<zeroOrMore>
<ref name="includedMode"/>
</zeroOrMore>
<zeroOrMore>
<ref name="rule"/>
</zeroOrMore>
</element>
</define>
<define name="includedMode">
<element name="mode">
<optional>
<attribute name="name">
<data type="NCName"/>
</attribute>
</optional>
<zeroOrMore>
<ref name="includedMode"/>
</zeroOrMore>
<zeroOrMore>
<ref name="rule"/>
</zeroOrMore>
</element>
</define>
<define name="rule">
<choice>
<element name="namespace">
<attribute name="ns">
<data type="string"/>
</attribute>
<optional>
<attribute name="wildcard">
<data type="string">
<param name="maxLength">1</param>
</data>
</attribute>
</optional>
<ref name="ruleModel"/>
</element>
<element name="anyNamespace">
<ref name="ruleModel"/>
</element>
</choice>
</define>
<define name="ruleModel">
<optional>
<attribute name="match">
<ref name="elementsOrAttributes"/>
</attribute>
</optional>
<ref name="actions"/>
</define>
<define name="elementsOrAttributes">
<list>
<choice>
<group>
<value>elements</value>
<value>attributes</value>
</group>
<group>
<value>attributes</value>
<value>elements</value>
</group>
<value>elements</value>
<value>attributes</value>
</choice>
</list>
</define>
<define name="actions">
<choice>
<ref name="cancelAction"/>
<group>
<zeroOrMore>
<ref name="noResultAction"/>
</zeroOrMore>
<choice>
<ref name="noResultAction"/>
<ref name="resultAction"/>
</choice>
<zeroOrMore>
<ref name="noResultAction"/>
</zeroOrMore>
</group>
</choice>
</define>
<define name="cancelAction">
<element name="cancelNestedActions">
<empty/>
</element>
</define>
<define name="noResultAction">
<choice>
<element name="validate">
<optional>
<ref name="schemaType"/>
</optional>
<zeroOrMore>
<choice>
<ref name="message"/>
<ref name="option"/>
</choice>
</zeroOrMore>
<ref name="schema"/>
<ref name="modeUsage"/>
</element>
<element>
<choice>
<name>allow</name>
<name>reject</name>
</choice>
<zeroOrMore>
<ref name="message"/>
</zeroOrMore>
<ref name="modeUsage"/>
</element>
</choice>
</define>
<define name="schema">
<choice>
<attribute name="schema">
<data type="anyURI"/>
</attribute>
<element name="schema">
<choice>
<text/>
<ref name="foreignElement"/>
</choice>
</element>
</choice>
</define>
<define name="message">
<choice>
<attribute name="message"/>
<element name="message">
<interleave>
<text/>
<attribute name="xml:lang"/>
</interleave>
</element>
</choice>
</define>
<define name="resultAction">
<element>
<choice>
<name>attach</name>
<name>attachPlaceHolder</name>
<name>unwrap</name>
</choice>
<zeroOrMore>
<ref name="message"/>
</zeroOrMore>
<ref name="modeUsage"/>
</element>
</define>
<define name="option">
<element name="option">
<attribute name="name">
<data type="anyURI"/>
</attribute>
<optional>
<attribute name="arg"/>
</optional>
<optional>
<attribute name="mustSupport">
<data type="boolean"/>
</attribute>
</optional>
</element>
</define>
<define name="modeUsage">
<optional>
<choice>
<attribute name="useMode">
<data type="NCName"/>
</attribute>
<ref name="nestedMode"/>
</choice>
</optional>
<zeroOrMore>
<element name="context">
<attribute name="path">
<ref name="path"/>
</attribute>
<optional>
<choice>
<attribute name="useMode">
<data type="NCName"/>
</attribute>
<ref name="nestedMode"/>
</choice>
</optional>
</element>
</zeroOrMore>
</define>
<define name="nestedMode">
<element name="mode">
<zeroOrMore>
<ref name="includedMode"/>
</zeroOrMore>
<zeroOrMore>
<ref name="rule"/>
</zeroOrMore>
</element>
</define>
<define name="schemaType">
<attribute name="schemaType">
<ref name="mediaType"/>
</attribute>
</define>
<define name="mediaType">
<a:documentation>5.1 of RFC 2045 allows &lt;any (US-ASCII) CHAR except SPACE, CTLs,
or tspecials&gt;, where
tspecials := "(" / ")" / "&lt;" / "&gt;" / "@" /
"," / ";" / ":" / "\" / &lt;"&gt;
"/" / "[" / "]" / "?" / "="
</a:documentation>
<data type="string">
<param name="pattern">\s*[0-9A-Za-z!#$%&amp;'\*\+\-\.\^_`\{\|\}~]*\\[0-9A-Za-z!#$%&amp;'\*\+\-\.\^_`\{\|\}~]*\s*</param>
</data>
</define>
<define name="path">
<data type="string">
<param name="pattern">\s*(/\s*)?\i\c*(\s*/\s*\i\c*)*\s*(\|\s*(/\s*)?\i\c*(\s*/\s*\i\c*)*\s*)*</param>
</data>
</define>
<define name="foreignElement">
<element>
<anyName>
<except>
<nsName/>
</except>
</anyName>
<zeroOrMore>
<attribute>
<anyName/>
</attribute>
</zeroOrMore>
<mixed>
<zeroOrMore>
<ref name="anyElement"/>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="anyElement">
<element>
<anyName/>
<zeroOrMore>
<attribute>
<anyName/>
</attribute>
</zeroOrMore>
<mixed>
<zeroOrMore>
<ref name="anyElement"/>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="foreignAttribute">
<attribute>
<anyName>
<except>
<nsName/>
<nsName ns=""/>
</except>
</anyName>
</attribute>
</define>
<define name="foreign">
<zeroOrMore>
<ref name="foreignAttribute"/>
</zeroOrMore>
<zeroOrMore>
<ref name="foreignElement"/>
</zeroOrMore>
</define>
</grammar>