<testSuite>
<author>Daniel Veillard</author>
<email>daniel@veillard.com</email>
<documentation>For libxml2 implementation of Relax NG spec.</documentation>
<testSuite>
<documentation>Test of node matches</documentation>
<testCase>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0">
  <anyName>
    <except>
      <nsName ns="http://example.org"/>
    </except>
  </anyName>
  <empty/>
</element>
</correct>
<valid>
<foo/>
</valid>
<valid>
<foo xmlns="http://example.org/"/>
</valid>
<valid>
<foo xmlns="http://EXAMPLE.ORG"/>
</valid>
<invalid>
<foo xmlns="http://example.org"/>
</invalid>
<invalid>
<a:foo xmlns:a="http://example.org"/>
</invalid>
</testCase>
<testCase>
<correct>
<element name="top" xmlns="http://relaxng.org/ns/structure/1.0">
  <interleave>
    <element name="foo" ns="http://example.org">
      <empty/>
    </element>
    <element>
      <anyName>
	<except>
	  <nsName ns="http://example.org"/>
	</except>
      </anyName>
      <empty/>
    </element>
  </interleave>
</element>
</correct>
<invalid>
<top>
<foo/>
<bar/>
</top>
</invalid>
<invalid>
<top>
<foo xmlns="http://example.org"/>
<bar xmlns="http://example.org"/>
</top>
</invalid>
<valid>
<top>
<foo xmlns="http://example.org"/>
<bar/>
</top>
</valid>
<valid>
<top>
<bar/>
<foo xmlns="http://example.org"/>
</top>
</valid>
<valid>
<top>
<foo xmlns="http://example.org"/>
<bar xmlns="http://example.org/"/>
</top>
</valid>
<valid>
<top>
<bar xmlns="http://example.org/"/>
<foo xmlns="http://example.org"/>
</top>
</valid>
</testCase>
</testSuite>
<testSuite>
<documentation>Test of indeterminism</documentation>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <zeroOrMore>
    <element name="bar">
      <empty/>
    </element>
  </zeroOrMore>
  <element name="baz">
    <empty/>
  </element>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo>
  <baz/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <baz/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
  <bar/>
  <baz/>
</foo>
</valid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <zeroOrMore>
    <element name="bar">
      <empty/>
    </element>
  </zeroOrMore>
  <element name="bar">
    <empty/>
  </element>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
  <bar/>
  <bar/>
</foo>
</valid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <zeroOrMore>
      <element name="bar">
        <empty/>
      </element>
    </zeroOrMore>
    <element name="baz">
      <empty/>
    </element>
  </group>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo>
  <baz/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <baz/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
  <bar/>
  <baz/>
</foo>
</valid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <zeroOrMore>
      <element name="bar">
        <empty/>
      </element>
    </zeroOrMore>
    <element name="bar">
      <empty/>
    </element>
  </group>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
  <bar/>
  <bar/>
</foo>
</valid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <zeroOrMore>
      <element name="bar">
        <empty/>
      </element>
    </zeroOrMore>
    <element name="baz">
      <empty/>
    </element>
  </choice>
</element>
</correct>
<valid>
<foo/>
</valid>
<valid>
<foo>
  <baz/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
  <bar/>
</foo>
</valid>
<invalid>
<foo>
  <bar/>
  <baz/>
</foo>
</invalid>
<invalid>
<foo>
  <bar/>
  <bar/>
  <bar/>
  <bar/>
  <baz/>
</foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <zeroOrMore>
      <element name="bar">
        <empty/>
      </element>
    </zeroOrMore>
    <element name="baz">
      <empty/>
    </element>
  </choice>
  <element name="baz">
    <empty/>
  </element>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo>
  <baz/>
</foo>
</valid>
<valid>
<foo>
  <baz/>
  <baz/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
  <bar/>
  <baz/>
</foo>
</valid>
<invalid>
<foo>
  <bar/>
  <baz/>
  <baz/>
</foo>
</invalid>
<invalid>
<foo>
  <baz/>
  <bar/>
  <baz/>
</foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <zeroOrMore>
      <element name="bar">
        <empty/>
      </element>
    </zeroOrMore>
    <element name="bar">
      <empty/>
    </element>
  </choice>
</element>
</correct>
<valid>
<foo/>
</valid>
<valid>
<foo>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
  <bar/>
  <bar/>
</foo>
</valid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <choice>
    <zeroOrMore>
      <choice>
        <element name="bar">
          <empty/>
        </element>
        <element name="baz">
          <empty/>
        </element>
      </choice>
    </zeroOrMore>
    <element name="bar">
      <empty/>
    </element>
  </choice>
</element>
</correct>
<valid>
<foo/>
</valid>
<valid>
<foo>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <baz/>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
  <bar/>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <baz/>
  <baz/>
  <baz/>
  <baz/>
</foo>
</valid>
<valid>
<foo>
  <baz/>
  <bar/>
  <baz/>
  <bar/>
</foo>
</valid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <optional>
    <element name="bar">
      <empty/>
    </element>
  </optional>
  <element name="baz">
    <empty/>
  </element>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo>
  <baz/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <baz/>
</foo>
</valid>
<invalid>
<foo>
  <bar/>
  <bar/>
  <baz/>
</foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <optional>
    <element name="bar">
      <empty/>
    </element>
  </optional>
  <element name="bar">
    <empty/>
  </element>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
</foo>
</valid>
<invalid>
<foo>
  <bar/>
  <bar/>
  <bar/>
</foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <optional>
    <oneOrMore>
      <element name="bar">
        <empty/>
      </element>
    </oneOrMore>
  </optional>
  <element name="baz">
    <empty/>
  </element>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo>
  <baz/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <baz/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
  <baz/>
</foo>
</valid>
<invalid>
<foo>
  <bar/>
  <bar/>
</foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <optional>
    <oneOrMore>
      <element name="bar">
        <empty/>
      </element>
    </oneOrMore>
  </optional>
  <element name="bar">
    <empty/>
  </element>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
  <bar/>
</foo>
</valid>
</testCase>
<testCase>
<correct>
<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
  <group>
    <zeroOrMore>
      <choice>
        <element name="bar">
          <empty/>
        </element>
        <element name="baz">
          <empty/>
        </element>
      </choice>
    </zeroOrMore>
    <element name="bar">
      <empty/>
    </element>
  </group>
</element>
</correct>
<invalid>
<foo/>
</invalid>
<valid>
<foo>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <baz/>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <bar/>
  <bar/>
  <bar/>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <baz/>
  <baz/>
  <baz/>
  <bar/>
</foo>
</valid>
<valid>
<foo>
  <baz/>
  <bar/>
  <baz/>
  <bar/>
</foo>
</valid>
<invalid>
<foo>
  <bar/>
  <baz/>
  <bar/>
  <baz/>
</foo>
</invalid>
</testCase>
<testCase>
<correct>
<element name="list" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <element name="label">
      <empty/>
    </element>
    <optional>
      <element name="opt">
        <empty/>
      </element>
    </optional>
    <element name="item">
      <empty/>
    </element>
  </oneOrMore>
</element>
</correct>
<invalid>
<list>
</list>
</invalid>
<valid>
<list>
  <label/>
  <item/>
</list>
</valid>
<valid>
<list>
  <label/>
  <item/>
  <label/>
  <item/>
</list>
</valid>
<valid>
<list>
  <label/>
  <opt/>
  <item/>
  <label/>
  <opt/>
  <item/>
</list>
</valid>
<invalid>
<list>
  <label/>
  <item/>
  <label/>
  <opt/>
  <opt/>
  <item/>
</list>
</invalid>
</testCase>
<testCase>
<correct>
<element name="list" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <element name="label">
      <empty/>
    </element>
    <zeroOrMore>
      <element name="opt">
        <empty/>
      </element>
    </zeroOrMore>
    <element name="item">
      <empty/>
    </element>
  </oneOrMore>
</element>
</correct>
<invalid>
<list>
</list>
</invalid>
<valid>
<list>
  <label/>
  <item/>
</list>
</valid>
<valid>
<list>
  <label/>
  <item/>
  <label/>
  <item/>
</list>
</valid>
<valid>
<list>
  <label/>
  <opt/>
  <item/>
  <label/>
  <opt/>
  <item/>
</list>
</valid>
<valid>
<list>
  <label/>
  <item/>
  <label/>
  <opt/>
  <opt/>
  <item/>
</list>
</valid>
</testCase>
<testCase>
<correct>
<element name="list" xmlns="http://relaxng.org/ns/structure/1.0">
  <oneOrMore>
    <element name="label">
      <empty/>
    </element>
    <zeroOrMore>
      <element name="opt">
        <empty/>
      </element>
      <element name="opt2">
        <empty/>
      </element>
    </zeroOrMore>
    <element name="item">
      <empty/>
    </element>
  </oneOrMore>
</element>
</correct>
<invalid>
<list>
</list>
</invalid>
<valid>
<list>
  <label/>
  <item/>
</list>
</valid>
<valid>
<list>
  <label/>
  <item/>
  <label/>
  <item/>
</list>
</valid>
<valid>
<list>
  <label/>
  <opt/>
  <opt2/>
  <item/>
  <label/>
  <opt/>
  <opt2/>
  <item/>
</list>
</valid>
<valid>
<list>
  <label/>
  <item/>
  <label/>
  <opt/>
  <opt2/>
  <opt/>
  <opt2/>
  <item/>
</list>
</valid>
<invalid>
<list>
  <label/>
  <opt/>
  <item/>
  <label/>
  <item/>
</list>
</invalid>
<invalid>
<list>
  <label/>
  <item/>
  <label/>
  <opt2/>
  <opt/>
  <item/>
</list>
</invalid>
<invalid>
<list>
  <label/>
  <item/>
  <label/>
  <opt/>
  <opt2/>
  <opt/>
  <item/>
</list>
</invalid>
</testCase>
</testSuite>
<testSuite>
<documentation>Test of grammars merging</documentation>
<testCase>
<resource name="dbk.rng">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="p"/>
  </start>
  <define name="p.ext">
    <notAllowed/>
  </define>
  <define name="p">
    <element name="p">
      <choice>
        <ref name="p.ext"/>
	<empty/>
        <element name="a">
          <text/>
        </element>
      </choice>
    </element>
  </define>
</grammar>
</resource>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <grammar>
      <include href="dbk.rng"/>
      <define name="p.ext" combine="choice">
        <element name="b">
          <text/>
        </element>
      </define>
    </grammar>
  </start>
</grammar>
</correct>
<valid>
<p/>
</valid>
<valid>
<p>
  <a/>
</p>
</valid>
<valid>
<p>
  <b/>
</p>
</valid>
<invalid>
<b/>
</invalid>
<invalid>
<p>
  <b/>
  <b/>
</p>
</invalid>
</testCase>
<testCase>
<resource name="dbk.rng">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="p"/>
  </start>
  <define name="p.ext">
    <notAllowed/>
  </define>
  <define name="p">
    <element name="p">
      <choice>
        <ref name="p.ext"/>
	<empty/>
        <element name="a">
          <text/>
        </element>
      </choice>
    </element>
  </define>
  <define name="c">
    <element name="c">
      <empty/>
    </element>
  </define>
</grammar>
</resource>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <grammar>
      <include href="dbk.rng"/>
      <define name="p.ext" combine="choice">
        <choice>
	  <ref name="c"/>
	  <parentRef name="d"/>
          <element name="b">
            <text/>
          </element>
        </choice>
      </define>
    </grammar>
  </start>
  <define name="d">
    <element name="d">
      <empty/>
    </element>
  </define>
</grammar>
</correct>
<valid>
<p/>
</valid>
<valid>
<p>
  <a/>
</p>
</valid>
<valid>
<p>
  <b/>
</p>
</valid>
<valid>
<p>
  <c/>
</p>
</valid>
<valid>
<p>
  <d/>
</p>
</valid>
<invalid>
<b/>
</invalid>
<invalid>
<c/>
</invalid>
<invalid>
<d/>
</invalid>
<invalid>
<p>
  <b/>
  <c/>
</p>
</invalid>
<invalid>
<p>
  <d/>
  <c/>
</p>
</invalid>
</testCase>
<testCase>
<resource name="dbk.rng">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="p"/>
  </start>
  <define name="p.ext">
    <notAllowed/>
  </define>
  <define name="p">
    <element name="p">
      <choice>
        <ref name="p.ext"/>
	<empty/>
        <element name="a">
          <text/>
        </element>
      </choice>
    </element>
  </define>
  <define name="c">
    <element name="c">
      <empty/>
    </element>
  </define>
</grammar>
</resource>
<resource name="proof.rng">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="e"/>
  </start>
  <define name="d">
    <element name="d">
      <empty/>
    </element>
  </define>
  <define name="e">
    <element name="e">
      <empty/>
    </element>
  </define>
  <define name="f">
    <element name="f">
      <empty/>
    </element>
  </define>
</grammar>
</resource>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <grammar>
      <include href="dbk.rng"/>
      <define name="p.ext" combine="choice">
        <choice>
	  <ref name="c"/>
	  <grammar>
	    <include href="proof.rng"/>
	    <start combine="choice">
	      <ref name="d"/>
	    </start>
	  </grammar>
          <element name="b">
            <text/>
          </element>
        </choice>
      </define>
    </grammar>
  </start>
  <define name="g">
    <element name="g">
      <empty/>
    </element>
  </define>
</grammar>
</correct>
<valid>
<p/>
</valid>
<valid>
<p>
  <a/>
</p>
</valid>
<valid>
<p>
  <b/>
</p>
</valid>
<valid>
<p>
  <c/>
</p>
</valid>
<valid>
<p>
  <d/>
</p>
</valid>
<valid>
<p>
  <e/>
</p>
</valid>
<invalid>
<p>
  <f/>
</p>
</invalid>
<invalid>
<p>
  <g/>
</p>
</invalid>
<invalid>
<b/>
</invalid>
<invalid>
<c/>
</invalid>
<invalid>
<d/>
</invalid>
<invalid>
<e/>
</invalid>
<invalid>
<f/>
</invalid>
<invalid>
<g/>
</invalid>
<invalid>
<p>
  <d/>
  <c/>
</p>
</invalid>
<invalid>
<p>
  <d/>
  <e/>
</p>
</invalid>
</testCase>
<testCase>
<resource name="dbk.rng">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="p"/>
  </start>
  <define name="p.ext">
    <notAllowed/>
  </define>
  <define name="p">
    <element name="p">
      <choice>
        <ref name="p.ext"/>
	<empty/>
        <element name="a">
          <text/>
        </element>
      </choice>
    </element>
  </define>
  <define name="c">
    <element name="c">
      <empty/>
    </element>
  </define>
</grammar>
</resource>
<resource name="proof.rng">
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
         ns="http://example.org/ns/proofsystem">
  <start>
    <ref name="e"/>
  </start>
  <define name="d">
    <element name="d">
      <empty/>
    </element>
  </define>
  <define name="e">
    <element name="e">
      <empty/>
    </element>
  </define>
  <define name="f">
    <element name="f">
      <empty/>
    </element>
  </define>
</grammar>
</resource>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <grammar>
      <include href="dbk.rng"/>
      <define name="p.ext" combine="choice">
        <choice>
	  <ref name="c"/>
	  <grammar>
	    <include href="proof.rng"/>
	    <start combine="choice">
	      <ref name="d"/>
	    </start>
	  </grammar>
          <element name="b">
            <text/>
          </element>
        </choice>
      </define>
    </grammar>
  </start>
  <define name="g">
    <element name="g">
      <empty/>
    </element>
  </define>
</grammar>
</correct>
<valid>
<p/>
</valid>
<valid>
<p>
  <a/>
</p>
</valid>
<valid>
<p>
  <b/>
</p>
</valid>
<valid>
<p>
  <c/>
</p>
</valid>
<valid>
<p xmlns:p="http://example.org/ns/proofsystem">
  <p:d/>
</p>
</valid>
<invalid>
<p>
  <d/>
</p>
</invalid>
<valid>
<p xmlns:p="http://example.org/ns/proofsystem">
  <p:e/>
</p>
</valid>
<invalid>
<p>
  <e/>
</p>
</invalid>
<invalid>
<p xmlns:p="http://example.org/ns/proofsystem">
  <p:f/>
</p>
</invalid>
<invalid>
<p>
  <f/>
</p>
</invalid>
<invalid>
<p>
  <g/>
</p>
</invalid>
<invalid>
<b/>
</invalid>
<invalid>
<c/>
</invalid>
<invalid>
<d/>
</invalid>
<invalid>
<e/>
</invalid>
<invalid>
<f/>
</invalid>
<invalid>
<g/>
</invalid>
<invalid>
<p xmlns:p="http://example.org/ns/proofsystem">
  <p:d/>
  <c/>
</p>
</invalid>
<invalid>
<p xmlns:p="http://example.org/ns/proofsystem">
  <p:d/>
  <p:e/>
</p>
</invalid>
</testCase>
<testCase>
<resource name="ext.rng">
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <ref name="p"/>
  </start>
  <define name="p">
    <element name="p">
      <empty/>
    </element>
  </define>
</grammar>
</resource>
<correct>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <start>
    <element name="top">
      <choice>
        <ref name="include1"/>
        <ref name="include2"/>
      </choice>
    </element>
  </start>
  <define name="include1">
    <grammar>
      <include href="ext.rng">
        <start>
	 <element name="a">
	   <choice>
	     <empty/>
	     <ref name="p"/>
	   </choice>
	 </element>
	</start>
      </include>
    </grammar>
  </define>
  <define name="include2">
    <grammar>
      <include href="ext.rng">
        <start>
	 <element name="b">
	   <choice>
	     <empty/>
	     <ref name="p"/>
	   </choice>
	 </element>
	</start>
      </include>
    </grammar>
  </define>
</grammar>
</correct>
<invalid>
<top/>
</invalid>
<invalid>
<a/>
</invalid>
<invalid>
<b/>
</invalid>
<invalid>
<p/>
</invalid>
<valid>
<top>
  <a/>
</top>
</valid>
<valid>
<top>
  <b/>
</top>
</valid>
<valid>
<top>
  <a>
    <p/>
  </a>
</top>
</valid>
<valid>
<top>
  <b>
    <p/>
  </b>
</top>
</valid>
</testCase>
</testSuite>
<testSuite>
<documentation>Test of ID/IDREF</documentation>
<testCase>
<correct>
<element name="top" xmlns="http://relaxng.org/ns/structure/1.0"
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <zeroOrMore>
    <choice>
      <element name="ref">
        <attribute name="id">
	  <data type="ID"/>
	</attribute>
	<text/>
      </element>
      <element name="xref">
        <attribute name="link">
	  <data type="IDREF"/>
	</attribute>
	<text/>
      </element>
    </choice>
  </zeroOrMore>
</element>
</correct>
<valid>
<top>
</top>
</valid>
<invalid>
<top>
  <xref link="id1"/>
</top>
</invalid>
<valid>
<top>
  <ref id="id1"/>
</top>
</valid>
<valid>
<top>
  <xref link="id1"/>
  <ref id="id1"/>
</top>
</valid>
<valid>
<top>
  <xref link="  id1 "/>
  <ref id="     id1   "/>
  <xref link="id1 "/>
  <xref link="  id1"/>
</top>
</valid>
<valid>
<top>
  <ref id="id1"/>
  <xref link="id1"/>
</top>
</valid>
<invalid>
<top>
  <ref id="id1"/>
  <ref id="id1"/>
</top>
</invalid>
</testCase>
<testCase>
<correct>
<element name="top" xmlns="http://relaxng.org/ns/structure/1.0"
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <zeroOrMore>
    <choice>
      <element name="ref">
        <attribute name="id">
	  <data type="ID"/>
	</attribute>
	<text/>
      </element>
      <element name="xref">
        <attribute name="link">
	  <data type="IDREFS"/>
	</attribute>
	<text/>
      </element>
    </choice>
  </zeroOrMore>
</element>
</correct>
<valid>
<top>
</top>
</valid>
<invalid>
<top>
  <xref link="id1"/>
</top>
</invalid>
<valid>
<top>
  <ref id="id1"/>
</top>
</valid>
<valid>
<top>
  <xref link="id1"/>
  <ref id="id1"/>
</top>
</valid>
<valid>
<top>
  <xref link="id1 id1"/>
  <ref id="id1"/>
</top>
</valid>
<valid>
<top>
  <ref id="id1"/>
  <xref link="id1"/>
</top>
</valid>
<valid>
<top>
  <ref id="id2"/>
  <xref link="id1 id2"/>
  <ref id="id1"/>
</top>
</valid>
<valid>
<top>
  <ref id="id2"/>
  <xref link=" id2    id1   id2 "/>
  <ref id="id1"/>
</top>
</valid>
<invalid>
<top>
  <ref id="id2"/>
  <xref link="id1 id2"/>
</top>
</invalid>
<invalid>
<top>
  <xref link="id1 id2"/>
  <ref id="id1"/>
</top>
</invalid>
<invalid>
<top>
  <ref id="id1"/>
  <ref id="id1"/>
</top>
</invalid>
</testCase>
</testSuite>
<testSuite>
<documentation>Test of ENTITY/ENTITIES</documentation>
<testCase>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <data type="ENTITY"/>
</element>
</correct>
<invalid>
<doc></doc>
</invalid>
<invalid>
<doc>foo</doc>
</invalid>
<valid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt;&#10;]&gt;">
<doc>foo</doc>
</valid>
<valid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt;&#10;]&gt;">
<doc>  foo </doc>
</valid>
<invalid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt;&#10;]&gt;">
<doc>foo bar</doc>
</invalid>
</testCase>
<testCase>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <data type="ENTITIES"/>
</element>
</correct>
<invalid>
<doc></doc>
</invalid>
<invalid>
<doc>foo</doc>
</invalid>
<valid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt; &#10;&lt;!ENTITY bar SYSTEM 'whatever' NDATA jpeg&gt; &#10;]&gt;">
<doc> foo bar </doc>
</valid>
<valid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt; &#10;&lt;!ENTITY bar SYSTEM 'whatever' NDATA jpeg&gt; &#10;]&gt;">
<doc> foo bar foo</doc>
</valid>
<invalid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt;]&gt;">
<doc>foo bar</doc>
</invalid>
</testCase>
</testSuite>
<testSuite>
<documentation>Test of Mixed</documentation>
<testCase>
<correct>
<element name="mix" xmlns="http://relaxng.org/ns/structure/1.0">
  <mixed>
    <zeroOrMore>
      <choice>
        <element name="a">
	  <empty/>
	</element>
        <element name="b">
	  <empty/>
	</element>
        <element name="c">
	  <empty/>
	</element>
      </choice>
    </zeroOrMore>
  </mixed>
  <element name="d">
    <empty/>
  </element>
</element>
</correct>
<valid>
<mix>
  <d/>
</mix>
</valid>
<valid>
<mix>
  <b/>
  <a/>
  <c/>
  <b/>
  <d/>
</mix>
</valid>
<valid>
<mix>
  mixed
  <c/>
  <d/>
</mix>
</valid>
<valid>
<mix>
  <c/>
  mixed
  <d/>
</mix>
</valid>
<valid>
<mix>
  <b/>
  is
  <a/>
  inter
  <c/>
  mixed
  <b/>
  <d/>
</mix>
</valid>
<valid>
<mix>
  mixed
  <b/>
  .
  <d/>
</mix>
</valid>
<valid>
<mix>
  this
  <b/>
  is
  <a/>
  inter
  <c/>
  mixed
  <b/>
  .
  <d/>
</mix>
</valid>
</testCase>
</testSuite>
</testSuite>
