【问题标题】:Validate multiple element and value combinations in XML Schema验证 XML Schema 中的多个元素和值组合
【发布时间】:2011-12-19 15:58:21
【问题描述】:

我正在尝试创建一个验证多个元素组合的 XML Schema 1.0。

例如,

是否可以在模式中创建可能的元素 - 值组合列表? 喜欢, 仅在

时有效
  1. A=1 && B=2

  2. A=2 && B=4

通过示例

<Full>  
  <A>1</A>
  <B>2</B>      
</Full>  

<Full>
 <A>2</A>
 <B>4</B>
</Full>

失败示例

<Full>  
  <A>2</A>
  <B>2</B>      
</Full>  

<Full>
 <A>1</A>
 <B>4</B>
</Full>  

我还不能使用 XML Schema 1.1。 有没有什么好的方法可以将这些逻辑放在一个架构中?

对不起,我只是把我的问题重新写一遍。

【问题讨论】:

    标签: xml xsd xsd-1.0


    【解决方案1】:

    这里根据您的要求设置以下内容:-

    minOccurs="0" - 用于零次或更多次

    minOccurs="1" - 至少发生一次或多次发生

    ma​​xOccurs="unbounded" :如果您想使用无限次,请设置此项

    ma​​xOccurs="1" :如果您只想设置一次,请设置此项

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="FULL">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="A" type="xs:int" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="B" type="xs:int" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="C" type="xs:int" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:schema>
    

    更新:

    假设您正在传递所有三个单独的 XML,(不是作为一个完整的 XML)

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="FULL">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="A" type="xs:int" minOccurs="1" maxOccurs="1"/>
                    <xs:element name="B" type="xs:int" minOccurs="0" maxOccurs="1"/>
                    <xs:element name="C" type="xs:int" minOccurs="0" maxOccurs="1"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:schema>
    

    另一个更新:

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="FULL">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="A" minOccurs="1" maxOccurs="1">
                        <xs:simpleType>
                            <xs:restriction base="xs:int">
                                <xs:pattern value="[1-2]"/>
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                    <xs:element name="B" minOccurs="0">
                        <xs:simpleType>
                            <xs:restriction base="xs:int">
                                <xs:pattern value="2"/>
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                    <xs:element name="C" type="xs:int" minOccurs="0"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:schema>
    

    【讨论】:

    • 对不起,我想我的问题没有正确陈述。我再次编辑了我的问题。
    • 当 XML 仅包含 2 时,您的架构将通过这种情况,我不希望它通过架构。我想知道架构是否可以设置为仅针对几个组合进行验证。像 AB、AC 和 ABC。没有别的。
    • A 是最小和最大出现次数是一次。 BC 是可选的,但最多出现一次。
    • 非常感谢您的帮助。我想知道是否可以创建一个可能的答案列表而不是计算发生的次数。因为内容中的价值也被考虑在内。我添加了一些其他案例来显示验证和失败案例。
    • 现在我也有限制值,如您的问题中所述。立即尝试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2012-12-29
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多