我可以用XSD验证“组合”吗?

时间:2013-05-10 21:25:08

标签: xml xsd xsd-validation

在以下情形中:

<apples>
  <isred>1</isred>
  <color>red</color>
</apples>

有没有办法对isred元素的验证设置限制,以便isred = 1 color red必须{{1}}?

编辑:XSD是这里唯一的选择。 RelaxNG和Schematron不可用。

2 个答案:

答案 0 :(得分:1)

可能是使用XML架构1.1 assertions。没有使用它,规范太复杂,无法做出快速决定。

答案 1 :(得分:1)

至于@四十二点,这是一个满足您要求的XSD 1.1的例子;开箱即用的XSD 1.0无法满足您的需求。

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xerces="http://xerces.apache.org">
    <xsd:element name="apples">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="isred" type="xsd:unsignedByte"/>
                <xsd:element name="color" type="xsd:string"/>
            </xsd:sequence>
            <xsd:assert test="(isred eq 1 and color eq 'red')" xerces:message="If isred, then color must be red..."/>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

无效示例将显示为:

cvc-assertion.failure: Assertion failed for schema type '#anonymous'. If isred, then color must be red...