Omezení schématu XML a relací
Ve schématu jazyka XSD (Xml Schema Definition Language) můžete určit omezení (jedinečná omezení, klíč a omezení klíče) a relace (pomocí poznámek msdata:Relationship ). Toto téma vysvětluje, jak jsou omezení a relace zadané ve schématu XML interpretovány za účelem vygenerování DataSet.
Obecně platí, že ve schématu XML zadáte poznámku msdata:Relationship , pokud chcete vygenerovat pouze relace v datové sadě. Další informace naleznete v tématu Generování relací datové sady ze schématu XML (XSD). Pokud chcete v datové sadě generovat omezení (jedinečná, klíčová a klíčováref), zadejte omezení. Všimněte si, že k vygenerování relací se používají také omezení klíče a klíčeref, jak je vysvětleno dále v tomto tématu.
Generování relace z omezení klíče a klíče
Místo zadávání poznámek msdata:Relationship můžete zadat omezení klíče a klíče, která se používají během procesu mapování schématu XML k vygenerování nejen omezení, ale také relace v datové sadě. Pokud však zadáte msdata:ConstraintOnly="true"
v elementu keyref , datová sada bude obsahovat pouze omezení a nebude zahrnovat relaci.
Následující příklad ukazuje schéma XML, které obsahuje order a OrderDetail elementy, které nejsou vnořené. Schéma také určuje omezení klíče a klíče.
<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>
Datová sada vygenerovaná během procesu mapování schématu XML obsahuje tabulky Order a OrderDetail . Kromě toho datová sada zahrnuje relace a omezení. Následující příklad ukazuje tyto relace a omezení. Všimněte si, že schéma neurčí poznámku msdata:Relationship . Místo toho se k vygenerování relace používají omezení klíče a klíče.
....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
V předchozím příkladu schématu nejsou vnořené prvky Order a OrderDetail . V následujícím příkladu schématu jsou tyto prvky vnořené. Není však zadána žádná poznámka msdata:Relationship ; proto se předpokládá implicitní relace. Další informace naleznete v tématu Mapování implicitních relací mezi vnořenými prvky schématu. Schéma také určuje omezení klíče a klíče.
<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>
Datová sada , která je výsledkem procesu mapování schématu XML, obsahuje dvě tabulky:
Order(OrderNumber, EmpNumber, Order_Id)
OrderDetail(OrderNumber, ItemNumber, Order_Id)
Datová sada obsahuje také dvě relace (jedna založená na poznámce msdata:relationship a druhá na základě omezení klíče a klíče) a různých omezení. Následující příklad ukazuje vztahy a omezení.
..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
Pokud omezení keyref odkazující na vnořenou tabulku obsahuje poznámku msdata:IsNested="true" , datová sada vytvoří jednu vnořenou relaci založenou na omezení keyref a souvisejícím omezením jedinečného klíče nebo omezení klíče.