是否可以验证参照完整性'对xsd的xml数据?或者xsd只是一种数据格式定义。
如果我有一个定义父/子关系的xsd,那么对xsd的xml文档的验证是否保证关系的先决条件数据是否完整?
例如,我们说我有一个学校和一个学生。每个学生必须拥有有效的SCHOOL_ID。让我们说我有一个学校定义了一个SCHOOL_ID为' 001'但学生用SCHOOL_ID定义为' 002'但是SCHOOL_ID在SCHOOL下并不存在。 xml文档对定义所需关系的xsd的验证是否会失败?
答案 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>
此示例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无法引用某些密钥。