【问题标题】:how to put XSD restriction on a group of attributes如何对一组属性设置 XSD 限制
【发布时间】:2018-08-20 13:17:53
【问题描述】:

我有以下 XSD。

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="a">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="b">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element maxOccurs="unbounded" name="c">
                            <xs:complexType>
                                <xs:attribute name="id" use="required" >
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:enumeration value="1"/>
                                            <xs:enumeration value="2"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:attribute>
                                <xs:attribute name="name" use="required" >
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:enumeration value="AA"/>
                                            <xs:enumeration value="BB"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:attribute>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

这对

有效
<?xml version="1.0" encoding="UTF-8" ?>
<a>
    <b>
        <c id="1" name="AA"/>
        <c id="2" name="BB"/>
    </b>
</a>

但我想编写一个模式文档来限制所有属性组合中的值。为进一步说明,上述 XSD 也适用于以下 XML。

<?xml version="1.0" encoding="UTF-8" ?>
<a>
    <b>
        <c id="2" name="AA"/>
        <c id="2" name="BB"/>
    </b>
</a>

<?xml version="1.0" encoding="UTF-8" ?>
<a>
    <b>
        <c id="1" name="AA"/>
        <c id="1" name="BB"/>
    </b>
</a>

<?xml version="1.0" encoding="UTF-8" ?>
<a>
    <b>
        <c id="1" name="BB"/>
        <c id="2" name="BB"/>
    </b>
</a>

但我想将其限制为组值,例如, 它应该对第一个示例有效,但不适用于任何其他 xml。有什么办法吗?

<?xml version="1.0" encoding="UTF-8" ?>
<a>
    <b>
        <c id="1" name="AA"/>
        <c id="2" name="BB"/>
    </b>
</a>

【问题讨论】:

    标签: xml xsd xml-parsing xsd-validation xerces


    【解决方案1】:

    我不太擅长从少数例子中得出一般规则。但一般原则是,要为属性组合编写规则,您需要 XSD 1.1 断言。有几个模式处理器支持 XSD 1.1 和断言,但也有一些不支持的,因此您必须做出决定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2019-06-13
      • 2016-10-10
      相关资源
      最近更新 更多