tags:

views:

52

answers:

1

Consider this XML -

<Root>
  <Foo>
    <UniqueValue>A100</UniqueValue>
  </Foo>
  <Foo>
    <UniqueValue>A101</UniqueValue>
  </Foo>
  <Foo>
    <UniqueValue>B102</UniqueValue>
  </Foo>
  <Foo>
    <UniqueValue>A101</UniqueValue> <!-- This should be an error -->
  </Foo>
  <Foo>
    <UniqueValue> A101 </UniqueValue> <!-- This should be an error but not critical for now -->
  </Foo>
</Root>

How do I restrict the simple type element <UniqueValue> such that its values are unique? Also not that I don't want to restrict to numbers.

+2  A: 

Try putting a uniqueness constraint on "Root". Note that this needs to be ont he element definition, not a type definition:

<xsd:element name="Root" type="RootType">
  <xsd:unique name="uniqueValues">
    <xsd:selector xpath="Foo"/>
    <xsd:field xpath="UniqueValue"/>
  </xsd:unique>
</xsd:element>

Depending on the parser you are using, you may have to switch on additional options to get this validated (e.g. "full schema validation", identity constraint validation, etc).

xcut