Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In een XSD-schema (XML Schema Definition Language) kunt u beperkingen (unieke, sleutel- en keyref-beperkingen) en relaties opgeven (met behulp van de annotatie msdata:Relationship ). In dit onderwerp wordt uitgelegd hoe de beperkingen en relaties die zijn opgegeven in een XML-schema, worden geïnterpreteerd om het DataSette genereren.
In het algemeen geeft u in een XML-schema de annotatie msdata:Relationship op als u alleen relaties wilt genereren in de DataSet. Zie DataSet Relations genereren vanuit XML-schema (XSD) voor meer informatie. U geeft beperkingen (uniek, sleutel en keyref) op als u beperkingen wilt genereren in de DataSet. Houd er rekening mee dat de sleutel- en keyref-beperkingen ook worden gebruikt om relaties te genereren, zoals verderop in dit onderwerp wordt uitgelegd.
Een relatie genereren op basis van sleutel- en keyref-beperkingen
In plaats van de annotatie msdata:Relationship op te geven, kunt u sleutel- en sleutelrefbeperkingen opgeven, die worden gebruikt tijdens het toewijzingsproces van het XML-schema om niet alleen de beperkingen maar ook de relatie in de DataSet te genereren. Als u echter opgeeft msdata:ConstraintOnly="true" in het keyref-element , bevat de DataSet alleen de beperkingen en wordt de relatie niet opgenomen.
In het volgende voorbeeld ziet u een XML-schema met Order - en OrderDetail-elementen , die niet zijn genest. In het schema worden ook sleutel- en keyref-beperkingen opgegeven.
<xs:schema id="MyDataSet" xmlns=""
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
  
 <xs:element name="MyDataSet" msdata:IsDataSet="true">  
  <xs:complexType>  
    <xs:choice maxOccurs="unbounded">  
      <xs:element name="OrderDetail">  
       <xs:complexType>  
         <xs:sequence>  
           <xs:element name="OrderNo" type="xs:integer" />  
           <xs:element name="ItemNo" type="xs:string" />  
         </xs:sequence>  
       </xs:complexType>  
      </xs:element>  
      <xs:element name="Order">  
        <xs:complexType>  
          <xs:sequence>  
            <xs:element name="OrderNumber" type="xs:integer" />  
            <xs:element name="EmpNumber" type="xs:integer" />  
          </xs:sequence>  
        </xs:complexType>  
      </xs:element>  
    </xs:choice>  
  </xs:complexType>  
  
  <xs:key name="OrderNumberKey"  >  
    <xs:selector xpath=".//Order" />  
    <xs:field xpath="OrderNumber" />  
  </xs:key>  
  
  <xs:keyref name="OrderNoRef" refer="OrderNumberKey">  
    <xs:selector xpath=".//OrderDetail" />  
    <xs:field xpath="OrderNo" />  
  </xs:keyref>  
 </xs:element>  
</xs:schema>  
De DataSet die wordt gegenereerd tijdens het toewijzingsproces van het XML-schema, bevat de tabellen Order en OrderDetail . Daarnaast bevat de DataSet relaties en beperkingen. In het volgende voorbeeld ziet u deze relaties en beperkingen. Houd er rekening mee dat het schema de annotatie msdata:Relationship niet opgeeft; In plaats daarvan worden de sleutel- en keyref-beperkingen gebruikt om de relatie te genereren.
....ConstraintName: OrderNumberKey  
....Type: UniqueConstraint  
....Table: Order  
....Columns: OrderNumber  
....IsPrimaryKey: False  
  
....ConstraintName: OrderNoRef  
....Type: ForeignKeyConstraint  
....Table: OrderDetail  
....Columns: OrderNo  
....RelatedTable: Order  
....RelatedColumns: OrderNumber  
  
..RelationName: OrderNoRef  
..ParentTable: Order  
..ParentColumns: OrderNumber  
..ChildTable: OrderDetail  
..ChildColumns: OrderNo  
..ParentKeyConstraint: OrderNumberKey  
..ChildKeyConstraint: OrderNoRef  
..Nested: False  
In het vorige schemavoorbeeld zijn de elementen Order en OrderDetail niet genest. In het volgende schema-voorbeeld zijn deze elementen genesteld. Er wordt echter geen msdata: Relationship-aantekening opgegeven; daarom wordt ervan uitgegaan dat er een impliciete relatie wordt gebruikt. Voor meer informatie, zie Impliciete relaties tussen geneste schema-elementen. In het schema worden ook sleutel- en keyref-beperkingen opgegeven.
<xs:schema id="MyDataSet" xmlns=""
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
  
 <xs:element name="MyDataSet" msdata:IsDataSet="true">  
  <xs:complexType>  
    <xs:choice maxOccurs="unbounded">  
  
      <xs:element name="Order">  
        <xs:complexType>  
          <xs:sequence>  
            <xs:element name="OrderNumber" type="xs:integer" />  
            <xs:element name="EmpNumber" type="xs:integer" />  
  
            <xs:element name="OrderDetail">  
              <xs:complexType>  
                <xs:sequence>  
                  <xs:element name="OrderNo" type="xs:integer" />  
                  <xs:element name="ItemNo" type="xs:string" />  
                </xs:sequence>  
              </xs:complexType>  
            </xs:element>  
          </xs:sequence>  
        </xs:complexType>  
      </xs:element>  
    </xs:choice>  
  </xs:complexType>  
  
  <xs:key name="OrderNumberKey"  >  
    <xs:selector xpath=".//Order" />  
    <xs:field xpath="OrderNumber" />  
  </xs:key>  
  
  <xs:keyref name="OrderNoRef" refer="OrderNumberKey">  
    <xs:selector xpath=".//OrderDetail" />  
    <xs:field xpath="OrderNo" />  
  </xs:keyref>  
 </xs:element>  
</xs:schema>  
De gegevensset die het gevolg is van het xml-schematoewijzingsproces bevat twee tabellen:
Order(OrderNumber, EmpNumber, Order_Id)  
OrderDetail(OrderNumber, ItemNumber, Order_Id)  
De DataSet bevat ook de twee relaties (één op basis van de annotatie msdata:relationship en de andere op basis van de beperkingen van de sleutel en keyref) en verschillende beperkingen. In het volgende voorbeeld ziet u de relaties en beperkingen.
..RelationName: Order_OrderDetail  
..ParentTable: Order  
..ParentColumns: Order_Id  
..ChildTable: OrderDetail  
..ChildColumns: Order_Id  
..ParentKeyConstraint: Constraint1  
..ChildKeyConstraint: Order_OrderDetail  
..Nested: True  
  
..RelationName: OrderNoRef  
..ParentTable: Order  
..ParentColumns: OrderNumber  
..ChildTable: OrderDetail  
..ChildColumns: OrderNo  
..ParentKeyConstraint: OrderNumberKey  
..ChildKeyConstraint: OrderNoRef  
..Nested: False  
  
..ConstraintName: OrderNumberKey  
..Type: UniqueConstraint  
..Table: Order  
..Columns: OrderNumber  
..IsPrimaryKey: False  
  
..ConstraintName: Constraint1  
..Type: UniqueConstraint  
..Table: Order  
..Columns: Order_Id  
..IsPrimaryKey: True  
  
..ConstraintName: Order_OrderDetail  
..Type: ForeignKeyConstraint  
..Table: OrderDetail  
..Columns: Order_Id  
..RelatedTable: Order  
..RelatedColumns: Order_Id  
  
..ConstraintName: OrderNoRef  
..Type: ForeignKeyConstraint  
..Table: OrderDetail  
..Columns: OrderNo  
..RelatedTable: Order  
..RelatedColumns: OrderNumber  
Als een keyref-beperking die verwijst naar een geneste tabel de annotatie msdata:IsNested="true" bevat, maakt de DataSet één geneste relatie die is gebaseerd op de keyref-beperking en de gerelateerde unieke/sleutelbeperking.