ZVON > Tutorials > XML Schema and Relax NG Tutorial |
Intro / Search / ZVON |
Index | >> Example 4 / 9 << | Prev | Next | |
We want to have the root element to be named "AAA", from null namespace and contains one "BBB" and one "CCC" element. Their order is not important.
Valid document <AAA xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <BBB>ZZZ</BBB> <CCC>YYY</CCC> </AAA> Valid document <AAA xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <CCC/> <BBB/> </AAA> Invalid document <AAA xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <BBB/> </AAA> Invalid document <AAA xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <CCC>zz</CCC> </AAA> |
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:all minOccurs="1" maxOccurs="1"> <xsd:element name="BBB" type="xsd:string"/> <xsd:element name="CCC" type="xsd:string"/> </xsd:all> </xsd:complexType> </xsd:element> </xsd:schema> |
Use the "interleave" pattern.
Valid document <AAA xmlns=""> <BBB>XXX</BBB> <CCC> cc </CCC> </AAA> Valid document <AAA xmlns=""> <CCC/> <BBB>XXX</BBB> </AAA> Invalid document <AAA xmlns=""> <BBB/> </AAA> Invalid document <AAA xmlns=""> <CCC>zz</CCC> </AAA> |
Correct Relax NG schema (correctRelax_0.rng) <grammar xmlns="http://relaxng.org/ns/structure/1.0" > <start> <element> <name ns="">AAA</name> <interleave> <element> <name ns="">BBB</name> <text/> </element> <element> <name ns="">CCC</name> <text/> </element> </interleave> </element> </start> </grammar> Correct Relax NG schema (correctRelax_1.rng) |