Question

The xml looks like:

<Details>
  <CNumber>1</CNumber>          
</Details>
<Details>
  <CNumber>2</CNumber>
</Details>

Current XSD looks like:

<xsd:element name="Details" minOccurs="0" maxOccurs="8">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="CNumber" minOccurs="1" maxOccurs="1">
        <xsd:simpleType>
          <xsd:restriction base="xsd:integer"> 
            <xsd:pattern value="[1-8]{1}"/> 
          </xsd:restriction> 
        </xsd:simpleType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

Now, we need to ensure that CNumber can have only unique values between 1 and 8. The same number can't be repeated. Kindly advise how to use unique here. ?

Was it helpful?

Solution

Here is a sample schema based on your snippet that enforces unique on CNumber

<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Customer">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Details" minOccurs="0" maxOccurs="8">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="CNumber" minOccurs="1" maxOccurs="1">
                <xsd:simpleType>
                  <xsd:restriction base="xsd:integer">
                    <xsd:pattern value="[1-8]{1}"/>
                  </xsd:restriction>
                </xsd:simpleType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:unique name="uniqueCNumber">
      <xsd:selector xpath="./Details" />
      <xsd:field xpath="CNumber" />
    </xsd:unique>
  </xsd:element>
</xsd:schema>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top