我有两种请求类型,它们在内部使用相同的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>
BIPOrder是一个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中实现这一目标。
提前感谢您的帮助。
答案 0 :(得分:3)
你不会喜欢这个,但不过:
这是根据您的元素<BIPSearchType>
的类型的XML架构,其ID限制为459。
<xs:complexType name="BIPSearchTypeType459">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id">
<xs:simpleType>
<xs:restriction base='xs:int'>
<xs:minInclusive value='459'/>
<xs:maxInclusive value='459'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
另一种类型可以用479的facet定义。
显然,构建两次上层是绝对没有吸引力的,但是face(例如min / maxInclusive)是类型定义的一部分,并且只要有两种不同的类型,否则相同的类型单个元素与这两个元素的区别也不同。
我想不出比你现在可能使用的更简单的东西。
答案 1 :(得分:2)
您应该添加XSD元素依赖项限制。 如果你只做XSD 1.0,那就不可能了。如果您愿意将XSD 1.0处理器与Schematron引擎结合使用,那么您可以这样做。
无论如何,如果您可以访问XSD 1.1处理器,那么您可以使用<xsd:assert/>
解决它,或者您可以使用类型替代。请查看here以获取更多信息。
我希望这是你正在寻找的东西:)