2013-04-02 6 views
4

Я пытаюсь вставить первичные и внешние ключи в XSD файл схемы ниже: -Первичные и внешние ключи в XML-схеме

Первичный ключ 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> 

Однако выше код не работает в моей установке, пожалуйста, помогите мне в отслеживании вопрос,

ответ

8

В общем, вы должны были бы поместить больше деталей в вопросе ... Так что это должно быть достаточно, чтобы понять, что еще вам нужно определить, и как. Я займусь тем, что необходимо, чтобы понять, как определить первичный ключ/внешний ключ, проиллюстрировав предполагаемое отношение ученика/адреса.

Прежде всего вам нужно определить контекст, в котором эти ограничения сохраняются. В моем модифицированном XSD я называю это «Мир».

<?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> 

Чтобы закончить решение, вам нужно будет определить курс и Оценка «сущности» в вашем «мире», определить xs:key для каждого, похожий на Student/* Адрес *, затем добавить CourseID и GradeID атрибуты сущностей, которые нуждаются в них, и, наконец, определяют KeyRef, как указано выше, для Entity в Оценка и Организация до Курс.