Allowing any sub-element while requiring one particular sub-element

I am pretty new to XML Schemas, so sorry if this is a dumb question, but
couldn't find doc on it anywhere.

I am building an XML Schema and I would like one of the elements to
allow any sub-elements of any type (I won't know what they are) and
require that there is one particular sub-element.  The schema and sample
XML is included below.  The element 'Recipient' is the one that I want
to allow any number of sub elements (such as 'FirstName'), but require
the 'email' element be there.


<?xml version="1.0" encoding="UTF-8"?>
<MailingDefinition
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="C:\Projects\xml\msgdef.xsd">
 <Header>
  <Subject>this is a mailing example</Subject>
  <MailingName>this is the name of the mailing</MailingName>
  <FromName>Tom Elrod</FromName>
  <FromAddress>telrod@yahoo.com</FromAddress>
   <ReplyTo>telrod@yahoo.com</ReplyTo>
  <SendDate>2001-12-31</SendDate>
  <!-- Can sufix with a time zone indicator. For example, to indicate
1:20 pm for Eastern Standard Time which is 5 hours behind Coordinated
Universal Time (UTC), one would write: 13:20:00-05:00 -->
  <SendTime>13:20:00</SendTime>
  <!-- Mailing ID is optional.  If not present, then will be generated.
Otherwise, use one specified -->
  <MailingID>1001</MailingID>
  <!-- Should either have a Recipient element or ListID element -->
  <!-- <ListID>3221</ListID>-->
  <Recipients>
   <Recipient>
    <!-- email element is required -->
    <email>telrod@e2technologies.net</email>
    <FirstName>Tom</FirstName>
    <LastName>Elrod</LastName>
    <Salutation>Hello</Salutation>
   </Recipient>
   <Recipient>
    <email>telrod@yahoo.com</email>
    <FirstName>Thomas</FirstName>
    <LastName>Elrod</LastName>
    <Salutation>Whatzup</Salutation>
   </Recipient>
  </Recipients>
  </Header>
</MailingDefinition>


<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
elementFormDefault="qualified">
 <xsd:element name="MailingDefinition">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="Header">
     <xsd:complexType>
      <xsd:sequence>
       <xsd:element name="Subject" type="xsd:string"/>
       <xsd:element name="MailingName" type="xsd:string"/>
       <xsd:element name="FromName" type="xsd:string"/>
       <xsd:element name="FromAddress" type="xsd:string"/>
       <xsd:element name="ReplyTo" type="xsd:string"/>
       <xsd:element name="SendDate" type="xsd:date">
        <xsd:annotation>
         <xsd:documentation>Can sufix with a time zone indicator. For
example, to indicate 1:20 pm for Eastern Standard Time which is 5 hours
behind Coordinated Universal Time (UTC), one would write:
13:20:00-05:00</xsd:documentation>
        </xsd:annotation>
       </xsd:element>
       <xsd:element name="SendTime" type="xsd:time"/>
       <xsd:element name="MailingID" type="xsd:string" minOccurs="0">
        <xsd:annotation>
         <xsd:documentation>If not provided, will be generated by Mail
Manager when creating new mailing</xsd:documentation>
        </xsd:annotation>
       </xsd:element>
       <xsd:choice>
        <xsd:element name="ListID" type="xsd:string"/>
        <xsd:element name="Recipients">
         <xsd:complexType>
          <xsd:all>
           <xsd:element name="Recipient" maxOccurs="unbounded">
            <xsd:complexType>
             <xsd:all>
              <xsd:element name="email" type="xsd:string"/>
             </xsd:all>
            </xsd:complexType>
           </xsd:element>
          </xsd:all>
         </xsd:complexType>
        </xsd:element>
       </xsd:choice>
      </xsd:sequence>
     </xsd:complexType>
    </xsd:element>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
</xsd:schema>


Thanks.

-Tom

Received on Monday, 11 June 2001 05:37:20 UTC