XSD 中的复杂元素验证
Complex element validation in XSD
假设我有一个产品列表,每个产品都有来自两个列表的 2 个附加参数。
即:
产品:产品1、产品2等
参数 1:val1a、val1b 等
参数 2:val2a、val2b 等
在我的 XML 中,我需要像这样的条目:
<entry prod="product:element_from_param1:element_from_param1">
即
<entry prod="product2:val1b:val2a">
是否可以在 XSD 中验证类似的内容?
提前致谢!
是的,您可以将列表编码为正则表达式:
<xs:element name="entry">
<xs:complexType>
<xs:attribute name="prod">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="(product1|product2):(val1a|val1b):(val2a|val2b)"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
但是,如果可能的话,我建议您更改语法并将 "prod" 属性分解为适当的 XML 结构(例如,单独的子元素或属性)。
例如:
<xs:element name="entry">
<xs:complexType>
<xs:sequence>
<xs:element name="product">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="product1"/>
<xs:enumeration value="product2"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="val1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="val1a"/>
<xs:enumeration value="val1b"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="val2">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="val2a"/>
<xs:enumeration value="val2b"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
假设我有一个产品列表,每个产品都有来自两个列表的 2 个附加参数。
即:
产品:产品1、产品2等
参数 1:val1a、val1b 等
参数 2:val2a、val2b 等
在我的 XML 中,我需要像这样的条目:
<entry prod="product:element_from_param1:element_from_param1">
即
<entry prod="product2:val1b:val2a">
是否可以在 XSD 中验证类似的内容?
提前致谢!
是的,您可以将列表编码为正则表达式:
<xs:element name="entry">
<xs:complexType>
<xs:attribute name="prod">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="(product1|product2):(val1a|val1b):(val2a|val2b)"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
但是,如果可能的话,我建议您更改语法并将 "prod" 属性分解为适当的 XML 结构(例如,单独的子元素或属性)。
例如:
<xs:element name="entry">
<xs:complexType>
<xs:sequence>
<xs:element name="product">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="product1"/>
<xs:enumeration value="product2"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="val1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="val1a"/>
<xs:enumeration value="val1b"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="val2">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="val2a"/>
<xs:enumeration value="val2b"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>