0

次の形式のxmlがあります

<abc>
  <xyz name="all">
    <last a="1" b="2"></last>
    <last a="1" b="2"></last>
  </xyz>
  <xyz name="el">
    <last a="1" b="2"></last>
    <last a="1" b="2"></last>
  </xyz>
  <xyz name="els">
    <last a="1" b="2"></last>
    <last a="1" b="2"></last>
  </xyz>
</abc>

このために、私はこのようなxsdを書きました

<xsd:element name="abc" type="abcType" />
  <xsd:complexType name="abcType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" name="xyz" type="xyzType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="xyzType">
    <xsd:sequence>
      -----
    </xsd:sequence>
    <xsd:attribute name="name" type="xsdLocal:nameType" use="required"/>
  </xsd:complexType>
  <xsd:simpleType name="nameType">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="ALL|[a-z]*"/>
    </xsd:restriction>
 </xsd:simpleType>

しかし、私の質問は、「xyz」を「name」属性値「all」で常に最初にオプションでチェックする方法です。

助けてください...よろしくお願いします。

4

1 に答える 1

1

しかし、私の質問は、「xyz」を「name」属性値「all」で常に最初にオプションでチェックする方法です。

XSD 1.0 ではこれを行うことはできません。複合型に対して定義された文法は、シーケンス内の要素を、コンテンツではなく要素名によってのみ制約します。要素のコンテンツの規則は、同じ名前を持つ 2 つの兄弟要素で異なることはできません。

もちろん、XSD 1.1 アサーションを使用して実行できます。たとえば、フォームの含まれる abc 要素のレベルでの制約assert="not(xyz[@name='all']/preceding-sibling::*)"です。

XSD 1.1 は現在、Saxon と Xerces でのみ実装されています。

于 2013-09-19T11:32:40.513 に答える