Condividi tramite


Generazione di relazioni tra dataset da XML Schema (XSD)

In un tipo DataSet è possibile stabilire un'associazione tra due o più colonne creando una relazione padre-figlio. Una relazione DataSet può essere rappresentata all'interno di uno schema XSD (XML Schema Definition Language) in tre modi diversi:

  • Specificare tipi complessi annidati.

  • Usare l'annotazione msdata:Relationship.

  • Specificare un xs:keyref senza l'annotazione msdata:ConstraintOnly.

Tipi complessi annidati

Le definizioni di tipi complessi annidati in uno schema indicano le relazioni padre-figlio degli elementi. Nel seguente frammento di XML Schema viene mostrato che OrderDetail è un elemento figlio dell'elemento Order.

<xs:element name="Order">  
  <xs:complexType>  
     <xs:sequence>
       <xs:element name="OrderDetail" />  
           <xs:complexType>
           </xs:complexType>  
     </xs:sequence>  
  </xs:complexType>  
</xs:element>  

Il processo di mapping di XML Schema consente di creare nel DataSet tabelle corrispondenti ai tipi complessi annidati dello schema e di creare colonne aggiuntive, usate come colonne padre-figlio per le tabelle generate. Notare che tali colonne padre-figlio consentono di specificare relazioni, il che non equivale a specificare vincoli di chiave primaria/chiave esterna.

Annotazione msdata:Relationship

L'annotazione msdata:Relationship consente di specificare esplicitamente relazioni padre-figlio tra gli elementi non annidati di uno schema. Nell'esempio seguente viene mostrata la struttura dell'elemento Relationship.

<msdata:Relationship name="CustOrderRelationship"
msdata:parent=""
msdata:child=""
msdata:parentkey=""
msdata:childkey="" />  

Gli attributi dell'annotazione msdata:Relationship consentono di identificare gli elementi coinvolti in una relazione padre-figlio, oltre agli elementi parentkey e childkey e gli attributi coinvolti nella relazione. Queste informazioni vengono usate dal processo di mapping per generare tabelle nel DataSet e creare relazioni di chiave primaria/chiave esterna tra tali tabelle.

Ad esempio, il seguente frammento di schema specifica gli elementi Order e OrderDetail allo stesso livello (non annidati). Lo schema specifica un'annotazione msdata:Relationship, che a sua volta specifica la relazione padre-figlio tra i due elementi. In questo caso è necessario specificare una relazione esplicita mediante l'annotazione msdata:Relationship.

 <xs:element name="MyDataSet" msdata:IsDataSet="true">  
  <xs:complexType>  
    <xs:choice maxOccurs="unbounded">  
        <xs:element name="OrderDetail">  
          <xs:complexType>  
  
          </xs:complexType>  
       </xs:element>  
       <xs:element name="Order">  
          <xs:complexType>  
  
          </xs:complexType>  
       </xs:element>  
    </xs:choice>  
  </xs:complexType>  
</xs:element>  
   <xs:annotation>  
     <xs:appinfo>  
       <msdata:Relationship name="OrdOrdDetailRelation"  
          msdata:parent="Order"  
          msdata:child="OrderDetail"
          msdata:parentkey="OrderNumber"  
          msdata:childkey="OrderNo"/>  
     </xs:appinfo>  
  </xs:annotation>  

L'elemento Relationship viene usato dal processo di mapping per creare una relazione padre-figlio tra la colonna OrderNumber della tabella Order e la colonna OrderNo della tabella OrderDetail nel DataSet. Il processo di mapping consente solo di specificare la relazione. Non specifica automaticamente alcun vincolo sui valori di tali colonne, a differenza di quanto avviene mediante i vincoli di chiave primaria/chiave esterna nei database relazionali.

In questa sezione

Mapping di relazioni implicite tra elementi di schemi annidati
Vengono descritti i vincoli e le relazioni creati implicitamente in un DataSet quando in XML Schema sono presenti elementi annidati.

Mapping di relazioni specificate per elementi annidati
Viene descritto come impostare esplicitamente le relazioni in un DataSet per gli elementi annidati di XML Schema.

Specifica di relazioni tra elementi senza alcun annidamento
Viene descritta la creazione di relazioni in un DataSet tra elementi non annidati di XML Schema.

Derivazione della struttura relazionale di DataSet da XML Schema (XSD)
Viene descritta la struttura relazionale, o schema, di un DataSet creata da uno schema XSD (XML Schema Definition Language).

Mapping tra vincoli XML Schema (XSD) e vincoli di DataSet
Vengono descritti gli elementi di XML Schema usati per creare vincoli univoci e per chiavi esterne in un DataSet.

Vedi anche