XSD XML 中相同元素的定义

XSD definition for same elements in an XML

我正在尝试为具有这些内容的 XML 想出一个 XSD 复杂类型

<SimpleData name="omsId">46</SimpleData>
<SimpleData name="registrationNumber">206-TG-4</SimpleData> 
<SimpleData name="obstacleType">Antenna</SimpleData>  
<SimpleData name="signature">OEI</SimpleData>
<SimpleData name="state">A</SimpleData>
<SimpleData name="maxHeightAGL">75</SimpleData>
<SimpleData name="topElevationAMSL">787</SimpleData> 

在上面的示例中,元素是相同的,并且每个元素都具有相同名称的属性标记,但具有不同的值。

求推荐。

谢谢

您想要具有任意名称属性的复杂类型吗? 如果有,他的:

  <element name="SimpleData">
    <complexType>
      <simpleContent>
        <extension base="string">
          <attribute name="name" type="string" use="required"/>
        </extension>
      </simpleContent>
    </complexType>
  </element>

或者您希望名称仅限于您在上面使用的名称吗?如果是这样,试试这个版本:

  <element name="SimpleData">
    <complexType>
      <simpleContent>
        <extension base="string">
          <attribute name="name" type="MyDatatypes" use="required"/>
        </extension>
      </simpleContent>
    </complexType>
  </element>
  <simpleType name="MyDatatypes">
    <restriction base="string">
      <enumeration value="omsId"/>
      <enumeration value="registrationNumber"/>
      <enumeration value="obstacleType"/>
      <enumeration value="signature"/>
      <enumeration value="state"/>
      <enumeration value="maxHeightAGL"/>
      <enumeration value="topElevationAMSL"/>
    </restriction>
  </simpleType>

另外,如果您想限制每个元素的使用次数,我也不清楚您的问题?是否应该完全按照您给出的顺序使用它们中的每一个,或者上面的示例对您有帮助吗?

根据反馈添加了一个新示例,这次限制了属性,以便每个属性都完全存在。

您需要对 SimpleData 的父元素进行测试,我将其称为根,但您可以使用任何您想要的。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="SimpleData"/>
      </xs:sequence>
      <xs:assert test="count(SimpleData) = 7"/>
    </xs:complexType>
    <xs:unique name="UniqueSimpleData">
      <xs:selector xpath="SimpleData" /> 
      <xs:field xpath="@name" /> 
    </xs:unique>
  </xs:element>
  <xs:element name="SimpleData">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="name" type="MyDatatypes" use="required"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="MyDatatypes">
    <xs:restriction base="xs:string">
      <xs:enumeration value="omsId"/>
      <xs:enumeration value="registrationNumber"/>
      <xs:enumeration value="obstacleType"/>
      <xs:enumeration value="signature"/>
      <xs:enumeration value="state"/>
      <xs:enumeration value="maxHeightAGL"/>
      <xs:enumeration value="topElevationAMSL"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

有两件事是新的。 首先是断言(这仅适用于 XSD 1.1! - 请确保您的软件支持 1.1 版,否则您将收到错误消息。 断言检查您是否恰好存在 7 个 SimpleData 元素(每个属性一个)。 第二个新东西是 unique 约束,这确保每个元素属性组合只使用一个。

仅通过独特检查,您将不允许重复输入,但有可能从您的列表中省略一个,并且只有 6 个存在,因此您确实需要这两个检查。

希望这能解决您的问题。