0

假设我有以下 xml:

<root>
    <node attr1="1" />
    <node attr1="1" attr2="2"/>
    <node attr1="1" attr3="3"/>
</root>

atrr1 在除根以外的所有节点上都是必需的,但其他属性可以形成组合。唯一允许的组合是: 1. attr1 本身 2. attr1, attr2 3. attr1, attr3

attr2 和 attr3 不能同时出现。

我一直在尝试使用 xsd 来尝试并有条件地评估属性的组合,但这似乎几乎是不可能的,因为我无法将 xsd 文件中的多个元素命名为 node。有没有办法解决这个问题,甚至有条件地检查属性组合?如果没有,有没有人看过解决方法?

4

1 回答 1

1

您只能告诉它 attr1 是必需的,而 attr2 和 attr3 是可选的。我无法知道在 XSD 模式(对于 XML 1.0)中定义不能同时拥有 attr2 和 attr3。之后您必须进行一些验证才能检查该组合。

<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="node">
          <xs:complexType>
            <xs:attribute name="attr1" type="xs:int" use="required" />
            <xs:attribute name="attr2" type="xs:int" use="optional" />
            <xs:attribute name="attr3" type="xs:int" use="optional" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

编辑:我遇到了另一个线程,其中有人想要像您一样进行一些复杂的验证,并且在其中一个评论中提供了一个链接,还有一篇关于共现约束的文章,这是您所追求的,并且是为 XML 1.1 版实现的。我还阅读了这篇文章 XML Schema 1.1, Part 2: An Introduction to XML Schema 1.1,详细介绍了这篇文章。不幸的是,XML 1.1 似乎没有得到广泛的支持。

于 2013-10-30T21:46:45.060 回答