0

XMLスキーマで、リストであり、リスト内の各アイテムが1回しか表示されないという制限がある単純なタイプを表現することは可能ですか? 別の言い方をすれば、XML スキーマで「セット」単純型を定義することは可能ですか?

たとえば、次のスキーマを使用します。

<xs:schema version="1.1" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:simpleType name="item">
    <xs:restriction base="xs:token">
      <xs:enumeration value="A"/>
      <xs:enumeration value="B"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="itemSet">
    <xs:list itemType="item"/>
  </xs:simpleType>

  <xs:element name="root">
    <xs:complexType>
      <xs:attribute name="set" type="itemSet"/>
    </xs:complexType>
  </xs:element>

</xs:schema>

このドキュメントは以下を検証します。

<root set="A B"/>

ただし、このドキュメントも同様です。これは、繰り返されるため、検証に失敗したいと考えています。B

<root set="A B B"/>

これは XML Schema だけでは不可能だと思いますが、よくわからないので確認を求めています。

4

2 に答える 2

3

XSD 1.0 では不可能ですが、XSD 1.1 では非常に簡単です。

<xs:simpleType name="uniqueList">
  <xs:restriction base="xs:NMTOKENS">
    <xs:assert test="count($value) = count(distinct-values($value))"/>
  </xs:restriction>
</xs:simpleType>
于 2013-01-09T09:05:19.247 に答える