ZVON > Tutorials > XML Schema and Relax NG Tutorial
Index | >> Example 3 / 9 << | Prev | Next |
Contents > Simple tasks > Element with mixed content (text and only one element)

Element with mixed content (text and only one element)

  1. XML Schema
  2. Relax NG
XML Schema keys: mixed
Relax NG keys: interleave

1. XML Schema

We want to have the root element to be named "AAA", from null namespace and contains text and an element "BBB". You will need to set the attribute "mixed" to "true" - to allow mixed content.

Valid document


<AAA xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xxx yyy
  <BBB>ZZZ</BBB> aaa
</AAA>

Correct XML Schema (correct_0.xsd)


<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >

  <xsd:element name="AAA">
    <xsd:complexType mixed="true">
      <xsd:sequence minOccurs="1">
        <xsd:element name="BBB" type="xsd:string"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

2. Relax NG

Use the "interleave" pattern.

Valid document


<AAA xmlns=""> xxx
  <BBB>XXX</BBB> yyy
</AAA>

Correct Relax NG schema (correctRelax_0.rng)


<grammar xmlns="http://relaxng.org/ns/structure/1.0" >

  <start>
    <element>
      <name ns="">AAA</name>
      <interleave>
        <text/>
        <element>
          <name ns="">BBB</name>
          <text/>
        </element>
      </interleave>
    </element>
  </start>
</grammar>

Correct Relax NG schema (correctRelax_1.rng)
This short version is also valid.


<element ns="" name="AAA" xmlns="http://relaxng.org/ns/structure/1.0" >
  <interleave>
    <text/>
    <element name="BBB" ns="">
      <text/>
    </element>
  </interleave>
</element>