xml - Specify root element with general child element in XSD -


i have base class child elements in xsd

<xs:complextype name="baseitem">     <xs:attribute name="id" type="string" use="required"/> </xs:complextype> 

and extenders of element

<xs:complextype name="package">     <xs:complexcontent>         <xs:extension base="baseitem">             <xs:sequence>                 <xs:element name="subelement" type="subelementtype"/>             </xs:sequence>         </xs:extension>     </xs:complexcontent> </xs:complextype>  <xs:complextype name="class">     <xs:complexcontent>         <xs:extension base="baseitem">             <xs:sequence>                 <xs:element name="subelement2" type="subelementtype2"/>             </xs:sequence>         </xs:extension>     </xs:complexcontent> </xs:complextype> ....... etc.... 

and xml examples xsd:

xml1: <root><package id="xxx"><subelement/></package></root>

xml2: <root><class id="xxx"><subelement2/></class></root>

xml3: <root><method id="xxx"><subelement3/></method></root>

xml4: <root><method id="xxx"><subelement3/></method></root>

how can specify root element in xsd without defining possible children?

<xs:element name="root"> <xs:complextype> <xs:sequence> //????? </xs:sequence> </xs:complextype> </xs:element>

is way specify children through base type? smth:

<xs:element name="root"> <xs:complextype> <xs:sequence> <element type="baseitem"/> </xs:sequence> </xs:complextype> </xs:element>

or without specifying name of element impossible?

you use substitution group (http://www.w3schools.com/schema/schema_complex_subst.asp) in way

<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema" elementformdefault="qualified" attributeformdefault="unqualified">     <xs:complextype name="base_item_type">         <xs:attribute name="id" type="xs:string" use="required"/>     </xs:complextype>      <xs:complextype name="package_type">         <xs:complexcontent>             <xs:extension base="base_item_type">                 <xs:sequence>                     <xs:element name="subelement" type="xs:string"/>                 </xs:sequence>             </xs:extension>         </xs:complexcontent>     </xs:complextype>      <xs:complextype name="class_type">         <xs:complexcontent>             <xs:extension base="base_item_type">                 <xs:sequence>                     <xs:element name="subelement2" type="xs:string"/>                 </xs:sequence>             </xs:extension>         </xs:complexcontent>     </xs:complextype>      <!-- abstract attribute prevent occurence of baseelement-->    <xs:element name="baseelement" type="base_item_type" abstract="true"/>      <!-- package , class element might used instead of baseelement-->     <!-- can put root element -->     <xs:element name="package" type="package_type" substitutiongroup="baseelement" />      <xs:element name="class" type="class_type" substitutiongroup="baseelement"/>      <!-- root element -->     <xs:element name="rootelement">         <xs:complextype>             <xs:sequence>                 <xs:element ref="baseelement" maxoccurs="unbounded" />             </xs:sequence>         </xs:complextype>     </xs:element>  </xs:schema> 

but i'm not sure if better choice in root element - because in way "package" , "class" can put root element directly. prefer 1 root element (although bigger) choice.


Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -