1

XSD を使用して、XML 要素のコンテンツをその祖父母と等しくなるように制限できますか? これ検証に合格するように:

<pupil>
<pupilid>342424</pupilid>
<name>John Smith</name>
<assessment>
<assessmentid>1</assessmentid>
<pupilid>342424</pupilid>
</assessment>
</pupil>

そして、これは検証に失敗します:

<pupil>
<pupilid>342424</pupilid>
<name>John Smith</name>
<assessment>
<assessmentid>1</assessmentid>
<pupilid>666</pupilid>
</assessment>
</pupil>
4

1 に答える 1

2

上記を参照整合性と見なす場合は、それを行うことができます。冗長な情報があると簡単に言えますが、モデルの再利用によるものも見られました。

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 は検証に合格しますが、2 番目の 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.

これらの種類の制約が、データベース関係者にとって参照整合性が意味するものと同様にモデル化できる限り、キー/一意とキー参照が役立ちます。

より一般的な相互制約については、XSD 1.1 に移行するか、XSD 1.0 に加えて Schematron を使用する必要があります。

于 2013-09-24T13:22:10.880 に答える