簡體   English   中英

檢查帶有屬性值的XSD元素中的順序

[英]Check for order in XSD element with attribute value

我有以下格式的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”檢查為可選。

請幫助...預先感謝。

但是我的問題是如何首先將“名稱”屬性值“所有”的“ xyz”檢查為可選。

XSD 1.0不能做到這一點。 為復雜類型定義的語法僅按元素名稱而不是內容約束序列中的元素,並且對於具有相同名稱的兩個同級元素,元素內容的規則不能不同。

當然,您可以使用XSD 1.1斷言來做到這一點。 例如,包含形式為assert="not(xyz[@name='all']/preceding-sibling::*)"的包含abc元素級別的約束。

XSD 1.1當前僅在Saxon和Xerces中實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM