Creating an Element with Mixed Content

For our final example, we’ll create an element with mixed content. Mixed content means this element can contain text and other elements. Here’s an expanded schema that declares a second element; the first element can contain any combination of text and the second element:

<?xml version="1.0" encoding="UTF-8"?>
<!-- content3.xsd -->
<xs:schema 
  xmlns="http://www.oreilly.com/xslt"
  targetNamespace="http://www.oreilly.com/xslt"
  xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="content3">
    <xs:complexType mixed="true">
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="emphasis"/>
      </xs:sequence>
      <xs:attribute name="color" type="xs:string"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="emphasis" type="xs:string"/>

</xs:schema>

Now we’ve declared a complex type that contains mixed content, an element, and an attribute. Here’s a valid document in our new schema:

<?xml version="1.0" encoding="utf-8"?>
<!-- content3.xml -->
<content3
  xmlns="http://www.oreilly.com/xslt"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.oreilly.com/xslt content3.xsd"
  color="blue">
Our element <emphasis>now</emphasis> contains some text!  
It's getting <emphasis>more useful</emphasis> all the time.
</content3>

One final detail: in the schema, we declared the <emphasis> element outside the complex type and referred to it in the declaration of the <content3> element. If we had declared <emphasis> like this:

 <xs:complexType ...

Get XSLT, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.