W3C home > Mailing lists > Public > xmlschema-dev@w3.org > April 2009

How to improve XSD for a list with differently typed items + multiplicity and uniqueness constraints

From: <gvt.junk@free.fr>
Date: Tue, 21 Apr 2009 15:25:41 +0200
Message-ID: <1240320340.49edc95500026@imp.free.fr>
To: xmlschema-dev@w3.org
Hi Experts,

I was facing a problem to write a XML schema to define a <LIST> element that
obeys multiple rules (see below).

I finally reached a fully functional solution, but would like to know of an
alternate XML schema producing "better-looking" documents (with reduced nesting
levels).

Here are the rules the schema shall enforce for the <LIST> element:
1. The list allows a limited set of items;
   (say: <ITEM_A>, <ITEM_B> and <ITEM_C>)
2. The list does not allow duplicate items (same element name);
   (items <ITEM_A>, <ITEM_B> and <ITEM_C> can only occur 0 or 1 time in the
list)
3. Order of items in the list does not matter;
4. The list must contain at least 1 item (among: <ITEM_A>, <ITEM_B> and
<ITEM_C>);
5. The content of item elements is typed and "data type" is psecific to each
item;
   (e.g.: <ITEM_A> contains integer data, while <ITEM_B> contains string and
<ITEM_C> a complex type)

I succeed in writing an XML schema that enforce all these rules. A compliant
document look like this:
<LIST>
  <ITEM>
    <ITEM_B>100</ITEM_B>
  </ITEM>
  <ITEM>
    <ITEM_A>0</ITEM_A>
  </ITEM>
  <ITEM>
    <ITEM_C>aa-123</ITEM_C>
  </ITEM>
</LIST>

My question:
Is there any chance to write an alternate XML schema that enforce all these
rules, but produce "better-looking" compliant document that would look like the
following one, with reduced nesting levels?
Really, I'm not convinced it is possible with XML schema...

<LIST>
  <ITEM_B>100</ITEM_B>
  <ITEM_A>0</ITEM_A>
  <ITEM_C>aa-123</ITEM_C>
</LIST>

I can provide the XML schema I produced to anyone interrested in this
chalenge... Just let me know: gvt {dOt} junk {a}{t} fREe {DOt} fr

Thanks and regards,
Grégoire Vatry
Received on Thursday, 23 April 2009 05:35:34 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:15:11 GMT