XML XSD 基于父元素的验证?
XML XSD validation based on parent element?
是否可以验证 XSD 文件 "conditionally" 中的 XML 节点?即根据父节点名来验证?
例如:
<?xml version="1.0"?>
<rootNode>
<parentA>
<value>Some text</value>
</parentA>
<parentB>
<value>Some text</value>
</parentB>
</rootNode>
在 parentA
中使用的 value
的验证看起来像:
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
parentB
中使用的 value
的验证会有所不同:
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="4"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
是的,即使在 XSD 1.0 中,局部声明的元素也可以根据父元素提供的上下文在类型上有所不同:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="rootNode">
<xs:complexType>
<xs:sequence>
<xs:element name="ParentA">
<xs:complexType>
<xs:sequence>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ParentB">
<xs:complexType>
<xs:sequence>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="4"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
ParentA
中的 value
元素与 ParentB
中的 value
元素具有不同的类型。
是否可以验证 XSD 文件 "conditionally" 中的 XML 节点?即根据父节点名来验证?
例如:
<?xml version="1.0"?>
<rootNode>
<parentA>
<value>Some text</value>
</parentA>
<parentB>
<value>Some text</value>
</parentB>
</rootNode>
在 parentA
中使用的 value
的验证看起来像:
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
parentB
中使用的 value
的验证会有所不同:
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="4"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
是的,即使在 XSD 1.0 中,局部声明的元素也可以根据父元素提供的上下文在类型上有所不同:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="rootNode">
<xs:complexType>
<xs:sequence>
<xs:element name="ParentA">
<xs:complexType>
<xs:sequence>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ParentB">
<xs:complexType>
<xs:sequence>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="4"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
ParentA
中的 value
元素与 ParentB
中的 value
元素具有不同的类型。