代码之家  ›  专栏  ›  技术社区  ›  Antek

XSD中的复杂元素验证

  •  1
  • Antek  · 技术社区  · 7 年前

    假设我有一个产品列表,每个产品有两个列表中的另外两个参数。

    一、 e.:

    产品:产品1、产品2等。

    参数1:val1a、val1b等。

    参数2:val2a、val2b等。

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

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

    i、 e。

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

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

    提前感谢!

    1 回复  |  直到 7 年前
        1
  •  0
  •   Fabian    7 年前

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

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