【发布时间】:2014-07-31 19:58:03
【问题描述】:
我想问一下这是否可行,如果可以,如何实现:
例如,如果我在 XML 模式定义中有一个带有 complexType 的元素定义,如下所示:
<xsd:element name="tag" type="tag"/>
<xs:complexType name="tag">
<xs:choice maxOccurs="unbounded">
<xs:element name="subtag" type="subtag"/>
<xs:element name="another_subtag" type="another_subtag"/>
<xs:element name="another_subtag_2" type="another_subtag_2"/>
</xs:choice>
<xs:attribute name="type" type="attr_type"/>
<xs:attribute name="an_attr" type="an_attr"/>
<xs:attribute name="another_attr" type="another_attr"/>
</xs:complexType name="attr_type">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="type_1"/>
<xsd:enumeration value="type_2"/>
<xsd:enumeration value="type_3"/>
</xsd:restriction>
<xsd:simpleType/>
1) 如果标签元素的属性“attr_type”设置为“type_2”,是否可以仅将标签元素的属性“an_attr”设为必需?
还有一个问题: 2)是否有可能使 complexType 'tag' 包含 不同 子元素再次基于例如关于“attr_type”的值?例如:
<tag attr_type="type_1">
只有这个孩子:
<xs:element name="subtag" type="subtag"/>
对于:
<tag attr_type="type_2">
只有孩子:
<xs:element name="another_subtag" type="another_subtag"/>
OR
<xs:element name="another_subtag_2" type="another_subtag_2"/>
?
如果可能,我该如何实现?
感谢关注!
编辑:正如我在这里看到的 -> https://blogs.oracle.com/rammenon/entry/xml_schema_11_what_you_need_to 在示例编号 22 中(在条件类型分配中),是否可以以这种方式完成?
<!--inline alternative type definitions -->
<element name="TimeTravel" type="TravelType">
<alternative test="@direction='Future'">
<complexType>
<complexContent>
<restriction base="TravelType"
....
<!-- some past travel related elements go here -->
</complexType>
</alternative>
<alternative test="@direction='Past'">
<complexType>
<complexContent>
<restriction base="TravelType"
....
<!-- some future travel related elements go here -->
</complexType>
</alternative>
</element>
OR
<!--Named alternative type definitions -->
<element name="TimeTravel" type="TravelType">
<alternative test="@direction='Future' type="FutureTravelType"/>
<alternative test="@direction='Past' type="PastTravelType"/>
</element>
据我了解,TimeTravel 元素可以根据方向属性值具有不同的复杂类型,对吗?但它说必须使用 XSD 1.1。我可以在我的 XML Schema 中使用这个规则吗?
【问题讨论】:
-
所以我想我的生活很复杂,对吗?
-
也许但不要难过。从我在上一条评论中发布的链接可以看出,我们中的许多人都希望 XML Schema 能够以这种方式验证元素和属性。
-
是的,你是对的(如果我理解正确的话)。请记住,确定所有这些的属性(示例中的“方向”属性)必须是同一元素 TimeTravel 的属性。
-
一如既往地保留它。不需要用版本标记它。
标签: xml xsd xsd-validation