【发布时间】:2014-08-07 17:59:21
【问题描述】:
我有两种请求类型,它们在内部使用相同的 compleType 元素。两个请求之间的区别因素是元素属性值(除了请求包装器)。 需要在 XSD 中添加此条件以将其用作架构验证的一部分。
这是示例元素声明
<xsd:element name="searchRequest" type="searchRequest_Type"/>
<xsd:complexType name="searchRequest_Type">
<xsd:sequence>
<xsd:element ref="bip:BIPOrder" minOccurs="1">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="advanceSearchRequest" type="advanceSearchRequest_Type"/>
<xsd:complexType name="advanceSearchRequest_Type">
<xsd:sequence>
<xsd:element ref="bip:BIPOrder" minOccurs="1">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
BIOrder 是一个 complexType,其中包含许多其他嵌套的 ComplexType 元素。 complexType 之一中的 Element 属性值之一是区分上述两个请求的因素。
喜欢
<myap:searchRequest>
<bip:BIPOrder>
<....>
<....>
<BIPSearchType id="459">Normal Search</BIPSearchType>
<....>
</bip:BIPOrder>
</myap:searchRequest>
<myap:advanceSearchRequest>
<bip:BIPOrder>
<....>
<....>
<BIPSearchType id="479">Advanced Search</BIPSearchType>
<...>
</bip:BIPOrder>
</myap:advanceSearchRequest>
我希望在我的 XSD 中添加对 BIPSearchType“id”属性值的限制,以便在验证请求 XML 时它也应该满足这个条件。
目前我能够通过 XSD 验证整个请求,但这种情况除外。在模式验证以检查正确的“BIPSearchType”“id”与请求一起发送后,我明确验证了此条件。
请告知我如何在我的 XSD 中实现这一点。
提前感谢您的帮助。
【问题讨论】:
-
您说该类型的两种用途仅通过
id属性来区分,但您的描述另有说明:它们还通过bip:BIOrder 的父元素的元素名称来区分。 (短版:你违反了 DRY 原则,宇宙会惩罚你。) -
我只提到了类型。尽管两个请求都遵循具有相同根元素(不包括请求包装器)的相同模式,但它们还有许多其他元素不同。但我的意图是根据类型 id 对它们进行架构验证,我目前正在明确地这样做。
-
你解决了这个问题吗?如果是,你是怎么解决的?
-
还没有。仍在寻找解决方案。
标签: xml validation xslt jaxb xsd