我正在尝试为具有这些内容的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>
在上面的示例中,元素是相同的,每个元素都具有相同的名称属性标记,具有不同的值。
请建议。
由于
答案 0 :(得分:1)
您想要一个具有任何名称属性的复杂类型吗? 如果是这样,他的怎么样:
<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的父元素进行测试,我把它称为root,但你可以使用你想要的任何东西。
<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元素(每个属性一个)。 第二个新事物是唯一约束,这确保每个元素属性组合仅使用一个。
只有唯一的检查,您将不允许双重输入但是可以省略列表中的一个,并且只有6个存在,所以您确实需要这两个检查。
希望这能解决你的问题。