<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=" <!DOCTYPE doc [ <!ENTITY foo SYSTEM 'whatever' NDATA jpeg> ]>"> <doc>foo</doc> </valid> <valid dtd=" <!DOCTYPE doc [ <!ENTITY foo SYSTEM 'whatever' NDATA jpeg> ]>"> <doc> foo </doc> </valid> <invalid dtd=" <!DOCTYPE doc [ <!ENTITY foo SYSTEM 'whatever' NDATA jpeg> ]>"> <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=" <!DOCTYPE doc [ <!ENTITY foo SYSTEM 'whatever' NDATA jpeg> <!ENTITY bar SYSTEM 'whatever' NDATA jpeg> ]>"> <doc> foo bar </doc> </valid> <valid dtd=" <!DOCTYPE doc [ <!ENTITY foo SYSTEM 'whatever' NDATA jpeg> <!ENTITY bar SYSTEM 'whatever' NDATA jpeg> ]>"> <doc> foo bar foo</doc> </valid> <invalid dtd=" <!DOCTYPE doc [ <!ENTITY foo SYSTEM 'whatever' NDATA jpeg>]>"> <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>