xml - how can i remove the ordering from a xsd sequence -


how can remove ordering restriction in following xsd:

<xs:element name="example">     <xs:sequence>         <xs:element name="hostname" type="xs:string" minoccurs="0" maxoccurs="1"/>         <xs:element name="filename" type="xs:string" minoccurs="1" maxoccurs="1"/>         <xs:element name="chunks" type="xs:string" minoccurs="1" maxoccurs="unbonded"/>     </xs:sequence> </xs:element> 

so @ end following xml should validated

<example>     <chunks>...</chunks>     <filename>...</filename>     <chunks>...</chunks> </example> <!--  --> <example>     <filename>...</filename>     <chunks>...</chunks>     <chunks>...</chunks> </example> <!--  --> <example>     <filename>...</filename>     <chunks>...</chunks>     <chunks>...</chunks>     <hostname>...</hostname> </example> 

accepted solution:

<xs:element name="example">     <xs:all>         <xs:element name="hostname" type="xs:string" minoccurs="0" maxoccurs="1"/>         <xs:element name="filename" type="xs:string" minoccurs="1" maxoccurs="1"/>         <xs:element name="chunks" type="xs:string" minoccurs="1" maxoccurs="unbonded"/>     </xs:all> </xs:element> 

you can achieve combination of sequence , choice repeating elements in several possible combinations, guarantee required ones present, won't nice , simple. suggest different design (if possible).

is there reason <chunks> elements can appear anywhere? if designing xml, deciding upon restrictions necessary , ones should made flexible simplify generation , processing (as validation). keeping them in sequence or wrapping them allow them seen group , make validation easier (it simplify language mapping, example, wrapped identical elements mapped array).

one form of keeping similar elements sequence, don't want. wrap in type , use xs:all:

<xs:element name="example">   <xs:complextype>     <xs:all>       <xs:element name="filename" type="xs:string" minoccurs="1" maxoccurs="1"/>       <xs:element name="hostname" type="xs:string" minoccurs="0" maxoccurs="1"/>       <xs:element name="chunks" type="chunkstype" minoccurs="1" maxoccurs="1"/>     </xs:all>   </xs:complextype> </xs:element> <xs:complextype name="chunkstype">   <xs:sequence>     <xs:element name="chunk" minoccurs="1" maxoccurs="unbounded"/>   </xs:sequence> </xs:complextype> 

this validate xml fragment this:

<example>     <chunks>         <chunk>...</chunk>         <chunk>...</chunk>     </chunks>     <filename>...</filename> </example> <!--  --> <example>     <filename>...</filename>     <chunks>         <chunk>...</chunk>         <chunk>...</chunk>     </chunks> </example> <!--  --> <example>     <filename>...</filename>     <chunks>         <chunk>...</chunk>     </chunks>     <hostname>...</hostname> </example> <example>     <hostname>...</hostname>     <filename>...</filename>     <chunks>         <chunk>...</chunk>         <chunk>...</chunk>     </chunks> </example> 

and fail these:

<!-- missing filename --> <example>     <chunks>         <chunk>...</chunk>         <chunk>...</chunk>     </chunks> </example>  <!-- no chunks block --> <example>     <filename>...</filename>     <hostname>...</hostname> </example>  <!-- empty chunks block --> <example>     <hostname>...</hostname>     <filename>...</filename>     <chunks></chunks> </example> 

you can't place unbounded element in xs:all since allows 0 or 1. can't use sequence of choices because have required elements. , can't combine xs:all sequence solve problem (actually can of these things, if using xsd 1.1).

in xsd 1.1 can have xs:all unbounded elements validate xml using:

<xs:all>     <xs:element name="filename" type="xs:string" minoccurs="1" maxoccurs="1"/>     <xs:element name="hostname" type="xs:string" minoccurs="0" maxoccurs="1"/>     <xs:element name="chunks" type="xs:string" minoccurs="1" maxoccurs="unbounded"/> </xs:all> 

which illegal in xsd 1.0.


Comments

Popular posts from this blog

javascript - jquery or ashx not working -

opencv - DataType<cv::detail::deriv_type>::depth what is it used for -

python 3.x - Mapping specific letters onto a list of words -