OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   Re: [xml-dev] Schema Question

[ Lists Home | Date Index | Thread Index ]


Dan,

In schema I think there is more than one possible way to accomplish this.  The one way that I have used is abstract comlex types and type substitution.  The schema might look something like this:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:element name="foo" type="fooType">
  </xs:element>

  <xs:complexType name="fooType" abstract="true"/>
       <xs:element name="data1" type="xs:string" minOccurs="0" maxOccurs="1"/>
       <xs:element name="data2" type="xs:string" minOccurs="0" maxOccurs="1"/>
       <xs:element name="data3" type="xs:string" minOccurs="0" maxOccurs="1"/>
       <xs:element name="data4" type="xs:string" minOccurs="0" maxOccurs="1"/>
     <xs:attribute name="mode" type="xs:string"/>
  <xs:complexType name="fooOne" >

     <xs:complexContent>
       <xs:extension base="fooType">
            <xs:sequence>
               <xs:element name="data1" type="xs:string" minOccurs="1" maxOccurs="1"/>
               <xs:element name="data2" type="xs:string"  minOccurs="1" maxOccurs="1"/>
            </xs:sequence>
            <xs:attribute name="mode" type="xs:string" fixed="one"/>
       </xs:extension>
     </xs:complexContent>
  </xs:complexType>


  <xs:complexType name="fooTwo" >
     <xs:complexContent>
       <xs:extension base="fooType">
            <xs:sequence>
               <xs:element name="data3" type="xs:string" minOccurs="1" maxOccurs="1"/>
               <xs:element name="data4" type="xs:string" minOccurs="1" maxOccurs="1"/>
            </xs:sequence>
            <xs:attribute name="mode" type="xs:string" fixed="two"/>
       </xs:extension>
     </xs:complexContent>
  </xs:complexType>
</xs:schema>

and both of the following instance documents validate.


<foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:noNamespaceSchemaLocation="foo.xsd" xsi:type="fooOne" mode="one">
  <data1>abc</data1>
  <data2>xyz</data2>
</foo>

<foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:noNamespaceSchemaLocation="foo.xsd" xsi:type="fooTwo" mode="two">
  <data3>abc</data3>
  <data4>xyz</data4>
</foo>

Regards
John McCarthy



                                                                                                                                                   
                      Dan White                                                                                                                    
                      <ygor@comcast.net        To:       xml-dev@lists.xml.org                                                                     
                      >                        cc:                                                                                                 
                                               Subject:  [xml-dev] Schema Question                                                                 
                      07/07/04 11:32 AM                                                                                                            
                                                                                                                                                   
                                                                                                                                                   





I need a pointer or two about creating a schema.

I have a situation where the incoming XML will have an element/attribute
specifying one of four enumerated choices.  Depending on the value of that
choice, the elements that follow will be different.

Like this:
<foo>
  <mode>one</mode>
  <data1>aaa</data1>
  <data2>bbb</data2>
</foo

<foo>
  <mode>two</mode>
  <data3>ccc</data3>
  <data4>ddd</data4>
</foo>

or
<foo mode="one">
  <data1>aaa</data1>
  <data2>bbb</data2>
</foo

<foo mode="two">
  <data3>ccc</data3>
  <data4>ddd</data4>
</foo>

How does one set up the schema to validate the appropriate sequence of
elements based on the value of the "controlling" element/attribute ?

Thanks in advance.

-----------------------------------------------------------------
The xml-dev list is sponsored by XML.org <http://www.xml.org>, an
initiative of OASIS <http://www.oasis-open.org>

The list archives are at http://lists.xml.org/archives/xml-dev/

To subscribe or unsubscribe from this list use the subscription
manager: <http://www.oasis-open.org/mlmanage/index.php>






--

This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden.






 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS