是否可以根据 xsd 验证 xml 数据中的 'referential integrity'?

Is it possible to verify 'referential integrity' of xml data against an xsd?

是否可以根据 xsd 验证 xml 数据中的 'referential integrity'?或者 xsd 仅仅是一个数据格式定义。

如果我有一个 xsd 定义了一个 parent/child 关系,则根据该 xsd 验证一个 xml 文档,保证该关系的先决条件数据要完整,存在吗?

例如,假设我有一个学校和一个学生。每个学生都必须有一个有效的 SCHOOL_ID。假设我有一个 SCHOOL 定义为 SCHOOL_ID 为“001”,而 STUDENT 定义为 SCHOOL_ID 为“002”,但 SCHOOL 下不存在 SCHOOL_ID。 xml 文档针对定义所需关系的 xsd 的验证是否会失败?

是的,有可能。

可以定义一个键(使用 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>

此示例 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>

错误信息(可能不同):

Error occurred while loading [], line 8 position 3 The key sequence '002' in 'PKSchools' Keyref fails to refer to some key.