8

以下のXSDスキーマファイルに主キーと外部キーを挿入しようとしています:-

主キーは StudentID で、外部キーは courseID、AddressID、GradeID です。

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Student">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Title" type="xs:string"/>
      <xs:element name="FirstName" type="xs:string"/>
      <xs:element name="LastName" type="xs:string"/>
      <xs:element name="Dateborn"  type="xs:date"/>
      <xs:element name="Gender"  type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>

ただし、上記のコードは私のセットアップでは機能しません。問題の追跡を手伝ってください。

4

1 に答える 1

12

一般に、質問には詳細を記載する必要があります...したがって、他に何をどのように定義する必要があるかを理解するには、これで十分です。主キー/外部キーを定義する方法を理解するために必要なことを、生徒と住所の関係を想定して説明します。

最初に、これらの制約が当てはまるコンテキストを定義する必要があります。変更した XSD では、それを「World」と呼びます。

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="World">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Student" maxOccurs="unbounded"/>   
                <xs:element ref="Address" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>          
        </xs:complexType>
        <xs:key name="PKStudents">
            <xs:selector xpath="Student/StudentID"/>
            <xs:field xpath="."/>
        </xs:key>
        <xs:key name="PKAddresses">
            <xs:selector xpath="Address/AddressID"/>
            <xs:field xpath="."/>
        </xs:key>
        <xs:keyref name="FKStudentToAddress" refer="PKAddresses">
            <xs:selector xpath="Student/AddressID"/>
            <xs:field xpath="."/>
        </xs:keyref>
    </xs:element>
    <xs:element name="Student">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Title" type="xs:string"/>
                <xs:element name="FirstName" type="xs:string"/>
                <xs:element name="LastName" type="xs:string"/>
                <xs:element name="Dateborn" type="xs:date"/>
                <xs:element name="Gender" type="xs:string"/>
                <xs:element name="StudentID" type="xs:string"/>
                <xs:element name="AddressID" type="xs:string" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Address">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="AddressID" type="xs:string"/>
                <xs:element name="Street" type="xs:string"/>
                <xs:element name="City" type="xs:string"/>
                <xs:element name="Province" type="xs:string" minOccurs="0"/>
                <xs:element name="Country" type="xs:date" minOccurs="0"/>
                <xs:element name="PostalCode" type="xs:string" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

次に、このような XML は、StudentID フィールドと AddressID フィールドの値をどのように処理するかに応じて、合格または不合格になります。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<World xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Student>
        <Title>Title1</Title>
        <FirstName>FirstName1</FirstName>
        <LastName>LastName1</LastName>
        <Dateborn>1900-01-01</Dateborn>
        <Gender>Gender1</Gender>
        <StudentID>StudentID1</StudentID>
        <AddressID>AddressID1</AddressID>
    </Student>
    <Student>
        <Title>Title1</Title>
        <FirstName>FirstName1</FirstName>
        <LastName>LastName1</LastName>
        <Dateborn>1900-01-01</Dateborn>
        <Gender>Gender1</Gender>
        <StudentID>StudentID2</StudentID>
        <AddressID>AddressID1</AddressID>
    </Student>
    <Address>
        <AddressID>AddressID1</AddressID>
        <Street>Street1</Street>
        <City>City1</City>
        <Province>Province1</Province>
        <Country>1900-01-01</Country>
        <PostalCode>PostalCode1</PostalCode>
    </Address>
    <Address>
        <AddressID>AddressID2</AddressID>
        <Street>Street1</Street>
        <City>City1</City>
        <Province>Province1</Province>
        <Country>1900-01-01</Country>
        <PostalCode>PostalCode1</PostalCode>
    </Address>
</World>

ソリューションを完成させるには、「世界」でCourseGradeの「エンティティ」を定義し、Student /* Addressxs:key * のように for each を定義し、 CourseIDGradeID属性を必要なエンティティに追加する必要があります。最後に、上記のようにEntity to GradeおよびEntity to Courseのキー参照を定義します。

于 2013-04-03T13:50:31.807 に答える