,如果你认为上面的参照完整性你可以做到这一点。人们可以很容易地说有多余的信息,但我也看到它是由于模型重用。
这是你的XML是什么样子:
这就是XSD会再看看这样的:
和源:
<?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="pupil">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="pupilid" type="xsd:unsignedInt"/>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="assessment">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="assessmentid" type="xsd:unsignedByte"/>
<xsd:element name="pupilid" type="xsd:unsignedInt"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:key name="PK">
<xsd:selector xpath="pupilid"/>
<xsd:field xpath="."/>
</xsd:key>
<xsd:keyref name="FK" refer="PK">
<xsd:selector xpath="assessment/pupilid"/>
<xsd:field xpath="."/>
</xsd:keyref>
</xsd:element>
</xsd:schema>
你的第一个XML会通过验证,而第二个可能产生:
Error occurred while loading [], line 8 position 3 The key sequence '666' in Keyref fails to refer to some key. xsd-restrict-content-to-be-equal-to-grandparent-if-it-is-present.xml is XSD 1.0 invalid.
只要这些类型的约束可以模拟类似意味着什么参照完整性数据库的人,那么键/唯一和keyref可以提供帮助。
对于更一般的共约束条件,除了XSD 1.0之外,您必须移至XSD 1.1或使用Schematron。
感谢这工作 –