是否可以验证参照完整性'对xsd的xml数据?

时间:2015-09-17 02:42:13

标签: xml xsd

是否可以验证参照完整性'对xsd的xml数据?或者xsd只是一种数据格式定义。

如果我有一个定义父/子关系的xsd,那么对xsd的xml文档的验证是否保证关系的先决条件数据是否完整?

例如,我们说我有一个学校和一个学生。每个学生必须拥有有效的SCHOOL_ID。让我们说我有一个学校定义了一个SCHOOL_ID为' 001'但学生用SCHOOL_ID定义为' 002'但是SCHOOL_ID在SCHOOL下并不存在。 xml文档对定义所需关系的xsd的验证是否会失败?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。

可以定义一个键(使用xsd:key或xsd:unique),然后使用xsd:keyref引用它。

<?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">
    <xsd:element name="sample">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element maxOccurs="unbounded" name="SCHOOL" type="xsd:string"/>
                <xsd:element name="STUDENT" maxOccurs="unbounded">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="SCHOOL_ID" type="xsd:string"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
        <xsd:key name="PKSchools">
            <xsd:selector xpath="SCHOOL"/>
            <xsd:field xpath="."/>
        </xsd:key>
        <xsd:keyref name="FKStudentSchool" refer="PKSchools">
            <xsd:selector xpath="STUDENT/SCHOOL_ID"/>
            <xsd:field xpath="."/>
        </xsd:keyref>
    </xsd:element>
</xsd:schema>

Schema diagram

此示例XML将无法通过验证:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<sample xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SCHOOL>001</SCHOOL>
    <STUDENT>
        <SCHOOL_ID>002</SCHOOL_ID>
    </STUDENT>
</sample>

错误消息(可能有所不同):

  

加载[]时出错,第8行位置3键序列   &#39; 002&#39;在PKSchools&#39; Keyref无法引用某些密钥。