<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=“relaxng.org/ns/structure/1.0”>

<anyName>
  <except>
    <nsName ns="http://example.org"/>
  </except>
</anyName>
<empty/>

</element> </correct> <valid> <foo/> </valid> <valid> <foo xmlns=“example.org/”/> </valid> <valid> <foo xmlns=“EXAMPLE.ORG”/> </valid> <invalid> <foo xmlns=“example.org”/> </invalid> <invalid> <a:foo xmlns:a=“example.org”/> </invalid> </testCase> <testCase> <correct> <element name=“top” xmlns=“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=“example.org”/> <bar xmlns=“example.org”/> </top> </invalid> <valid> <top> <foo xmlns=“example.org”/> <bar/> </top> </valid> <valid> <top> <bar/> <foo xmlns=“example.org”/> </top> </valid> <valid> <top> <foo xmlns=“example.org”/> <bar xmlns=“example.org/”/> </top> </valid> <valid> <top> <bar xmlns=“example.org/”/> <foo xmlns=“example.org”/> </top> </valid> </testCase> </testSuite> <testSuite> <documentation>Test of indeterminism</documentation> <testCase> <correct> <element name=“foo” xmlns=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“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=“example.org/ns/proofsystem”>

<p:d/>

</p> </valid> <invalid> <p>

<d/>

</p> </invalid> <valid> <p xmlns:p=“example.org/ns/proofsystem”>

<p:e/>

</p> </valid> <invalid> <p>

<e/>

</p> </invalid> <invalid> <p xmlns:p=“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=“example.org/ns/proofsystem”>

<p:d/>
<c/>

</p> </invalid> <invalid> <p xmlns:p=“example.org/ns/proofsystem”>

<p:d/>
<p:e/>

</p> </invalid> </testCase> <testCase> <resource name=“ext.rng”> <grammar xmlns=“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=“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=“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=“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=“relaxng.org/ns/structure/1.0” name=“doc” datatypeLibrary=“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=“relaxng.org/ns/structure/1.0” name=“doc” datatypeLibrary=“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=“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>