0
<xs:simpleType name="ItemCategoryEnum">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Kitchen"></xs:enumeration>
    <xs:enumeration value="Bathroom"></xs:enumeration>
  </xs:restriction>
</xs:simpleType>

「ItemCategoryEnum」の可能な列挙値と同じ数の「Category」という名前のノードを持つ必要がある要素「Inventory」を定義することは可能ですか?

したがって、上記の例では、準拠する XML は次のようになります。

<Inventory>
  <Category name="Kitchen">
    <Item></Item>
    <Item></Item>
    <Item></Item>
  </Category>
  <Category name="Bathroom">
    <Item></Item>
    <Item></Item>
    <Item></Item>
  </Category>
</Inventory> 

タイプ「ItemCategoryEnum」として「Category」の「name」属性を指定するだけでは、ここでは十分ではありません。これは、「name」属性が列挙型にリストされている以外の値を持つことができないことを確認するだけだからです。列挙値の一部が使用されていなくても問題はありません。これは、次の XML も準拠することを意味します。

<Inventory>
  <Category name="Kitchen">
    <Item></Item>
    <Item></Item>
    <Item></Item>
  </Category>
</Inventory>

ここには「バスルーム」に該当するカテゴリはありません。この事実をエラーとして捉えてほしい。

-サンドディープ

4

1 に答える 1

1

最も簡単な方法は、カテゴリ名を属性値から要素名に昇格させることです。

それができない場合は、XSD 1.1 アサーションを使用して制約をチェックできます (ただし、アサーションを型の列挙値と同期させておく必要があります)。

于 2012-10-25T19:58:25.793 に答える