2015-09-17 95 views
0

是否可以通过xsd验证xml数据的“参照完整性”?或者是一个xsd仅仅是一个数据格式定义。是否可以通过xsd验证xml数据的“参照完整性”?

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

例如,假设我有一个学校和一个学生。每个学生必须有一个有效的SCHOOL_ID。比方说,我有一个学校定义了SCHOOL_ID为'001',但学校定义了SCHOOL_ID'002',但SCHOOL_ID在SCHOOL下不存在。该xml文档是否会针对定义所需关系的xsd进行验证失败?

+0

你可以编辑你的问题,并显示实际的XML而不是使用问题的口头描述? –

+0

有些问题没有格式化'行话'恕我直言,更清晰。 – Ichorus

回答

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“PKSchools”Ke​​yref中的键序列 '002'未能引用某个键。