<!DOCTYPE testSuite [
<!ENTITY dii "<&#xE14;&#xE35;/>">
]>
<testSuite>
<author>James Clark</author>
<email>jjc@jclark.com</email>
<documentation>For October 26 version of the spec.</documentation>
<testSuite>
<section>3</section>
<testSuite>
<documentation>Various possible syntax errors.</documentation>
<testCase>
<section>3</section>
<incorrect>
<thisIsJunk/>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <element name="foo">
    <empty/>
  </element>
  <start>
    <element name="foo">
      <empty/>
    </element>
  </start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <define name="bar">
    <text/>
  </define>
  <text/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <name>foo</name>
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <group>
    <name>bar</name>
  </group>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <anyName>
    <except>
      <name>foo</name>
    </except>
    <except>
      <name>bar</name>
    </except>
  </anyName>
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <nsName>
    <except>
      <name>foo</name>
    </except>
    <except>
      <name>bar</name>
    </except>
  </nsName>
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <data type="token">
    <except>
      <value>foo</value>
    </except>
    <except>
      <value>bar</value>
    </except>
  </data>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <empty name="bar"/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo" extra="bar">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <empty>
    <empty/>
  </empty>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <text>
    <empty/>
  </text>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <choice>
    <text/>
    <notAllowed>
      <empty/>
    </notAllowed>
  </choice>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="foo">
      <empty/>
    </ref>
  </start>
  <define name="foo">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <grammar>
      <start>
        <parentRef name="foo">
          <empty/>
        </parentRef>
      </start>
    </grammar>
  </start>
  <define name="foo">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<documentation>Tests for obsolete syntax</documentation>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start name="foo">
    <element name="foo">
      <empty/>
    </element>
  </start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo" ns="http://www.example.com">
  <attribute name="bar" global="true">
    <text/>
  </attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <not>
    <name>foo</name>
  </not>
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <difference>
    <anyName/>
    <name>foo</name>
  </difference>
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <data type="token" key="foo"/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <data type="token" keyRef="foo"/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <keyRef name="foo">
    <data type="token"/>
  </keyRef>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <key name="foo">
    <data type="token"/>
  </key>
</element>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<documentation>Tests for missing attributes and child elements</documentation>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <name>foo</name>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0">
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <optional/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <zeroOrMore/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <list/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <mixed/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <choice/>
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <anyName>
    <except/>
  </anyName>
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <nsName ns="">
    <except/>
  </nsName>
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="string">
    <except/>
  </data>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="string">
    <param/>
  </data>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <grammar>
    <start/>
  </grammar>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="bar">
      <empty/>
    </element>
  </start>
  <define name="baz"/>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <externalRef/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include/>
  <start>
    <element name="foo">
      <empty/>
    </element>
  </start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <empty/>
    </element>
  </start>
  <define>
    <element name="bar">
      <empty/>
    </element>
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref/>
  </start>
  <define name="foo">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <grammar>
      <start>
        <parentRef/>
      </start>
    </grammar>
  </start>
  <define name="foo">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<documentation>Checking of ns attribute</documentation>
<testCase>
<section>3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" ns="">
  <empty/>
</element>
</correct>
<valid>
<foo/>
</valid>
</testCase>
<testCase>
<section>3</section>
<documentation>No checking of ns attribute is performed</documentation>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" ns="DAV:">
  <empty/>
</element>
</correct>
<valid>
<foo xmlns="DAV:"/>
</valid>
</testCase>
<testCase>
<section>3</section>
<documentation>No checking of ns attribute is performed</documentation>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" ns="xyzzy">
  <empty/>
</element>
</correct>
</testCase>
<testCase>
<section>3</section>
<documentation>No checking of ns attribute is performed</documentation>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" ns="bad_scheme://">
  <empty/>
</element>
</correct>
</testCase>
</testSuite>
<testSuite>
<documentation>Checking of datatypeLibrary attribute</documentation>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="foo_bar:xyzzy">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="foobar:xyzzy">
  <empty/>
</element>
</correct>
<valid>
<foo/>
</valid>
</testCase>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http:ok">
  <empty/>
</element>
</correct>
<valid>
<foo/>
</valid>
</testCase>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="foo:">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.example.com/%">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.example.com/%xx">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.example.com/%Aa">
  <empty/>
</element>
</correct>
<valid>
<foo/>
</valid>
</testCase>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must not be relative</documentation>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="xyzzy">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must not be relative</documentation>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="xyzzy#foo:bar">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must not be relative</documentation>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="xyzzy?foo:bar">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must not be relative</documentation>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="xyzzy/foo:bar">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="foo:bar">
  <empty/>
</element>
</correct>
<valid>
<foo/>
</valid>
</testCase>
<testCase>
<section>3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="">
  <empty/>
</element>
</correct>
<valid>
<foo/>
</valid>
</testCase>
<testCase>
<section>3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data datatypeLibrary="" type="string"/>
</element>
</correct>
<valid>
<foo>x</foo>
</valid>
</testCase>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must not contain fragment identifier</documentation>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0"
          datatypeLibrary="http://www.example.com#xyzzy">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<documentation>Value of datatypeLibrary attribute must not contain fragment identifier</documentation>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0"
          datatypeLibrary="http://www.example.com#">
  <empty/>
</element>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<documentation>Tests for QName and NCNames in schemas</documentation>
<testCase>
<section>3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <element name="&#xE14;&#xE35;">
    <empty/>
  </element>
</element>
</correct>
<valid>
<foo>&dii;</foo>
</valid>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="&#xE35;" xmlns="http://relaxng.org/ns/structure/1.0">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="" xmlns="http://relaxng.org/ns/structure/1.0">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <name>&#xE35;</name>
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="&#xE35;"/>
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="&#xE35;"/>
  </start>
  <define name="&#xE35;">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="&#xE14;&#xE35;"/>
  </start>
  <define name="&#xE14;&#xE35;">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</correct>
<valid>
<foo/>
</valid>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name=""/>
  </start>
  <define name="">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="x y"/>
  </start>
  <define name="x y">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
         xmlns:x="http://www.example.com/x">
  <start>
    <ref name="x:y"/>
  </start>
  <define name="x:y">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0"
         xmlns:x="http://www.example.com/x"
         name="x:&#xE35;">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0"
         xmlns:x="http://www.example.com/x"
         name="x:y:z">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0"
         xmlns:x="http://www.example.com/x"
         name="x:">
  <empty/>
</element>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<documentation>Tests for elements that allow only a single pattern child.</documentation>
<testCase>
<section>3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <empty/>
    </element>
    <empty/>
  </start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <attribute name="bar">
    <text/>
    <empty/>
  </attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <attribute>
    <name>bar</name>
    <text/>
    <empty/>
  </attribute>
</element>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<documentation>Tests for foreign element and attribute handling.</documentation>
<testCase>
<section>3</section>
<incorrect>
<r:element name="foo" xmlns:r="http://relaxng.org/ns/structure/1.0" r:a="val">
  <r:empty/>
</r:element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <name>foo<eg:comment xmlns:eg="http://www.example.com"/></name>
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <value>foo<eg:comment xmlns:eg="http://www.example.com"/></value>
</element>
</incorrect>
</testCase>
<testCase>
<section>3</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <data type="string"><eg:comment xmlns:eg="http://www.example.com"/></data>
</element>
</correct>
<valid>
<foo>X</foo>
</valid>
</testCase>
<testCase>
<section>3</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <empty>
    <ext xmlns="http://www.example.com">
      <element xmlns="http://relaxng.org/ns/structure/1.0"/>
    </ext>
  </empty>
</element>
</correct>
<valid>
<foo/>
</valid>
</testCase>
<testCase>
<section>3</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:eg="http://www.example.com">
  <eg:comment/>
  <eg:comment/>
  <start>
    <eg:comment/>
    <element>
      <eg:comment/>
      <eg:comment/>
      <name>foo</name>
      <eg:comment/>
      <data type="string"/>
      <eg:comment/>
      <empty>
        <eg:comment/>
        <eg:comment/>
      </empty>
      <eg:comment/>
      <eg:comment/>
    </element>
    <eg:comment/>
  </start>
  <eg:comment/>
</grammar>
</correct>
<valid>
<foo>X</foo>
</valid>
</testCase>
<testCase>
<section>3</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"  xmlns:eg="http://www.example.com"
  eg:comment="">
  <start eg:comment="">
    <element eg:comment="">
      <name eg:comment="">foo</name>
      <data eg:comment="" type="string"/>
      <empty eg:comment=""/>
    </element>
  </start>
</grammar>
</correct>
<valid>
<foo>X</foo>
</valid>
</testCase>
<testCase>
<section>3</section>
<correct>
<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0" xmlns="http://www.example.com">
  <comment/>
  <comment/>
  <rng:start>
    <comment/>
    <rng:element>
      <comment/>
      <comment/>
      <rng:name>foo</rng:name>
      <comment/>
      <rng:data type="string"/>
      <comment/>
    </rng:element>
    <comment/>
  </rng:start>
  <comment/>
</rng:grammar>
</correct>
<valid>
<foo>X</foo>
</valid>
</testCase>
<testCase>
<section>3</section>
<correct>
<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0">
  <comment/>
  <comment/>
  <rng:start>
    <comment/>
    <rng:element>
      <comment/>
      <comment/>
      <rng:name>foo</rng:name>
      <comment/>
      <rng:data type="string"/>
      <comment/>
    </rng:element>
    <comment/>
  </rng:start>
  <comment/>
</rng:grammar>
</correct>
<valid>
<foo>X</foo>
</valid>
</testCase>
</testSuite>
</testSuite>
<testSuite>
<section>4</section>
<testSuite>
<section>4.2</section>
<testCase>
<section>4.2</section>
<correct>
<element name="&#xA;&#xD;&#x20;&#x9;foo&#xA;&#xD;&#x20;&#x9;" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="&#xA;&#xD;&#x20;&#x9;bar&#xA;&#xD;&#x20;&#x9;"/>
</element>
</correct>
<valid>
<foo bar=""/>
</valid>
</testCase>
<testCase>
<section>4.2</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="&#xA;&#xD;&#x20;&#x9;string&#xA;&#xD;&#x20;&#x9;">bar</value>
</element>
</correct>
<valid>
<foo>bar</foo>
</valid>
<invalid>
<foo>bar </foo>
</invalid>
</testCase>
<testCase>
<section>4.2</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="&#xA;&#xD;&#x20;&#x9;string&#xA;&#xD;&#x20;&#x9;"/>
</element>
</correct>
<valid>
<foo>X</foo>
</valid>
</testCase>
<testCase>
<section>4.2</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <name>&#xA;&#xD;&#x20;&#x9;foo&#xA;&#xD;&#x20;&#x9;</name>
  <attribute><name>&#xA;&#xD;&#x20;&#x9;bar&#xA;&#xD;&#x20;&#x9;</name></attribute>
</element>
</correct>
<valid>
<foo bar=""/>
</valid>
</testCase>
<testCase>
<section>4.2</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start combine="&#xA;&#xD;&#x20;&#x9;choice&#xA;&#xD;&#x20;&#x9;">
    <ref name="&#xA;&#xD;&#x20;&#x9;x&#xA;&#xD;&#x20;&#x9;"/>
  </start>
  <define name="x">
    <ref name="y"/>
  </define>
  <define name="&#xA;&#xD;&#x20;&#x9;y&#xA;&#xD;&#x20;&#x9;">
    <grammar>
      <start combine="&#xA;&#xD;&#x20;&#x9;interleave&#xA;&#xD;&#x20;&#x9;">
        <parentRef name="&#xA;&#xD;&#x20;&#x9;z&#xA;&#xD;&#x20;&#x9;"/>
      </start>
    </grammar>
  </define>
  <define name="z">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</correct>
<valid>
<foo/>
</valid>
</testCase>
</testSuite>
<testCase>
<section>4.4</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <value datatypeLibrary="http://www.example.com/this-does-not-exist">bar</value>
</element>
</correct>
<valid>
<foo>bar</foo>
</valid>
<valid>
<foo>
	bar
</foo>
</valid>
<valid>
<foo> bar </foo>
</valid>
<invalid>
<foo>baz</foo>
</invalid>
<invalid>
<foo>ba r</foo>
</invalid>
</testCase>
<testSuite>
<section>4.5</section>
<testCase>
<section>4.5</section>
<dir name="sub">
<resource name="x">
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <empty/>
</element>
</resource>
</dir>
<correct>
<externalRef xmlns="http://relaxng.org/ns/structure/1.0"
             xml:base="sub/y" href="x"/>
</correct>
<valid>
<foo/>
</valid>
<invalid>
<bar/>
</invalid>
</testCase>
<testCase>
<section>4.5</section>
<resource name="x">
<element xmlns="http://relaxng.org/ns/structure/1.0" name="bar">
  <empty/>
</element>
</resource>
<dir name="sub1">
<resource name="x">
<element xmlns="http://relaxng.org/ns/structure/1.0" name="bar">
  <empty/>
</element>
</resource>
<dir name="sub3">
<resource name="x">
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <empty/>
</element>
</resource>
</dir>
</dir>
<correct>
<group xmlns="http://relaxng.org/ns/structure/1.0" xml:base="sub1/">
  <group>
    <group xml:base="sub2">
      <group>
         <group xml:base="sub3/y">
           <externalRef href="x"/>
         </group>
      </group>
    </group>
  </group>
</group>
</correct>
<valid>
<foo/>
</valid>
<invalid>
<bar/>
</invalid>
</testCase>
<testCase>
<section>4.5</section>
<resource name="x">
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <empty/>
</element>
</resource>
<incorrect>
<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x#foo"/>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<section>4.6</section>
<testCase>
<section>4.6</section>
<resource name="x">
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <empty/>
</element>
</resource>
<correct>
<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x"/>
</correct>
<valid>
<foo/>
</valid>
<invalid>
<bar/>
</invalid>
</testCase>
<testCase>
<section>4.6</section>
<resource name="x">
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <empty/>
</element>
</resource>
<correct>
<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x" ns="http://www.example.com"/>
</correct>
<valid>
<foo xmlns="http://www.example.com"/>
</valid>
<invalid>
<foo/>
</invalid>
</testCase>
<testCase>
<section>4.6</section>
<resource name="x">
<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x"/>
</resource>
<incorrect>
<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x"/>
</incorrect>
</testCase>
<testCase>
<section>4.6</section>
<resource name="x">
<start xmlns="http://relaxng.org/ns/structure/1.0">
  <element name="foo">
    <empty/>
  </element>
</start>
</resource>
<incorrect>
<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x"/>
</incorrect>
</testCase>
<testCase>
<section>4.6</section>
<resource name="x">
<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="y"/>
</resource>
<resource name="y">
<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x"/>
</resource>
<incorrect>
<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x"/>
</incorrect>
</testCase>
<testCase>
<section>4.6</section>
<documentation>Same value of href before resolution, but not a loop.</documentation>
<dir name="sub">
<resource name="x">
<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="sub/x"/>
</resource>
<dir name="sub">
<resource name="x">
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <empty/>
</element>
</resource>
</dir>
</dir>
<correct>
<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="sub/x"/>
</correct>
<valid>
<foo/>
</valid>
<invalid>
<bar/>
</invalid>
</testCase>
</testSuite>
<testSuite>
<section>4.7</section>
<testCase>
<section>4.7</section>
<resource name="x">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <empty/>
    </element>
  </start>
</grammar>
</resource>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="x"/>
</grammar>
</correct>
<valid>
<foo/>
</valid>
<invalid>
<bar/>
</invalid>
</testCase>
<testCase>
<section>4.7</section>
<resource name="x">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <empty/>
    </element>
  </start>
</grammar>
</resource>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="x" ns="http://www.example.com"/>
</grammar>
</correct>
<valid>
<foo xmlns="http://www.example.com"/>
</valid>
<invalid>
<foo/>
</invalid>
</testCase>
<testCase>
<section>4.7</section>
<resource name="x">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="y"/>
</grammar>
</resource>
<resource name="y">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <empty/>
    </element>
  </start>
</grammar>
</resource>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="x"/>
</grammar>
</correct>
<valid>
<foo/>
</valid>
<invalid>
<bar/>
</invalid>
</testCase>
<testCase>
<section>4.7</section>
<resource name="x">
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <empty/>
</element>
</resource>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="x"/>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.7</section>
<resource name="x">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="x"/>
</grammar>
</resource>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="x"/>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.7</section>
<resource name="x">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="y"/>
</grammar>
</resource>
<resource name="y">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="x"/>
</grammar>
</resource>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="x"/>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.7</section>
<dir name="sub">
<resource name="x">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="sub/x"/>
</grammar>
</resource>
<dir name="sub">
<resource name="x">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <empty/>
    </element>
  </start>
</grammar>
</resource>
</dir>
</dir>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="sub/x"/>
</grammar>
</correct>
<valid>
<foo/>
</valid>
<invalid>
<bar/>
</invalid>
</testCase>
<testCase>
<section>4.7</section>
<resource name="x">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <define name="foo">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</resource>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="x">
    <start>
      <ref name="foo"/>
    </start>
  </include>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.7</section>
<resource name="x">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <define name="foo">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</resource>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="x"/>
  <start>
    <ref name="foo"/>
  </start>
</grammar>
</correct>
<valid><foo/></valid>
<invalid><bar/></invalid>
</testCase>
<testCase>
<section>4.7</section>
<resource name="x">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="foo"/>
  </start>
</grammar>
</resource>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="x">
    <define name="foo">
      <element name="foo">
        <empty/>
      </element>
    </define>
  </include>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.7</section>
<resource name="x">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="foo"/>
  </start>
</grammar>
</resource>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <include href="x"/>
  <define name="foo">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>
</correct>
<valid><foo/></valid>
<invalid><bar/></invalid>
</testCase>
<testCase>
<section>4.7</section>
<resource name="x">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <define name="foo" combine="choice">
    <element name="foo3">
      <empty/>
    </element>
  </define>
</grammar>
</resource>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="foo"/>
  </start>
  <include href="x">
    <define name="foo" combine="choice">
      <element name="foo1">
	<empty/>
      </element>
    </define>
  </include>
  <define name="foo">
    <element name="foo2">
      <empty/>
    </element>
  </define>
</grammar>
</correct>
<valid><foo1/></valid>
<valid><foo2/></valid>
<invalid><foo3/></invalid>
</testCase>
<testCase>
<section>4.7</section>
<resource name="level1.rng">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<include href="level2.rng">
  <define name="foo">
    <element name="bar">
      <empty/>
    </element>
  </define>
</include>
</grammar>
</resource>
<resource name="level2.rng">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <define name="bar">
    <element name="bar">
      <empty/>
    </element>
  </define>
</grammar>
</resource>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <ref name="foo"/>
</start>
<include href="level1.rng">
  <define name="foo">
    <element name="foo">
      <empty/>
    </element>
  </define>
</include>
</grammar>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<section>4.8</section>
<testCase>
<section>4.8</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" ns="http://www.example.com" name="foo">
  <attribute name="bar" ns="http://www.example.com"/>
</element>
</correct>
<valid>
<eg:foo eg:bar="x" xmlns:eg="http://www.example.com"/>
</valid>
<invalid>
<eg:foo xmlns:eg="http://www.example.com" bar="x"/>
</invalid>
</testCase>
<testCase>
<section>4.8</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" ns="http://www.example.com" name="foo">
  <attribute name="bar"/>
</element>
</correct>
<invalid>
<eg:foo xmlns:eg="http://www.example.com" eg:bar="x"/>
</invalid>
<valid>
<eg:foo xmlns:eg="http://www.example.com" bar="x"/>
</valid>
</testCase>
</testSuite>
<testSuite>
<section>4.9</section>
<testCase>
<section>4.9</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" ns="http://www.example.com" name="foo">
  <attribute>
    <name>bar</name>
  </attribute>
</element>
</correct>
<valid>
<eg:foo xmlns:eg="http://www.example.com" eg:bar="x"/>
</valid>
<invalid>
<eg:foo xmlns:eg="http://www.example.com" bar="x"/>
</invalid>
</testCase>
<testCase>
<section>4.6</section>
<section>4.9</section>
<resource name="x">
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <empty/>
</element>
</resource>
<correct>
<group ns="http://www.example.com" xmlns="http://relaxng.org/ns/structure/1.0" >
<externalRef href="x"/>
</group>
</correct>
<valid>
<foo xmlns="http://www.example.com"/>
</valid>
<invalid>
<foo/>
</invalid>
</testCase>
<testCase>
<correct>
<group xmlns="http://relaxng.org/ns/structure/1.0">
  <element ns="http://www.example.com">
    <name>foo</name>
    <empty/>
  </element>
</group>
</correct>
<valid><foo xmlns="http://www.example.com"/></valid>
<invalid><foo/></invalid>
</testCase>
<testCase>
<correct>
<element ns="http://www.example.com" xmlns="http://relaxng.org/ns/structure/1.0">
  <name>foo</name>
  <empty/>
</element>
</correct>
<valid><foo xmlns="http://www.example.com"/></valid>
<invalid><foo/></invalid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute ns="http://www.example.com">
    <name>bar</name>
    <text/>
  </attribute>
</element>
</correct>
<valid><foo xmlns:x="http://www.example.com" x:bar="whatever"/></valid>
<invalid><foo bar="whatever"/></invalid>
</testCase>
</testSuite>
<testSuite>
<section>4.10</section>
<testCase>
<section>4.10</section>
<incorrect>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo:bar">
  <empty/>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.10</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="eg:foo" xmlns:eg="http://www.example.com">
  <empty/>
</element>
</correct>
<valid>
<foo xmlns="http://www.example.com"/>
</valid>
<invalid>
<foo xmlns="http://www.example.com/"/>
</invalid>
</testCase>
<testCase>
<section>4.10</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo" xmlns:eg="http://www.example.com">
  <attribute name="eg:bar"/>
</element>
</correct>
<valid>
<foo xmlns:ex="http://www.example.com" ex:bar="x"/>
</valid>
<invalid>
<foo xmlns:ex="http://www.example.com/" ex:bar="x"/>
</invalid>
</testCase>
<testCase>
<section>4.10</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <attribute name="xml:lang"/>
</element>
</correct>
<valid>
<foo xml:lang="en"/>
</valid>
<invalid>
<foo lang="en"/>
</invalid>
</testCase>
</testSuite>
<testSuite>
<section>4.11</section>
<testCase>
<section>4.11</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <div ns="http://www.example.com">
    <div>
      <start>
        <ref name="foo"/>
      </start>
    </div>
    <define name="foo">
      <element name="foo">
        <empty/>
      </element>
    </define>
  </div>
  <div/>
</grammar>
</correct>
<valid>
<foo xmlns="http://www.example.com"/>
</valid>
<invalid>
<foo/>
</invalid>
</testCase>
</testSuite>
<testSuite>
<testCase>
<section>4.12</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">

<start>
  <element name="foo">
    <ref name="bars"/>
  </element>
</start>

<define name="bars">
  <element name="bar">
    <empty/>
  </element>
  <element name="bar">
    <empty/>
  </element>
  <element name="bar">
    <empty/>
  </element>
</define>

</grammar>
</correct>
<valid>
<foo><bar/><bar/><bar/></foo>
</valid>
<invalid>
<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/></foo>
</invalid>
<invalid>
<foo></foo>
</invalid>
<invalid>
<foo>X</foo>
</invalid>
<invalid>
<foo><bar/>X<bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/><bar/><bar/><bar/></foo>
</invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <element name="bar">
      <empty/>
    </element>
    <element name="bar">
      <empty/>
    </element>
    <element name="bar">
      <empty/>
    </element>
  </oneOrMore>
</element>
</correct>
<valid>
<foo><bar/><bar/><bar/></foo>
</valid>
<valid>
<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
</valid>
<invalid>
<foo><bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/></foo>
</invalid>
<invalid>
<foo></foo>
</invalid>
<invalid>
<foo>X</foo>
</invalid>
<invalid>
<foo><bar/>X<bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/><bar/><bar/><bar/></foo>
</invalid>
</testCase>
<testCase>
<section>4.12</section>
<section>4.15</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <zeroOrMore>
    <element name="bar">
      <empty/>
    </element>
    <element name="bar">
      <empty/>
    </element>
    <element name="bar">
      <empty/>
    </element>
  </zeroOrMore>
</element>
</correct>
<valid>
<foo><bar/><bar/><bar/></foo>
</valid>
<valid>
<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
</valid>
<invalid>
<foo><bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/></foo>
</invalid>
<valid>
<foo></foo>
</valid>
<invalid>
<foo>X</foo>
</invalid>
<invalid>
<foo><bar/>X<bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/><bar/><bar/><bar/></foo>
</invalid>
</testCase>
<testCase>
<section>4.12</section>
<section>4.14</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <optional>
    <element name="bar">
      <empty/>
    </element>
    <element name="bar">
      <empty/>
    </element>
    <element name="bar">
      <empty/>
    </element>
  </optional>
</element>
</correct>
<valid>
<foo><bar/><bar/><bar/></foo>
</valid>
<invalid>
<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/></foo>
</invalid>
<valid>
<foo></foo>
</valid>
<invalid>
<foo>X</foo>
</invalid>
<invalid>
<foo><bar/>X<bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/><bar/><bar/><bar/></foo>
</invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <list>
    <value>x</value>
    <value>y</value>
    <value>z</value>
  </list>
</element>
</correct>
<valid>
<foo>x y z</foo>
</valid>
<invalid>
<foo>x</foo>
</invalid>
</testCase>
<testCase>
<section>4.12</section>
<section>4.13</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <mixed>
    <element name="bar">
      <empty/>
    </element>
    <element name="bar">
      <empty/>
    </element>
    <element name="bar">
      <empty/>
    </element>
  </mixed>
</element>
</correct>
<valid>
<foo><bar/><bar/><bar/></foo>
</valid>
<invalid>
<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/></foo>
</invalid>
<invalid>
<foo></foo>
</invalid>
<valid>
<foo><bar/>X<bar/><bar/></foo>
</valid>
<invalid>
<foo>X</foo>
</invalid>
<invalid>
<foo><bar/><bar/><bar/><bar/></foo>
</invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <name>foo</name>
  <element name="bar">
    <empty/>
  </element>
  <element name="bar">
    <empty/>
  </element>
  <element name="bar">
    <empty/>
  </element>
</element>
</correct>
<valid>
<foo><bar/><bar/><bar/></foo>
</valid>
<invalid>
<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/></foo>
</invalid>
<invalid>
<foo></foo>
</invalid>
<invalid>
<foo>X</foo>
</invalid>
<invalid>
<foo><bar/>X<bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/><bar/><bar/><bar/></foo>
</invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <anyName>
    <except>
      <name>foo</name>
      <name>bar</name>
      <name>baz</name>
    </except>
  </anyName>
  <empty/>
</element>
</correct>
<valid><xyzzy/></valid>
<invalid><foo/></invalid>
<invalid><bar/></invalid>
<invalid><baz/></invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="token">
    <except>
      <value>x</value>
      <value>y</value>
      <value>z</value>
    </except>
  </data>
</element>
</correct>
<valid><foo/></valid>
<valid><foo>xyz</foo></valid>
<invalid><foo>x</foo></invalid>
<invalid><foo>y</foo></invalid>
<invalid><foo>y</foo></invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="bar"/>
</element>
</correct>
<valid>
<foo bar=""/>
</valid>
<valid>
<foo bar="x"/>
</valid>
<invalid>
<foo/>
</invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute>
    <name>bar</name>
  </attribute>
</element>
</correct>
<valid>
<foo bar=""/>
</valid>
<valid>
<foo bar="x"/>
</valid>
<invalid>
<foo/>
</invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <element name="bar">
      <empty/>
    </element>
    <element name="bar">
      <empty/>
    </element>
    <element name="bar">
      <empty/>
    </element>
  </group>
</element>
</correct>
<valid>
<foo><bar/><bar/><bar/></foo>
</valid>
<invalid>
<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/></foo>
</invalid>
<invalid>
<foo></foo>
</invalid>
<invalid>
<foo>X</foo>
</invalid>
<invalid>
<foo><bar/>X<bar/><bar/></foo>
</invalid>
<invalid>
<foo><bar/><bar/><bar/><bar/></foo>
</invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <element name="bar1">
      <empty/>
    </element>
    <element name="bar2">
      <empty/>
    </element>
    <element name="bar3">
      <empty/>
    </element>
  </choice>
</element>
</correct>
<valid><foo><bar1/></foo></valid>
<valid><foo><bar2/></foo></valid>
<valid><foo><bar3/></foo></valid>
<invalid><foo/></invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar1">
      <empty/>
    </element>
    <element name="bar2">
      <empty/>
    </element>
    <element name="bar3">
      <empty/>
    </element>
  </interleave>
</element>
</correct>
<valid><foo><bar1/><bar2/><bar3/></foo></valid>
<valid><foo><bar1/><bar3/><bar2/></foo></valid>
<valid><foo><bar2/><bar1/><bar3/></foo></valid>
<valid><foo><bar2/><bar3/><bar1/></foo></valid>
<valid><foo><bar3/><bar1/><bar2/></foo></valid>
<valid><foo><bar3/><bar2/><bar1/></foo></valid>
<invalid><foo><bar2/><bar1/></foo></invalid>
<invalid><foo><bar1/><bar3/><bar2/><bar1/></foo></invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <element name="bar">
      <empty/>
    </element>
  </group>
</element>
</correct>
<valid><foo><bar/></foo></valid>
<invalid><foo/></invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
  </interleave>
</element>
</correct>
<valid><foo><bar/></foo></valid>
<invalid><foo/></invalid>
</testCase>
<testCase>
<section>4.12</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <element name="bar">
      <empty/>
    </element>
  </choice>
</element>
</correct>
<valid><foo><bar/></foo></valid>
<invalid><foo/></invalid>
</testCase>
</testSuite>
<testSuite>
<section>4.13</section>
<testCase>
<section>4.13</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <mixed>
    <element name="bar">
      <empty/>
    </element>
  </mixed>
</element>
</correct>
<valid><foo>x<bar/></foo></valid>
<valid><foo><bar/></foo></valid>
<valid><foo><bar/>x</foo></valid>
<valid><foo>x<bar/>y</foo></valid>
<invalid><foo/></invalid>
<invalid><foo><bar/><bar/></foo></invalid>
</testCase>
</testSuite>
<testSuite>
<section>4.14</section>
<testCase>
<section>4.14</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <optional>
    <element name="bar">
      <empty/>
    </element>
  </optional>
</element>
</correct>
<valid><foo><bar/></foo></valid>
<valid><foo/></valid>
<invalid><foo>x<bar/></foo></invalid>
<invalid><foo><bar/><bar/></foo></invalid>
</testCase>
</testSuite>
<testSuite>
<section>4.15</section>
<testCase>
<section>4.15</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <zeroOrMore>
    <element name="bar">
      <empty/>
    </element>
  </zeroOrMore>
</element>
</correct>
<valid><foo><bar/></foo></valid>
<valid><foo/></valid>
<invalid><foo>x<bar/></foo></invalid>
<invalid><foo><baz/></foo></invalid>
<valid><foo><bar/><bar/></foo></valid>
</testCase>
</testSuite>
<testSuite>
<section>4.16</section>
<testCase>
<section>4.16</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element>
    <anyName>
      <except>
        <anyName/>
      </except>
    </anyName>
    <empty/>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element>
    <anyName>
      <except>
        <choice>
          <anyName/>
          <name>foo</name>
        </choice>
      </except>
    </anyName>
    <empty/>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element>
    <nsName ns="">
      <except>
        <nsName ns=""/>
      </except>
    </nsName>
    <empty/>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element>
    <nsName ns="">
      <except>
        <choice>
          <nsName ns=""/>
          <name>foo</name>
        </choice>
      </except>
    </nsName>
    <empty/>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element>
    <nsName ns="">
      <except>
        <anyName/>
      </except>
    </nsName>
    <empty/>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element>
    <nsName ns="">
      <except>
        <choice>
          <anyName/>
          <name>foo</name>
        </choice>
      </except>
    </nsName>
    <empty/>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<documentation>Tests that 4.16 is before 4.20.</documentation>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <zeroOrMore>
      <attribute>
	<anyName>
	  <except>
	    <anyName/>
	  </except>
	</anyName>
	<text/>
      </attribute>
      <notAllowed/>
    </zeroOrMore>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<documentation>Tests that 4.16 is before removal of unreachable definitions.</documentation>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <empty/>
  </element>
</start>
<define name="bar">
  <element>
    <anyName>
      <except>
	<anyName/>
      </except>
    </anyName>
    <empty/>
  </element>
</define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="xmlns">
    <text/>
  </attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<correct>
<element name="xmlns" xmlns="http://relaxng.org/ns/structure/1.0">
  <empty/>
</element>
</correct>
<valid><xmlns/></valid>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name=" xmlns">
    <text/>
  </attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <optional>
    <notAllowed/>
    <attribute name="xmlns">
      <text/>
    </attribute>
  </optional>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <empty/>
    </element>
  </start>
  <define name="foo">
    <attribute name="xmlns">
      <text/>
    </attribute>
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="xmlns" ns="">
    <text/>
  </attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute>
    <choice>
      <name ns="">xmlns</name>
      <name>foo</name>
    </choice>
    <text/>
  </attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute>
    <name ns="">xmlns</name>
    <text/>
  </attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute>
    <name>xmlns</name>
    <text/>
  </attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute>
    <name>
      xmlns
    </name>
    <text/>
  </attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute>
    <choice>
      <name>foo</name>
      <name ns="">xmlns</name>
    </choice>
    <text/>
  </attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <attribute>
      <anyName>
	<except>
	  <name>xmlns</name>
	</except>
      </anyName>
      <text/>
    </attribute>
  </oneOrMore>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <attribute>
      <nsName ns="">
	<except>
	  <name>xmlns</name>
	</except>
      </nsName>
      <text/>
    </attribute>
  </oneOrMore>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute ns="http://www.w3.org/2000/xmlns" name="bar">
    <text/>
  </attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://www.w3.org/2000/xmlns">
  <empty/>
</element>
</correct>
<valid><foo xmlns="http://www.w3.org/2000/xmlns"/></valid>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="token">
    <param name="minLength">2</param>
  </data>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="tok"/>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="tok"/>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <optional>
    <notAllowed/>
    <data type="token">
      <param name="minLength">2</param>
    </data>
  </optional>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <optional>
    <notAllowed/>
    <data type="tok"/>
  </optional>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <optional>
    <notAllowed/>
    <value type="tok"/>
  </optional>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <empty/>
  </element>
</start>
<define name="foo">
  <data type="token">
    <param name="minLength">2</param>
  </data>
</define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <empty/>
  </element>
</start>
<define name="foo">
  <data type="tok"/>
</define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.16</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <empty/>
  </element>
</start>
<define name="foo">
  <value type="tok"/>
</define>
</grammar>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<section>4.17</section>
<testCase>
<section>4.17</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <ref name="x"/>
</start>
<define name="x">
  <element name="foo1">
    <empty/>
  </element>
</define>
<define name="x" combine="choice">
  <element name="foo2">
    <empty/>
  </element>
</define>
<define name="x">
  <element name="foo3">
    <empty/>
  </element>
</define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.17</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start name="x">
  <element name="foo1">
    <empty/>
  </element>
</start>
<start name="x" combine="choice">
  <element name="foo2">
    <empty/>
  </element>
</start>
<start name="x">
  <element name="foo3">
    <empty/>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.17</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <ref name="x"/>
</start>
<define name="x">
  <element name="foo1">
    <empty/>
  </element>
</define>
<define name="x">
  <element name="foo2">
    <empty/>
  </element>
</define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.17</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start name="x">
  <element name="foo1">
    <empty/>
  </element>
</start>
<start name="x">
  <element name="foo2">
    <empty/>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.17</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <ref name="x"/>
</start>
<define name="x" combine="choice">
  <element name="foo1">
    <empty/>
  </element>
</define>
<define name="x" combine="choice">
  <element name="foo2">
    <empty/>
  </element>
</define>
<define name="x">
  <element name="foo3">
    <empty/>
  </element>
</define>
</grammar>
</correct>
<valid>
<foo1/>
</valid>
<valid>
<foo2/>
</valid>
<valid>
<foo3/>
</valid>
<invalid>
<foo4/>
</invalid>
</testCase>
<testCase>
<section>4.17</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start combine="choice">
  <element name="foo1">
    <empty/>
  </element>
</start>
<start combine="choice">
  <element name="foo2">
    <empty/>
  </element>
</start>
<start>
  <element name="foo3">
    <empty/>
  </element>
</start>
</grammar>
</correct>
<valid>
<foo1/>
</valid>
<valid>
<foo2/>
</valid>
<valid>
<foo3/>
</valid>
<invalid>
<foo4/>
</invalid>
</testCase>
<testCase>
<section>4.17</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <ref name="x"/>
  </element>
</start>
<define name="x" combine="choice">
  <element name="bar1">
    <empty/>
  </element>
</define>
<define name="x">
  <element name="bar2">
    <empty/>
  </element>
</define>
<define name="x" combine="interleave">
  <element name="bar3">
    <empty/>
  </element>
</define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.17</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
<grammar>
<start name="x" combine="choice">
  <element name="bar1">
    <empty/>
  </element>
</start>
<start name="x">
  <element name="bar2">
    <empty/>
  </element>
</start>
<start name="x" combine="interleave">
  <element name="bar3">
    <empty/>
  </element>
</start>
</grammar>
</element>
</incorrect>
</testCase>
<testCase>
<section>4.17</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <ref name="x"/>
  </element>
</start>
<define name="x" combine="interleave">
  <element name="bar1">
    <empty/>
  </element>
</define>
<define name="x" combine="interleave">
  <element name="bar2">
    <empty/>
  </element>
</define>
<define name="x">
  <element name="bar3">
    <empty/>
  </element>
</define>
</grammar>
</correct>
<valid>
<foo><bar1/><bar2/><bar3/></foo>
</valid>
<valid>
<foo><bar1/><bar3/><bar2/></foo>
</valid>
<valid>
<foo><bar2/><bar3/><bar1/></foo>
</valid>
<invalid>
<foo><bar2/><bar3/><bar1/><bar2/></foo>
</invalid>
</testCase>
<testCase>
<section>4.17</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
<grammar>
<start combine="interleave">
  <element name="bar1">
    <empty/>
  </element>
</start>
<start>
  <element name="bar2">
    <empty/>
  </element>
</start>
<start combine="interleave">
  <element name="bar3">
    <empty/>
  </element>
</start>
</grammar>
</element>
</correct>
<valid>
<foo><bar1/><bar2/><bar3/></foo>
</valid>
<valid>
<foo><bar1/><bar3/><bar2/></foo>
</valid>
<valid>
<foo><bar2/><bar3/><bar1/></foo>
</valid>
<invalid>
<foo><bar2/><bar3/><bar1/><bar2/></foo>
</invalid>
</testCase>
<testCase>
<section>4.17</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <ref name="x"/>
  </element>
</start>
<define name="x">
  <element name="bar1">
    <empty/>
  </element>
</define>
<define name="x" combine="interleave">
  <element name="bar2">
    <empty/>
  </element>
</define>
<define name="x">
  <element name="bar3">
    <empty/>
  </element>
</define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.17</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0"> 
<grammar>
<start name="x">
  <element name="bar1">
    <empty/>
  </element>
</start>
<start name="x" combine="interleave">
  <element name="bar2">
    <empty/>
  </element>
</start>
<start name="x">
  <element name="bar3">
    <empty/>
  </element>
</start>
</grammar>
</element>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<section>4.18</section>
<testCase>
<section>4.18</section>
<documentation>grammar must have a start</documentation>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <define name="foo">
    <element name="foo">
      <empty/>
    </element>
  </define>
</grammar>   
</incorrect>
</testCase>
<testCase>
<section>4.18</section>
<documentation>4.17 is before 4.18</documentation>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <empty/>
    </element>
  </start>
  <define name="bar">
    <grammar xmlns="http://relaxng.org/ns/structure/1.0">
      <define name="foo">
	<element name="foo">
	  <empty/>
	</element>
      </define>
    </grammar>   
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.18</section>
<documentation>4.17 is before 4.19</documentation>
<incorrect>
<choice xmlns="http://relaxng.org/ns/structure/1.0">
  <element name="foo">
    <empty/>
  </element>
  <group>
    <notAllowed/>
    <grammar xmlns="http://relaxng.org/ns/structure/1.0">
      <define name="foo">
	<element name="foo">
	  <empty/>
	</element>
      </define>
    </grammar>   
  </group>
</choice>
</incorrect>
</testCase>
<testCase>
<section>4.18</section>
<documentation>every ref must have a def</documentation>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="foo"/>
  </start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.18</section>
<documentation>4.17 is before 4.18</documentation>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <empty/>
    </element>
  </start>
  <define name="foo">
    <ref name="bar"/>
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.18</section>
<documentation>4.17 is before 4.19</documentation>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <choice>
      <element name="foo">
	<empty/>
      </element>
      <group>
        <notAllowed/>
        <ref name="foo"/>
      </group>
    </choice>
  </start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.18</section>
<documentation>every parentRef must have a def</documentation>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <grammar xmlns="http://relaxng.org/ns/structure/1.0">
      <start>
	<parentRef name="foo"/>
      </start>
      <define name="foo">
        <element name="foo">
          <empty/>
        </element>
      </define>
    </grammar>
  </start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.18</section>
<documentation>4.17 is before 4.18</documentation>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <empty/>
    </element>
  </start>
  <define name="bar">
    <grammar xmlns="http://relaxng.org/ns/structure/1.0">
      <start>
	<parentRef name="foo"/>
      </start>
      <define name="foo">
        <element name="foo">
          <empty/>
        </element>
      </define>
    </grammar>
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.18</section>
<documentation>4.17 is before 4.19</documentation>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <choice>
      <element name="foo">
	<empty/>
      </element>
      <group>
	<notAllowed/>
	<grammar xmlns="http://relaxng.org/ns/structure/1.0">
	  <start>
	    <parentRef name="foo"/>
	  </start>
	  <define name="foo">
	    <element name="foo">
	      <empty/>
	    </element>
	  </define>
	</grammar>
      </group>
    </choice>
  </start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.18</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="foo"/>
  </start>
  <define name="foo">
    <choice>
      <element name="foo">
        <empty/>
      </element>
      <grammar xmlns="http://relaxng.org/ns/structure/1.0">
        <start>
	  <parentRef name="foo"/>
        </start>
      </grammar>
    </choice>
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.18</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="foo"/>
  </start>
  <define name="foo">
    <grammar xmlns="http://relaxng.org/ns/structure/1.0">
      <start>
	<ref name="foo"/>
      </start>
      <define name="foo">
	<element name="foo">
	  <empty/>
	</element>
      </define>
    </grammar>
  </define>
</grammar>
</correct>
<valid><foo/></valid>
</testCase>
<testCase>
<section>4.18</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <grammar>
      <start>
        <ref name="foo"/>
      </start>
      <define name="foo">
        <element name="innerFoo">
           <parentRef name="foo"/>
        </element>
      </define>
    </grammar>
  </start>
  <define name="foo">
    <element name="outerFoo">
      <empty/>
    </element>
  </define>
</grammar>
</correct>
<valid><innerFoo><outerFoo/></innerFoo></valid>
<invalid><outerFoo/></invalid>
</testCase>
<testCase>
<section>4.18</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="foo"/>
  </start>
  <define name="foo">
    <element name="outerFoo">
      <grammar>
	<start>
	  <ref name="foo"/>
	</start>
	<define name="foo">
	  <element name="innerFoo">
	     <empty/>
	  </element>
	</define>
      </grammar>
    </element>
  </define>
</grammar>
</correct>
<valid><outerFoo><innerFoo/></outerFoo></valid>
<invalid><innerFoo/></invalid>
</testCase>
</testSuite>
<testSuite>
<section>4.19</section>
<testCase>
<section>4.19</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <ref name="bar"/>
    </element>
  </start>
  <define name="bar">
    <optional>
      <element name="bar">
        <empty/>
      </element>
      <ref name="bar"/>
    </optional>
  </define>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>4.19</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <ref name="bar"/>
    </element>
  </start>
  <define name="bar">
    <element name="bar">
      <optional>
        <ref name="bar"/>
      </optional>
    </element>
  </define>
</grammar>
</correct>
<valid>
<foo><bar/></foo>
</valid>
<valid>
<foo><bar><bar/></bar></foo>
</valid>
<invalid>
<foo/>
</invalid>
</testCase>
<testCase>
<section>4.19</section>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <empty/>
    </element>
  </start>
  <define name="bar">
    <ref name="bar"/>
  </define>
</grammar>
</correct>
<valid><foo/></valid>
</testCase>
<testCase>
<section>4.19</section>
<section>4.20</section>
<documentation>Tests that recursion detection happens before
normalization of notAllowed.</documentation>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <choice>
      <element name="foo">
        <empty/>
      </element>
      <group>
        <notAllowed/>
        <ref name="bar"/>
      </group>
    </choice>
  </start>
  <define name="bar">
    <element name="bar">
      <empty/>
    </element>
    <optional>
      <ref name="bar"/>
    </optional>
  </define>
</grammar>
</incorrect>
</testCase>
</testSuite>
</testSuite>
<testSuite>
<section>6</section>
<testSuite>
<section>6.1</section>
<testCase>
<section>6.1</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <anyName/>
  <empty/>
</element>
</correct>
<valid>
<foo/>
</valid>
<valid>
<foo xmlns="http://www.example.com"/>
</valid>
</testCase>
<testCase>
<section>6.1</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <anyName>
    <except>
      <name ns="">foo</name>
    </except>
  </anyName>
  <empty/>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo xmlns="http://www.example.com"/>
</valid>
<valid>
<bar/>
</valid>
</testCase>
<testCase>
<section>6.1</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <anyName>
    <except>
      <nsName ns=""/>
    </except>
  </anyName>
  <empty/>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo xmlns="http://www.example.com"/>
</valid>
</testCase>
<testCase>
<section>6.1</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <nsName ns=""/>
  <empty/>
</element>
</correct>
<valid>
<foo/>
</valid>
<invalid>
<foo xmlns="http://www.example.com"/>
</invalid>
</testCase>
<testCase>
<section>6.1</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <nsName ns="http://www.example.com"/>
  <empty/>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<invalid>
<foo xmlns="HTTP://www.example.com"/>
</invalid>
<invalid>
<foo xmlns="http://www.example.com/"/>
</invalid>
<valid>
<foo xmlns="http://www.example.com"/>
</valid>
</testCase>
<testCase>
<section>6.1</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <nsName ns="http://www.example.com">
    <except>
      <name ns="http://www.example.com">foo</name>
    </except>
  </nsName>
  <empty/>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<invalid>
<foo xmlns="http://www.example.com"/>
</invalid>
<valid>
<bar xmlns="http://www.example.com"/>
</valid>
</testCase>
<testCase>
<section>6.1</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <nsName ns="http://www.example.com">
    <except>
      <name ns="">foo</name>
    </except>
  </nsName>
  <empty/>
</element>
</correct>
<invalid>
<bar/>
</invalid>
<invalid>
<foo/>
</invalid>
<valid>
<foo xmlns="http://www.example.com"/>
</valid>
<valid>
<bar xmlns="http://www.example.com"/>
</valid>
</testCase>
<testCase>
<section>6.1</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <name ns="http://www.example.com">foo</name>
  <empty/>
</element>
</correct>
<valid>
<foo xmlns="http://www.example.com"/>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<bar xmlns="http://www.example.com"/>
</invalid>
<invalid>
<foo xmlns="http://www.example.org"/>
</invalid>
</testCase>
<testCase>
<section>6.1</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <name ns="">foo</name>
  <empty/>
</element>
</correct>
<invalid>
<foo xmlns="http://www.example.com"/>
</invalid>
<valid>
<foo/>
</valid>
<invalid>
<bar xmlns="http://www.example.com"/>
</invalid>
<invalid>
<bar/>
</invalid>
</testCase>
<testCase>
<section>6.1</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <name ns="">foo</name>
    <name ns="">bar</name>
  </choice>
  <empty/>
</element>
</correct>
<invalid>
<baz/>
</invalid>
<valid>
<foo/>
</valid>
<valid>
<bar/>
</valid>
</testCase>
</testSuite>
<testSuite>
<section>6.2</section>
<testSuite>
<section>6.2.1</section>
<testCase>
<section>6.2.1</section>
<correct>
<choice xmlns="http://relaxng.org/ns/structure/1.0">
  <element name="foo">
    <empty/>
  </element>
  <element name="bar">
    <empty/>
  </element>
</choice>
</correct>
<valid>
<foo/>
</valid>
<valid>
<bar/>
</valid>
<invalid>
<baz/>
</invalid>
</testCase>
<testCase>
<section>6.2.1</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <group>
      <element name="bar1">
        <empty/>
      </element>
      <element name="bar2">
        <empty/>
      </element>
    </group>
    <group>
      <element name="bar1">
        <empty/>
      </element>
      <element name="bar3">
        <empty/>
      </element>
    </group>
  </choice>
</element>
</correct>
<valid>
<foo><bar1/><bar2/></foo>
</valid>
<valid>
<foo><bar1/><bar3/></foo>
</valid>
<invalid>
<foo><bar1/></foo>
</invalid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo><bar2/></foo>
</invalid>
<invalid>
<foo><bar3/></foo>
</invalid>
<invalid>
<foo><bar1/><bar2/><bar3/></foo>
</invalid>
</testCase>
<testCase>
<section>6.2.1</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <group>
      <attribute name="bar1">
        <text/>
      </attribute>
      <attribute name="bar2">
        <text/>
      </attribute>
    </group>
    <group>
      <attribute name="bar1">
        <text/>
      </attribute>
      <attribute name="bar3">
        <text/>
      </attribute>
    </group>
  </choice>
</element>
</correct>
<valid>
<foo bar1="x" bar2="x"/>
</valid>
<valid>
<foo bar1="x" bar3="x"/>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo bar1="x"/>
</invalid>
<invalid>
<foo bar2="x"/>
</invalid>
<invalid>
<foo bar3="x"/>
</invalid>
<invalid>
<foo bar1="x" bar2="x" bar3="x"/>
</invalid>
</testCase>
<testCase>
<section>6.2.1</section>
<correct>
<choice xmlns="http://relaxng.org/ns/structure/1.0">
  <element name="foo">
    <element name="bar">
      <empty/>
    </element>
  </element>
  <element name="foo">
    <element name="baz">
      <empty/>
    </element>
  </element>
</choice>
</correct>
<valid>
<foo><bar/></foo>
</valid>
<valid>
<foo><baz/></foo>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo><bar/><bar/></foo>
</invalid>
<invalid>
<foo><foo/></foo>
</invalid>
<invalid>
<bar/>
</invalid>
<invalid>
<fobaz/>
</invalid>
</testCase>
</testSuite>
<testSuite>
<section>6.2.2</section>
<testCase>
<section>6.2.2</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <element name="bar">
      <empty/>
    </element>
    <element name="baz">
      <empty/>
    </element>
  </group>
</element>
</correct>
<valid>
<foo><bar/><baz/></foo>
</valid>
<invalid>
<foo><baz/><bar/></foo>
</invalid>
<invalid>
<foo><bar/><baz/><bar/><baz/></foo>
</invalid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo><bar/></foo>
</invalid>
<invalid>
<foo><baz/></foo>
</invalid>
</testCase>
<testCase>
<section>6.2.2</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <attribute name="bar">
      <text/>
    </attribute>
    <attribute name="baz">
      <text/>
    </attribute>
  </group>
</element>
</correct>
<valid>
<foo bar="x" baz="x"/>
</valid>
<invalid>
<foo/>
</invalid>
</testCase>
<testCase>
<section>6.2.2</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <attribute name="bar">
      <text/>
    </attribute>
    <attribute name="baz">
      <text/>
    </attribute>
  </group>
</element>
</correct>
<valid>
<foo bar="x" baz="x"/>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo bar="x"/>
</invalid>
<invalid>
<foo baz="x"/>
</invalid>
</testCase>
<testCase>
<section>6.2.2</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <attribute name="baz">
      <text/>
    </attribute>
    <attribute name="bar">
      <text/>
    </attribute>
  </group>
</element>
</correct>
<valid>
<foo bar="x" baz="x"/>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo bar="x"/>
</invalid>
<invalid>
<foo baz="x"/>
</invalid>
</testCase>
<testCase>
<section>6.2.2</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <attribute name="bar">
      <text/>
    </attribute>
    <element name="baz">
      <empty/>
    </element>
  </group>
</element>
</correct>
<valid>
<foo bar="x"><baz/></foo>
</valid>
<invalid>
<foo><baz/></foo>
</invalid>
<invalid>
<foo bar="x"/>
</invalid>
<invalid>
<foo baz="x"><bar/></foo>
</invalid>
</testCase>
<testCase>
<section>6.2.2</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <element name="baz">
      <empty/>
    </element>
    <attribute name="bar">
      <text/>
    </attribute>
  </group>
</element>
</correct>
<valid>
<foo bar="x"><baz/></foo>
</valid>
<invalid>
<foo><baz/></foo>
</invalid>
<invalid>
<foo bar="x"/>
</invalid>
<invalid>
<foo baz="x"><bar/></foo>
</invalid>
</testCase>
</testSuite>
<testSuite>
<section>6.2.3</section>
<testCase>
<section>6.2.3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <empty/>
</element>
</correct>
<valid>
<foo/>
</valid>
<valid>
<foo> </foo>
</valid>
<valid>
<foo>


</foo>
</valid>
<valid>
<foo>
<?target data?>
<?target data?>
<?target data?>
<?target data?>
</foo>
</valid>
<invalid>
<foo>x</foo>
</invalid>
<invalid>
<foo><bar/></foo>
</invalid>
<invalid>
<foo bar="x"/>
</invalid>
</testCase>
<testCase>
<section>6.2.3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="bar">
    <empty/>
  </attribute>
</element>
</correct>
<valid><foo bar=""/></valid>
<valid><foo bar=" "/></valid>
<invalid><foo bar="x"/></invalid>
</testCase>
<testCase>
<section>6.2.3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <list>
    <empty/>
  </list>
</element>
</correct>
<valid><foo/></valid>
<valid><foo> </foo></valid>
<invalid><foo>x</foo></invalid>
<invalid><foo><bar/></foo></invalid>
<invalid><foo bar=""/></invalid>
</testCase>
<testCase>
<section>6.2.3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="bar">
    <list>
      <empty/>
    </list>
  </attribute>
</element>
</correct>
<valid><foo bar=""/></valid>
<valid><foo bar=" "/></valid>
<invalid><foo bar="x"/></invalid>
</testCase>
<testCase>
<section>6.2.3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <element name="bar">
      <empty/>
    </element>
    <choice>
      <empty/>
      <element name="baz">
        <empty/>
      </element>
    </choice>
  </group>
</element>
</correct>
<valid>
<foo><bar/><baz/></foo>
</valid>
<valid>
<foo><bar/></foo>
</valid>
<invalid>
<foo></foo>
</invalid>
<invalid>
<foo><bar/><baz/><baz/></foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <empty/>
    <attribute name="bar">
      <text/>
    </attribute>
  </choice>
</element>
</correct>
<valid>
<foo bar="x"/>
</valid>
<valid>
<foo/>
</valid>
<invalid>
<foo baz="x"/>
</invalid>
<invalid>
<foo><bar/></foo>
</invalid>
</testCase>
</testSuite>
<testSuite>
<section>6.2.4</section>
<testCase>
<section>6.2.4</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <text/>
</element>
</correct>
<valid>
<foo/>
</valid>
<valid>
<foo> </foo>
</valid>
<valid>
<foo>x</foo>
</valid>
<valid>
<foo>
x
<?target data?>
y
</foo>
</valid>
<invalid>
<foo><bar/></foo>
</invalid>
</testCase>
<testCase>
<section>6.2.4</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <text/>
    <element name="bar">
      <empty/>
    </element>
  </group>
</element>
</correct>
<valid>
<foo><bar/></foo>
</valid>
<valid>
<foo>
<bar/>
</foo>
</valid>
<valid>
<foo>
x
<bar/>
</foo>
</valid>
<valid>
<foo>
x
<?target data?>
y
<bar/></foo>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo><bar/>x</foo>
</invalid>
</testCase>
<testCase>
<section>6.2.4</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <element name="bar">
      <empty/>
    </element>
    <text/>
  </group>
</element>
</correct>
<valid>
<foo><bar/></foo>
</valid>
<valid>
<foo>
<bar/>
</foo>
</valid>
<invalid>
<foo>
x
<bar/>
</foo>
</invalid>
<valid>
<foo>
<bar/>
x
<?target data?>
y
</foo>
</valid>
<invalid>
<foo/>
</invalid>
<valid>
<foo><bar/>x</foo>
</valid>
</testCase>
<testCase>
<section>6.2.4</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
    <text/>
  </interleave>
</element>
</correct>
<valid>
<foo><bar/></foo>
</valid>
<valid>
<foo>
<bar/>
</foo>
</valid>
<valid>
<foo>
x
<bar/>
</foo>
</valid>
<valid>
<foo>
<bar/>
x
<?target data?>
y
</foo>
</valid>
<invalid>
<foo/>
</invalid>
<valid>
<foo><bar/>x</foo>
</valid>
<valid>
<foo>x<bar/>x</foo>
</valid>
<invalid>
<foo>x<bar/>x<bar/></foo>
</invalid>
</testCase>
<testCase>
<section>6.2.4</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="bar">
    <text/>
  </attribute>
</element>
</correct>
<valid>
<foo bar=""/>
</valid>
<valid>
<foo bar="x"/>
</valid>
<valid>
<foo bar=" "/>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo><bar/>x<bar/></foo>
</invalid>
</testCase>
</testSuite>
<testSuite>
<section>6.2.5</section>
<testCase>
<section>6.2.5</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <element name="bar">
      <empty/>
    </element>
  </oneOrMore>
</element>
</correct>
<valid>
<foo><bar/></foo>
</valid>
<valid>
<foo><bar/><bar/></foo>
</valid>
<valid>
<foo><bar/><bar/><bar/></foo>
</valid>
<invalid>
<foo/>
</invalid>
</testCase>
<testCase>
<section>6.2.5</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <group>
      <element name="bar">
	<empty/>
      </element>
      <element name="bar">
	<empty/>
      </element>
    </group>
  </oneOrMore>
</element>
</correct>
<valid>
<foo><bar/><bar/></foo>
</valid>
<valid>
<foo><bar/><bar/><bar/><bar/></foo>
</valid>
<valid>
<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
</valid>
<invalid>
<foo><bar/></foo>
</invalid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo><bar/><bar/><bar/></foo>
</invalid>
</testCase>
<testCase>
<section>6.2.5</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <attribute>
      <nsName ns=""/>
      <text/>
    </attribute>
  </oneOrMore>
</element>
</correct>
<valid>
<foo x=""/>
</valid>
<valid>
<foo x="" y=""/>
</valid>
<valid>
<foo x="" y="" z=""/>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo xmlns:ns="http://www.example.com" ns:x=""/>
</invalid>
<invalid>
<foo x="" xmlns:ns="http://www.example.com" ns:x=""/>
</invalid>
</testCase>
<testCase>
<section>6.2.5</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <choice>
      <attribute name="bar">
        <text/>
      </attribute>
      <element name="bar">
        <text/>
      </element>
    </choice>
  </oneOrMore>
</element>
</correct>
<valid>
<foo bar=""><bar/><bar/></foo>
</valid>
<valid>
<foo><bar/></foo>
</valid>
<valid>
<foo bar=""/>
</valid>
<invalid>
<foo/>
</invalid>
</testCase>
</testSuite>
<testSuite>
<section>6.2.6</section>
<testCase>
<section>6.2.6</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
    <element name="baz">
      <empty/>
    </element>
  </interleave>
</element>
</correct>
<valid>
<foo><bar/><baz/></foo>
</valid>
<valid>
<foo><baz/><bar/></foo>
</valid>
<invalid>
<foo><bar/></foo>
</invalid>
<invalid>
<foo><baz/></foo>
</invalid>
<invalid>
<foo><bar/><bar/></foo>
</invalid>
<invalid>
<foo/>
</invalid>
</testCase>
<testCase>
<section>6.2.6</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <group>
      <element name="bar1">
        <empty/>
      </element>
      <element name="bar2">
        <empty/>
      </element>
    </group>
    <element name="baz">
      <empty/>
    </element>
  </interleave>
</element>
</correct>
<valid>
<foo><baz/><bar1/><bar2/></foo>
</valid>
<valid>
<foo><bar1/><baz/><bar2/></foo>
</valid>
<valid>
<foo><bar1/><bar2/><baz/></foo>
</valid>
<invalid>
<foo><baz/><bar2/><bar1/></foo>
</invalid>
<invalid>
<foo><bar2/><bar1/></foo>
</invalid>
<invalid>
<foo><baz/><bar2/><bar1/></foo>
</invalid>
<invalid>
<foo><baz/><bar1/></foo>
</invalid>
<invalid>
<foo><baz/><bar2/></foo>
</invalid>
</testCase>
<testCase>
<section>6.2.6</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <attribute name="bar">
      <text/>
    </attribute>
    <attribute name="baz">
      <text/>
    </attribute>
  </interleave>
</element>
</correct>
<valid>
<foo bar="" baz=""/>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo bar=""/>
</invalid>
<invalid>
<foo baz=""/>
</invalid>
</testCase>
<testCase>
<section>6.2.6</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
    <attribute name="baz">
      <text/>
    </attribute>
  </interleave>
</element>
</correct>
<valid>
<foo baz=""><bar/></foo>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo bar=""/>
</invalid>
<invalid>
<foo bar=""><baz/><baz/></foo>
</invalid>
<invalid>
<foo><baz/><baz/></foo>
</invalid>
</testCase>
</testSuite>
<testSuite>
<section>6.2.7</section>
<testCase>
<section>6.2.7</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute>
    <name ns="">bar</name>
    <value type="string" datatypeLibrary="">baz</value>
  </attribute>
</element>
</correct>
<valid>
<foo bar="baz"/>
</valid>
<invalid>
<foo bar=" baz"/>
</invalid>
<invalid>
<foo bar="b"/>
</invalid>
<invalid>
<foo bar=""/>
</invalid>
<invalid>
<foo bar=" "/>
</invalid>
<invalid>
<foo><bar>baz</bar></foo>
</invalid>
</testCase>
<testCase>
<section>6.2.7</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute>
    <name ns="">bar</name>
    <choice>
      <value type="string" datatypeLibrary="">baz</value>
      <empty/>
    </choice>
  </attribute>
</element>
</correct>
<valid>
<foo bar="baz"/>
</valid>
<valid>
<foo bar=""/>
</valid>
<invalid>
<foo bar=" baz"/>
</invalid>
<invalid>
<foo bar="b"/>
</invalid>
<invalid>
<foo><bar>baz</bar></foo>
</invalid>
<invalid>
<foo><bar/></foo>
</invalid>
<invalid>
<foo/>
</invalid>
</testCase>
<testCase>
<section>6.2.7</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute>
    <name ns="">bar</name>
    <value type="string"/>
  </attribute>
</element>
</correct>
<valid>
<foo bar=""/>
</valid>
<invalid>
<foo bar=" "/>
</invalid>
<invalid>
<foo bar="x"/>
</invalid>
</testCase>
<testCase>
<section>6.2.7</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <name ns="">foo</name>
  <group>
    <element>
      <name ns="">bar</name>
      <empty/>
    </element>
    <element>
      <name ns="">baz</name>
      <empty/>
    </element>
  </group>
</element>
</correct>
<valid>
<foo><bar/><baz/></foo>
</valid>
<valid>
<foo>
<bar/>
<baz/>
</foo>
</valid>
<valid>
<foo>
<bar/>
&#xD;
<baz/>
</foo>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<bar><bar/><baz/></bar>
</invalid>
</testCase>
<testCase>
<section>6.2.7</section>
<section>6.2.8</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="string"/>
</element>
</correct>
<valid><foo/></valid>
<invalid><foo> </foo></invalid>
<invalid><foo>x</foo></invalid>
</testCase>
<testCase>
<section>6.2.7</section>
<section>6.2.8</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <value type="string"/>
    <empty/>
  </choice>
</element>
</correct>
<valid><foo/></valid>
<valid><foo> </foo></valid>
<invalid><foo>x</foo></invalid>
</testCase>
<testCase>
<section>6.2.7</section>
<section>6.2.8</section>
<section>6.2.10</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <list>
    <data type="token"/>
  </list>
</element>
</correct>
<invalid><foo/></invalid>
<invalid><foo> </foo></invalid>
<valid><foo>x</foo></valid>
<valid><foo> x </foo></valid>
<invalid><foo>x y</foo></invalid>
</testCase>
<testCase>
<section>6.2.7</section>
<section>6.2.8</section>
<requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
 <data type="string"
       datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
   <param name="minLength">2</param>
 </data>
</element>
</correct>
<valid><foo>xx</foo></valid>
<valid><foo>xxx</foo></valid>
<valid><foo>  </foo></valid>
<valid><foo>   </foo></valid>
<invalid><foo>x</foo></invalid>
<invalid><foo> </foo></invalid>
<invalid><foo/></invalid>
</testCase>
<testCase>
<section>6.2.7</section>
<section>6.2.8</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <value>x</value>
    <element name="bar">
      <empty/>
    </element>
  </choice>
</element>
</correct>
<valid><foo> x </foo></valid>
<valid><foo>x</foo></valid>
<invalid><foo>y</foo></invalid>
<valid><foo><bar/></foo></valid>
<valid>
<foo>
<bar/>
</foo>
</valid>
<invalid><foo>x<bar/></foo></invalid>
<invalid><foo/></invalid>
<invalid><foo><bar/>x</foo></invalid>
</testCase>
<testCase>
<section>6.2.7</section>
<section>6.2.8</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <value>x</value>
    <mixed>
      <element name="bar">
        <empty/>
      </element>
    </mixed>
  </choice>
</element>
</correct>
<valid><foo> x </foo></valid>
<valid><foo>x</foo></valid>
<invalid><foo>y</foo></invalid>
<valid><foo><bar/></foo></valid>
<valid>
<foo>
<bar/>
</foo>
</valid>
<valid><foo>x<bar/></foo></valid>
<invalid><foo/></invalid>
<valid><foo><bar/>x</foo></valid>
</testCase>
</testSuite>
<testSuite>
<section>6.2.8</section>
<testCase>
<section>6.2.8</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="string">
    <except>
      <choice>
        <value>x</value>
        <value>y</value>
      </choice>
    </except>
  </data>
</element>
</correct>
<valid>
<foo>xyzzy</foo>
</valid>
<invalid>
<foo>x</foo>
</invalid>
<invalid>
<foo>y</foo>
</invalid>
<invalid>
<foo> x</foo>
</invalid>
</testCase>
<testCase>
<section>6.2.8</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="string"/>
</element>
</correct>
<valid>
<foo/>
</valid>
</testCase>
<testCase>
<section>6.2.8</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <value/>
</element>
</correct>
<valid>
<foo/>
</valid>
</testCase>
<testCase>
<section>6.2.8</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="string">
    <except>
      <value/>
    </except>
  </data>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo>x</foo>
</valid>
</testCase>
</testSuite>
<testSuite>
<section>6.2.9</section>
<testCase>
<section>6.2.9</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="string" datatypeLibrary=""/>
</element>
</correct>
<valid>
<foo>xyzzy</foo>
</valid>
<valid>
<foo>
x
<?target data?>
y
<?target data?>
z
</foo>
</valid>
<valid>
<foo></foo>
</valid>
<valid>
<foo>
</foo>
</valid>
<invalid>
<foo><bar/></foo>
</invalid>
<invalid>
<foo bar=""/>
</invalid>
</testCase>
<testCase>
<section>6.2.9</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="token" datatypeLibrary=""/>
</element>
</correct>
<valid>
<foo>xyzzy</foo>
</valid>
<valid>
<foo>
x
<?target data?>
y
<?target data?>
z
</foo>
</valid>
<valid>
<foo></foo>
</valid>
<valid>
<foo>
</foo>
</valid>
<invalid>
<foo><bar/></foo>
</invalid>
<invalid>
<foo bar=""/>
</invalid>
</testCase>
<testCase>
<section>6.2.9</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="string" datatypeLibrary="">x</value>
</element>
</correct>
<valid><foo>x</foo></valid>
<invalid><foo>xy</foo></invalid>
<invalid><foo> x</foo></invalid>
<invalid><foo/></invalid>
</testCase>
<testCase>
<section>6.2.9</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="string" datatypeLibrary=""> x</value>
</element>
</correct>
<valid><foo> x</foo></valid>
<invalid><foo> xy</foo></invalid>
<invalid><foo>x</foo></invalid>
<invalid><foo/></invalid>
</testCase>
<testCase>
<section>6.2.9</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="token" datatypeLibrary="">x</value>
</element>
</correct>
<valid><foo>x</foo></valid>
<valid><foo> x</foo></valid>
<valid><foo>x </foo></valid>
<valid><foo>&#xA;&#xD;&#x9;&#x20;x&#xA;&#xD;&#x9;&#x20;</foo></valid>
<invalid><foo/></invalid>
<invalid><foo>xy</foo></invalid>
</testCase>
<testCase>
<section>6.2.9</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="token" datatypeLibrary="">x y</value>
</element>
</correct>
<valid><foo>x y</foo></valid>
<valid><foo> x   y </foo></valid>
<valid><foo>x&#xA;&#xD;&#x9;&#x20;y</foo></valid>
<invalid><foo>xy</foo></invalid>
</testCase>
<testCase>
<section>6.2.9</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="token" datatypeLibrary="">&#xA;&#xD;&#x9;&#x20;x&#xA;&#xD;&#x9;&#x20;</value>
</element>
</correct>
<valid><foo>x</foo></valid>
<valid><foo> x</foo></valid>
<valid><foo>x </foo></valid>
<valid><foo>&#xD;&#x9;x&#x20;&#xA;</foo></valid>
<invalid><foo/></invalid>
<invalid><foo>xy</foo></invalid>
</testCase>
<testCase>
<section>6.2.9</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="token" datatypeLibrary="">x&#xA;&#xD;&#x9;&#x20;y</value>
</element>
</correct>
<valid><foo>x y</foo></valid>
<valid><foo>x  y</foo></valid>
<valid><foo> x y </foo></valid>
<valid><foo>x&#xD;&#x9;y</foo></valid>
<valid><foo>x&#x20;&#xA;y</foo></valid>
<invalid><foo/></invalid>
<invalid><foo>xy</foo></invalid>
</testCase>
<testCase>
<section>6.2.9</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="decimal" datatypeLibrary=""/>
</element>
</incorrect>
</testCase>
<testCase>
<section>6.2.9</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="decimal" datatypeLibrary=""/>
</element>
</incorrect>
</testCase>
<testCase>
<section>6.2.9</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="string" datatypeLibrary="">
    <param name="length">2</param>
  </data>
</element>
</incorrect>
</testCase>
<testCase>
<section>6.2.9</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <data type="token" datatypeLibrary="">
    <param name="length">2</param>
  </data>
</element>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<section>6.2.10</section>
<testCase>
<section>6.2.10</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <list>
    <value type="string">x</value>
  </list>
</element>
</correct>
<valid>
<foo>x</foo>
</valid>
<valid>
<foo> x </foo>
</valid>
<invalid>
<foo>x x</foo>
</invalid>
</testCase>
<testCase>
<section>6.2.10</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <list>
    <oneOrMore>
      <value type="string">x</value>
    </oneOrMore>
  </list>
</element>
</correct>
<valid>
<foo>x</foo>
</valid>
<valid>
<foo> x x x x </foo>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo>x y</foo>
</invalid>
</testCase>
<testCase>
<section>6.2.10</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <list>
    <group>
      <value type="string">x</value>
      <value type="string">y</value>
    </group>
  </list>
</element>
</correct>
<valid>
<foo>x y</foo>
</valid>
<valid>
<foo>x  y</foo>
</valid>
<valid>
<foo>&#xD;x&#xA;y&#x9;</foo>
</valid>
<invalid>
<foo>x</foo>
</invalid>
</testCase>
<testCase>
<section>6.2.10</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <list>
    <group>
      <data type="token"/>
      <data type="token"/>
    </group>
  </list>
</element>
</correct>
<valid>
<foo>x y</foo>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo>x y z</foo>
</invalid>
</testCase>
<testCase>
<section>6.2.10</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <list>
    <value>x y</value>
  </list>
</element>
</correct>
<invalid>
<foo>x y</foo>
</invalid>
</testCase>
</testSuite>
</testSuite>
</testSuite>
<testSuite>
<section>7</section>
<testSuite>
<section>7.1</section>
<testCase>
<section>7.1.1</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <attribute name="bar">
      <element name="baz">
        <empty/>
      </element>
    </attribute>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.1</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <attribute name="bar">
      <choice>
        <element name="baz">
          <empty/>
        </element>
        <text/>
      </choice>
    </attribute>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.1</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <attribute name="bar">
      <attribute name="baz"/>
    </attribute>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.1</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <attribute name="bar">
      <choice>
        <attribute name="baz"/>
        <text/>
      </choice>
    </attribute>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.2</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <oneOrMore>
      <group>
        <attribute name="bar"/>
        <attribute name="baz"/>
      </group>
    </oneOrMore>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.2</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <oneOrMore>
      <group>
        <attribute>
          <anyName/>
        </attribute>
        <attribute>
          <anyName/>
        </attribute>
      </group>
    </oneOrMore>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.2</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <oneOrMore>
      <choice>
        <group>
          <choice>
            <attribute name="bar"/>
            <attribute name="baz"/>
          </choice>
          <choice>
            <attribute name="bar"/>
            <attribute name="baz"/>
          </choice>
        </group>
        <attribute name="bar"/>
      </choice>
    </oneOrMore>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.2</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <oneOrMore>
      <interleave>
        <attribute name="bar"/>
        <attribute name="baz"/>
      </interleave>
    </oneOrMore>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.2</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <oneOrMore>
      <interleave>
        <attribute>
          <anyName/>
        </attribute>
        <attribute>
          <anyName/>
        </attribute>
      </interleave>
    </oneOrMore>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.2</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <oneOrMore>
      <choice>
        <interleave>
          <choice>
            <attribute name="bar"/>
            <attribute name="baz"/>
          </choice>
          <choice>
            <attribute name="bar"/>
            <attribute name="baz"/>
          </choice>
        </interleave>
        <attribute name="bar"/>
      </choice>
    </oneOrMore>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <list>
      <list>
        <data type="token"/>
      </list>
    </list>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <list>
      <choice>
        <list>
          <data type="token"/>
        </list>
        <data type="token"/>
      </choice>
    </list>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <list>
      <element name="bar">
        <empty/>
      </element>
    </list>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <list>
      <choice>
        <data type="token"/>
        <element name="bar">
          <empty/>
        </element>
      </choice>
    </list>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <list>
      <attribute name="bar">
        <empty/>
      </attribute>
    </list>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <list>
      <choice>
        <attribute name="bar">
          <empty/>
        </attribute>
        <data type="token"/>
      </choice>
    </list>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <list>
      <choice>
        <text/>
        <data type="token"/>
      </choice>
    </list>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <list>
      <interleave>
        <value>x</value>
        <value>y</value>
      </interleave>
    </list>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.3</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <list>
      <choice>
	<interleave>
	  <value>x</value>
	  <value>y</value>
	</interleave>
        <value>z</value>
      </choice>
    </list>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.4</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <data type="string">
      <except>
        <attribute name="bar"/>
      </except>
    </data>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.4</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <data type="string">
      <except>
        <element name="bar">
          <empty/>
        </element>
      </except>
    </data>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.4</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <data type="string">
      <except>
        <text/>
      </except>
    </data>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.4</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <data type="string">
      <except>
        <list>
          <data type="token"/>
        </list>
      </except>
    </data>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.4</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <data type="string">
      <except>
        <group>
          <data type="token"/>
          <data type="token"/>
        </group>
      </except>
    </data>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.4</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <data type="string">
      <except>
        <interleave>
          <data type="token"/>
          <data type="token"/>
        </interleave>
      </except>
    </data>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.4</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <data type="string">
      <except>
        <oneOrMore>
          <data type="token"/>
        </oneOrMore>
      </except>
    </data>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.4</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <data type="string">
      <except>
        <empty/>
      </except>
    </data>
  </element>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <attribute name="foo"/>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <data type="string"/>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <choice>
    <data type="string"/>
    <element name="foo">
      <empty/>
    </element>
  </choice>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <choice>
    <value>foo</value>
    <element name="foo">
      <empty/>
    </element>
  </choice>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <text/>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <choice>
    <text/>
    <element name="foo">
      <empty/>
    </element>
  </choice>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <list>
    <data type="token"/>
  </list>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <choice>
    <element name="foo">
      <empty/>
    </element>
    <list>
      <data type="token"/>
    </list>
  </choice>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <group>
    <element name="foo">
      <empty/>
    </element>
    <element name="foo">
      <empty/>
    </element>
  </group>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <choice>
    <element name="foo">
      <empty/>
    </element>
    <group>
      <element name="foo">
	<empty/>
      </element>
      <element name="foo">
	<empty/>
      </element>
    </group>
  </choice>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <interleave>
    <element name="foo">
      <empty/>
    </element>
    <element name="foo">
      <empty/>
    </element>
  </interleave>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <choice>
    <element name="foo">
      <empty/>
    </element>
    <interleave>
      <element name="foo">
	<empty/>
      </element>
      <element name="foo">
	<empty/>
      </element>
    </interleave>
  </choice>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <oneOrMore>
    <element name="foo">
      <empty/>
    </element>
  </oneOrMore>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <choice>
    <oneOrMore>
      <element name="foo">
	<empty/>
      </element>
    </oneOrMore>
    <element name="foo">
      <empty/>
    </element>
  </choice>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <empty/>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <choice>
    <element name="foo">
      <empty/>
    </element>
    <empty/>
  </choice>
</start>
</grammar>
</incorrect>
</testCase>
<testCase>
<section>7.1.5</section>
<section>7</section>
<section>4.18</section>
<documentation>Tests that constraints are post-normalization</documentation>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <grammar>
    <start>
      <text/>
    </start>
  </grammar>
</element>
</correct>
<valid>
<foo>text</foo>
</valid>
</testCase>
<testCase>
<section>7.1.5</section>
<section>7</section>
<section>4.18</section>
<incorrect>
<text xmlns="http://relaxng.org/ns/structure/1.0"/>
</incorrect>
</testCase>
<testCase>
<section>7.1.1</section>
<section>7</section>
<section>4.20</section>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <optional>
    <attribute name="bar">
      <group>
        <notAllowed/>
        <attribute name="baz"/>
      </group>
    </attribute>
  </optional>
</element>
</correct>
<valid>
<foo/>
</valid>
</testCase>
<testCase>
<section>7.1.1</section>
<section>7</section>
<section>4.20</section>
<documentation>The nested attribute element is normalized out because
of the not allowed.</documentation>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <attribute name="bar">
    <choice>
      <text/>
      <group>
        <notAllowed/>
        <attribute name="baz"/>
      </group>
    </choice>
  </attribute>
</element>
</correct>
<valid>
<foo bar="baz"/>
</valid>
</testCase>
<testCase>
<section>7.1.2</section>
<section>7</section>
<section>4.12</section>
<documentation>The group element is normalized out.</documentation>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <oneOrMore>
      <group>
        <attribute>
          <anyName/>
        </attribute>
      </group>
    </oneOrMore>
  </element>
</start>
</grammar>
</correct>
<valid>
<foo xyzzy1="val1" xyzzy2="val2"/>
</valid>
</testCase>
<testCase>
<section>7.1.2</section>
<section>7</section>
<section>4.21</section>
<documentation>The group element is normalized out.</documentation>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <oneOrMore>
      <group>
        <attribute>
          <anyName/>
        </attribute>
        <empty/>
      </group>
    </oneOrMore>
  </element>
</start>
</grammar>
</correct>
<valid>
<foo xyzzy1="val1" xyzzy2="val2"/>
</valid>
</testCase>
<testCase>
<section>7.1.2</section>
<section>7</section>
<section>4.20</section>
<documentation>The attribute elements are all normalized out.</documentation>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
  <optional>
    <attribute name="a1">
      <attribute name="a2">
        <attribute name="a3">
          <notAllowed/>
        </attribute>
      </attribute>
    </attribute>
  </optional>
</element>
</correct>
<valid>
<foo/>
</valid>
</testCase>
</testSuite>
<testSuite>
<section>7.2</section>
<testCase>
<section>7.2</section>
<incorrect>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="foo">
      <group>
        <data type="token"/>
        <data type="token"/>
      </group>
    </element>
  </start>
</grammar>
</incorrect>
</testCase>
<testCase>
<documentation>Checks that normalization of notAllowed happens
before string sequence checking.</documentation>
<section>7.2</section>
<section>4.20</section>
<correct>
<choice xmlns="http://relaxng.org/ns/structure/1.0">
  <element name="foo">
    <empty/>
  </element>
  <group>
    <notAllowed/>
    <element name="bar">
      <group>
	<data type="token"/>
	<data type="token"/>
      </group>
    </element>
  </group>
</choice>
</correct>
<valid>
<foo/>
</valid>
</testCase>
<testCase>
<section>4.20</section>
<section>7.2</section>
<documentation>notAllowed in an element is not normalized</documentation>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <group>
      <element name="bar">
        <notAllowed/>
      </element>
      <data type="token"/>
      <data type="token"/>
    </group>
    <element name="baz">
      <empty/>
    </element>
  </choice>
</element>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<section>7.3</section>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="bar"/>
  <attribute name="bar"/>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="bar"/>
  <zeroOrMore>
    <attribute name="bar"/>
  </zeroOrMore>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <attribute name="bar"/>
  </oneOrMore>
</element>
</correct>
<valid>
<foo bar="xx"/>
</valid>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <attribute name="bar"/>
    <attribute name="bar"/>
  </interleave>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <optional>
    <attribute name="bar"/>
  </optional>
  <optional>
    <attribute name="bar"/>
  </optional>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="bar"/>
  <oneOrMore>
    <attribute>
      <anyName/>
    </attribute>
  </oneOrMore>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="bar"/>
  <oneOrMore>
    <attribute>
      <anyName>
	<except>
	  <name>baz</name>
	</except>
      </anyName>
    </attribute>
  </oneOrMore>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="bar"/>
  <oneOrMore>
    <attribute>
      <anyName>
	<except>
	  <name>bar</name>
	</except>
      </anyName>
    </attribute>
  </oneOrMore>
</element>
</correct>
<valid>
<foo bar="val" xyzzy="anotherval"/>
</valid>
<valid>
<foo bar="val" baz=""/>
</valid>
<invalid>
<foo bar="val"/>
</invalid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo xyzzy="val"/>
</invalid>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="bar"/>
  <oneOrMore>
    <attribute>
      <nsName ns=""/>
    </attribute>
  </oneOrMore>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="bar"/>
  <oneOrMore>
    <attribute>
      <nsName ns="">
	<except>
	  <name>baz</name>
	</except>
       </nsName>
    </attribute>
  </oneOrMore>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <attribute>
      <anyName/>
    </attribute>
  </oneOrMore>
  <oneOrMore>
    <attribute>
      <nsName ns=""/>
    </attribute>
  </oneOrMore>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <attribute>
      <anyName/>
    </attribute>
  </oneOrMore>
  <oneOrMore>
    <attribute>
      <anyName/>
    </attribute>
  </oneOrMore>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <attribute>
      <nsName ns=""/>
    </attribute>
  </oneOrMore>
  <oneOrMore>
    <attribute>
      <nsName ns="">
	<except>
	  <name>bar</name>
	</except>
      </nsName>
    </attribute>
  </oneOrMore>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <attribute>
      <anyName>
	<except>
	  <nsName>
	    <except>
	      <name>foo</name>
	    </except>
	  </nsName>
	</except>
      </anyName>
    </attribute>
  </oneOrMore>
  <attribute name="foo"/>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <attribute>
      <anyName>
	<except>
	  <nsName>
	    <except>
	      <name>foo</name>
	    </except>
	  </nsName>
	</except>
      </anyName>
    </attribute>
  </oneOrMore>
  <oneOrMore>
    <attribute>
      <nsName/>
    </attribute>
  </oneOrMore>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <attribute>
      <anyName>
	<except>
	  <nsName>
	    <except>
	      <name>bar</name>
	    </except>
	  </nsName>
	</except>
      </anyName>
    </attribute>
  </oneOrMore>
  <attribute name="baz"/>
</element>
</correct>
<valid>
<foo bar="xx" baz="yy"/>
</valid>
<invalid>
<foo x="xx" baz="yy"/>
</invalid>
<valid>
<foo xmlns:eg="http://www.example.com/" eg:x="xx" baz="yy"/>
</valid>
</testCase>
<testCase>
<section>7.3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <attribute>
      <nsName ns="http://www.example.com/1"/>
    </attribute>
  </oneOrMore>
  <oneOrMore>
    <attribute>
      <nsName ns="http://www.example.com/2"/>
    </attribute>
  </oneOrMore>
</element>
</correct>
<valid>
<foo xmlns:eg1="http://www.example.com/1"
     xmlns:eg2="http://www.example.com/2"
     eg1:x="xx" eg2:y="yy"/>
</valid>
</testCase>
<testCase>
<section>7.3</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <attribute name="bar"/>
    <attribute name="bar"/>
  </choice>
</element>
</correct>
<valid>
<foo bar="xx"/>
</valid>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="bar"/>
  <choice>
    <attribute name="baz"/>
    <attribute name="bar"/>
  </choice>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute><anyName/><text/></attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute><nsName ns =""/><text/></attribute>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.3</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute><choice><nsName ns =""/><name>foo</name></choice><text/></attribute>
</element>
</incorrect>
</testCase>
</testSuite>
<testSuite>
<section>7.4</section>
<testCase>
<section>7.4</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
    <element name="bar">
      <empty/>
    </element>
  </interleave>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.4</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
    <interleave>
      <element name="baz">
	<empty/>
      </element>
      <element name="bar">
	<empty/>
      </element>
    </interleave>
  </interleave>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.4</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
    <group>
      <element name="baz">
	<empty/>
      </element>
      <element name="bar">
	<empty/>
      </element>
    </group>
  </interleave>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.4</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
    <group>
      <element name="baz">
	<empty/>
      </element>
      <interleave>
        <element name="baz">
          <empty/>
        </element>
	<element name="bar">
	  <empty/>
	</element>
      </interleave>
    </group>
  </interleave>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.4</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
    <optional>
      <element name="bar">
	<empty/>
      </element>
    </optional>
  </interleave>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.4</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
    <element>
      <nsName ns=""/>
      <empty/>
    </element>
  </interleave>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.4</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
    <element>
      <anyName/>
      <empty/>
    </element>
  </interleave>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.4</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
    <element name="bar">
      <notAllowed/>
    </element>
  </interleave>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.4</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="bar">
      <empty/>
    </element>
    <element>
      <anyName>
        <except>
          <name>bar</name>
        </except>
      </anyName>
      <empty/>
    </element>
  </interleave>
</element>
</correct>
<valid>
<foo><bar/><baz/></foo>
</valid>
</testCase>
<testCase>
<section>7.4</section>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <choice>
      <element name="bar">
	<empty/>
      </element>
      <element name="bar">
	<text/>
      </element>
    </choice>
    <element name="baz">
      <empty/>
    </element>
  </interleave>
</element>
</correct>
<valid>
<foo><bar/><baz/></foo>
</valid>
</testCase>
<testCase>
<section>7.4</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <text/>
    <text/>
  </interleave>
</element>
</incorrect>
</testCase>
<testCase>
<section>7.4</section>
<incorrect>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <mixed>
    <mixed>
      <element name="bar">
        <empty/>
      </element>
    </mixed>
    <element name="baz">
      <empty/>
    </element>
  </mixed>
</element>
</incorrect>
</testCase>
</testSuite>
</testSuite>
<testSuite>
<documentation>Regressions</documentation>
<testCase>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
  <element name="foo">
    <choice>
      <group>
        <attribute name="bar"><empty/></attribute>
        <element name="baz1"><empty/></element>
      </group>
      <group>
        <attribute name="bar"><text/></attribute>
        <element name="baz2"><empty/></element>
      </group>
    </choice>
  </element>
</start>
</grammar>
</correct>
<valid>
<foo bar=" "><baz1/></foo>
</valid>
</testCase>
<testCase>
<correct>
<notAllowed xmlns="http://relaxng.org/ns/structure/1.0"/>
</correct>
<invalid>
<foo/>
</invalid>
</testCase>
</testSuite>
<testSuite>
<documentation>Validation error reporting</documentation>
<testCase>
<correct>
<element name="n1:foo" xmlns:n1="http://www.example.com/1"
	 xmlns="http://relaxng.org/ns/structure/1.0">
  <attribute name="a0"/>
  <attribute name="n1:a1"/>
  <attribute name="a2" ns="http://www.example.com/2"/>
  <attribute name="a3" ns="http://www.example.com/3"/>
  <attribute name="a4" ns="http://www.example.com/3"/>
</element>
</correct>
<valid>
<foo xmlns="http://www.example.com/1"
     xmlns:n1="http://www.example.com/1"
     xmlns:n2="http://www.example.com/2"
     xmlns:n3="http://www.example.com/3"
     a0=""
     n1:a1=""
     n2:a2=""
     n3:a3=""
     n3:a4=""
/>
</valid>
<invalid>
<foo xmlns="http://www.example.com/1"
     xmlns:n1="http://www.example.com/1"
     xmlns:n2="http://www.example.com/2"
     xmlns:n3="http://www.example.com/3"
     n1:a1=""
     n2:a2=""
     n3:a3=""
     n3:a4=""
/>
</invalid>
<invalid>
<foo xmlns="http://www.example.com/1"
     xmlns:n1="http://www.example.com/1"
     xmlns:n2="http://www.example.com/2"
     xmlns:n3="http://www.example.com/3"
     a0=""
     n2:a2=""
     n3:a3=""
     n3:a4=""
/>
</invalid>
<invalid>
<foo xmlns="http://www.example.com/1"
     xmlns:n1="http://www.example.com/1"
     xmlns:n2="http://www.example.com/2"
     xmlns:n3="http://www.example.com/3"
     a0=""
     n1:a1=""
     n3:a3=""
     n3:a4=""
/>
</invalid>
<invalid>
<foo xmlns="http://www.example.com/1"
     xmlns:n1="http://www.example.com/1"
     xmlns:n2="http://www.example.com/2"
     xmlns:n3="http://www.example.com/3"
     a0=""
     n1:a1=""
     n2:a2=""
/>
</invalid>
<invalid>
<foo xmlns="http://www.example.com/1"
     xmlns:n1="http://www.example.com/1"
     xmlns:n2="http://www.example.com/2"
     xmlns:n3="http://www.example.com/3"
/>
</invalid>
<invalid>
<n1:foo xmlns:n1="http://www.example.com/1"/>
</invalid>
<invalid>
<ns1:foo xmlns:ns1="http://www.example.com/1"/>
</invalid>
<invalid>
<foo xmlns="http://www.example.com/1"/>
</invalid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <element name="bar"><empty/></element>
  <text/>
</element>
</correct>
<valid>
<foo><bar/>text</foo>
</valid>
<invalid>
<foo>xyzzy</foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <value>xyzzy</value>
    <empty/>
  </choice>
</element>
</correct>
<valid>
<foo/>
</valid>
<valid>
<foo>xyzzy</foo>
</valid>
<invalid>
<foo>x</foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <empty/>
</element>
</correct>
<valid>
<foo/>
</valid>
<invalid>
<foo att="val"/>
</invalid>
</testCase>
</testSuite>
<testSuite>
<documentation>Datatype problems</documentation>
<requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
<testCase>
<correct>
<element name="e:foo" xmlns:e="http://www.example.com" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="QName" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">xyzzy</value>
</element>
</correct>
<valid>
<e:foo xmlns:e="http://www.example.com">xyzzy</e:foo>
</valid>
<invalid>
<e:foo xmlns:e="http://www.example.com" xmlns="http://relaxng.org/ns/structure/1.0">xyzzy</e:foo>
</invalid>
<invalid>
<e:foo xmlns:e="http://www.example.com">x</e:foo>
</invalid>
<invalid>
<foo xmlns="http://www.example.com">xyzzy</foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="e:foo" xmlns:e="http://www.example.com/1" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="QName" ns="http://www.example.com/2"
	 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">xyzzy</value>
</element>
</correct>
<valid>
<e1:foo xmlns:e1="http://www.example.com/1" xmlns:e2="http://www.example.com/2">e2:xyzzy</e1:foo>
</valid>
<valid>
<e1:foo xmlns:e1="http://www.example.com/1" xmlns="http://www.example.com/2">xyzzy</e1:foo>
</valid>
<invalid>
<e1:foo xmlns:e1="http://www.example.com/1">xyzzy</e1:foo>
</invalid>
<invalid>
<e1:foo xmlns:e1="http://www.example.com/1" xmlns="http://www.example.com/3">xyzzy</e1:foo>
</invalid>
<invalid>
<e1:foo xmlns:e1="http://www.example.com/1" xmlns="http://www.example.com/2">x</e1:foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="e:foo" xmlns:e="http://www.example.com/1" xmlns="http://relaxng.org/ns/structure/1.0">
  <value type="QName" xmlns:e3="http://www.example.com/2"
	 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">e3:xyzzy</value>
</element>
</correct>
<valid>
<e1:foo xmlns:e1="http://www.example.com/1" xmlns:e2="http://www.example.com/2">e2:xyzzy</e1:foo>
</valid>
<valid>
<e1:foo xmlns:e1="http://www.example.com/1" xmlns="http://www.example.com/2">xyzzy</e1:foo>
</valid>
<invalid>
<e1:foo xmlns:e1="http://www.example.com/1">xyzzy</e1:foo>
</invalid>
<invalid>
<e1:foo xmlns:e1="http://www.example.com/1" xmlns="http://www.example.com/3">xyzzy</e1:foo>
</invalid>
<invalid>
<e1:foo xmlns:e1="http://www.example.com/1" xmlns="http://www.example.com/2">x</e1:foo>
</invalid>
</testCase>
</testSuite>
<testSuite>
<documentation>Datatype error reporting</documentation>
<requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
<testCase>
<correct>
<element name="foo"
	 xmlns="http://relaxng.org/ns/structure/1.0"
	 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <choice>
    <value>x</value>
    <value>y</value>
  </choice>
</element>
</correct>
<valid>
<foo>x</foo>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo>z</foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="foo"
	 xmlns="http://relaxng.org/ns/structure/1.0"
	 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <attribute name="bar">
    <choice>
      <value>x</value>
      <value>y</value>
    </choice>
  </attribute>
</element>
</correct>
<valid>
<foo bar="x"/>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo bar=""/>
</invalid>
<invalid>
<foo bar="z"/>
</invalid>
</testCase>
<testCase>
<correct>
<element name="foo"
	 xmlns="http://relaxng.org/ns/structure/1.0"
	 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <attribute name="bar">
    <choice>
      <data type="NCName"/>
      <value>#none</value>
    </choice>
  </attribute>
</element>
</correct>
<valid>
<foo bar="x"/>
</valid>
<valid>
<foo bar="#none"/>
</valid>
<invalid>
<foo/>
</invalid>
<invalid>
<foo bar=""/>
</invalid>
<invalid>
<foo bar="#any"/>
</invalid>
</testCase>
<testCase>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
	 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

<start>
  <element name="foo"><ref name="content"/></element>
</start>

<define name="content">
  <list>
    <oneOrMore>
      <choice>
        <group>
	  <ref name="d"/>
	  <ref name="d"/>
	</group>
        <group>
	  <value>rgb</value>
	  <ref name="d"/>
	  <ref name="d"/>
	  <ref name="d"/>
	</group>
      </choice>
    </oneOrMore>
  </list>
</define>

<define name="d">
  <data type="double">
    <param name="minInclusive">0</param>
    <param name="maxInclusive">1</param>
  </data>
</define>

</grammar>
</correct>
<valid>
<foo>0.5 0.5</foo>
</valid>
<invalid>
<foo/>
</invalid>
<valid>
<foo>0.5 0.4 rgb 0.9 0.8 0.8</foo>
</valid>
<invalid>
<foo>0.5 0.4 rgb 0.9 1.1 0.8</foo>
</invalid>
<invalid>
<foo>0.5 0.4 rgb -0.9 0.8 0.8</foo>
</invalid>
<invalid>
<foo>0.5 0.4 rb 0.9 0.8 0.8</foo>
</invalid>
<invalid>
<foo>0.5 0.4 rgb 0.9 0.8</foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="foo"
	 xmlns="http://relaxng.org/ns/structure/1.0"
	 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <element name="bar">
    <choice>
      <value>x</value>
      <value>y</value>
    </choice>
  </element>
  <element name="baz"><empty/></element>
</element>
</correct>
<valid>
<foo><bar>x</bar><baz/></foo>
</valid>
<invalid>
<foo><bar>z</bar><baz/></foo>
</invalid>
</testCase>
</testSuite>
</testSuite>
