【问题标题】:Complex element validation in XSDXSD 中的复杂元素验证
【发布时间】:2018-09-05 10:13:12
【问题描述】:

假设我有一个产品列表,每个产品都有来自两个列表的 2 个附加参数。

即:

产品:product1、product2等

param1:val1a、val1b 等

param2:val2a、val2b 等

在我的 XML 中,我需要以下条目:

<entry prod="product:element_from_param1:element_from_param1">

<entry prod="product2:val1b:val2a">

是否可以在 XSD 中验证类似的内容?

提前致谢!

【问题讨论】:

    标签: xml xsd xml-parsing xsd-validation


    【解决方案1】:

    是的,您可以将列表编码为正则表达式:

    <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>
    

    【讨论】:

    • 感谢您的回复。不幸的是,我无法更改架构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多