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 个存在,因此您确实需要这两个检查。
希望这能解决您的问题。
我正在尝试为具有这些内容的 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 个存在,因此您确实需要这两个检查。
希望这能解决您的问题。