ZVON > Tutorials > XML Schema and Relax NG Tutorial |
Intro / Search / ZVON |
Index | >> Example 6 / 9 << | Prev | Next | |
Please, send all comments, bug-reports, and contributions to Jiri.Jirat@systinet.com. Thank you very much.
XML Schema keys: sequence, maxOccursWe want to have the root element to be named "AAA", from null namespace and contains a mixture of any number (even zero) of "BBB" and "CCC" elements. You need to use the trick below - use "sequence" element with "minOccurs" attribute set to 0 and "maxOccurs" set to "unbounded", and the attribute "minOccurs" of the "element" elements must be set to 0 too.
Valid document <AAA xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <BBB>111</BBB> <CCC>YYY</CCC> <BBB>222</BBB> <BBB>333</BBB> <CCC>ZZZ</CCC> </AAA> Valid document <AAA xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> |
Correct XML Schema (correct_0.xsd) <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="AAA"> <xsd:complexType mixed="false"> <xsd:sequence minOccurs="0" maxOccurs="unbounded"> <xsd:element name="BBB" type="xsd:string" minOccurs="0"/> <xsd:element name="CCC" type="xsd:string" minOccurs="0"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> |
We will use the "interleave" and "zeroOrMore" patterns.
Valid document <AAA xmlns=""> <BBB>111</BBB> <CCC>YYY</CCC> <BBB>222</BBB> <BBB>333</BBB> <CCC>ZZZ</CCC> </AAA> Valid document <AAA xmlns=""/> |
Correct Relax NG schema (correctRelax_0.rng) <grammar xmlns="http://relaxng.org/ns/structure/1.0" > <start> <element> <name ns="">AAA</name> <interleave> <zeroOrMore> <element> <name ns="">BBB</name> <text/> </element> </zeroOrMore> <zeroOrMore> <element> <name ns="">CCC</name> <text/> </element> </zeroOrMore> </interleave> </element> </start> </grammar> Correct Relax NG schema (correctRelax_1.rng) <element ns="" name="AAA" xmlns="http://relaxng.org/ns/structure/1.0" > <interleave> <zeroOrMore> <element name="BBB"> <text/> </element> </zeroOrMore> <zeroOrMore> <element name="CCC"> <text/> </element> </zeroOrMore> </interleave> </element> |