keyref 要素を使用すると、ドキュメント内の要素間のリンクを確立できます。 これは、リレーショナル データベースの外部キーリレーションシップに似ています。 スキーマで keyref 要素が指定されている場合、要素はスキーマ マッピング プロセス中に、 DataSetのテーブル内の列の対応する外部キー制約に変換されます。 既定では、 keyref 要素は、リレーションシップで指定された ParentTable、 ChildTable、 ParentColumn、 および ChildColumn プロパティを使用して、リレーションも生成します。
次の表は、keyref 要素で指定できる msdata 属性の概要を示しています。
属性名 | 説明 |
---|---|
msdata:ConstraintOnly | スキーマの keyref 要素に ConstraintOnly="true" が指定されている場合、制約は作成されますが、リレーションシップは作成されません。 この属性が指定されていない (または False に設定されている) 場合は、制約とリレーションシップの両方が DataSet に作成されます。 |
msdata:ConstraintName | ConstraintName 属性が指定されている場合、その値は制約の名前として使用されます。 それ以外の場合、スキーマの keyref 要素の name 属性は、DataSet の制約名を提供します。 |
msdata:UpdateRule | スキーマの keyref 要素で UpdateRule 属性が指定されている場合、その値は DataSet の UpdateRule 制約プロパティに割り当てられます。 それ以外の場合、 UpdateRule プロパティは Cascade に設定されます。 |
msdata:DeleteRule | DeleteRule 属性がスキーマの keyref 要素で指定されている場合、その値は DataSet の DeleteRule 制約プロパティに割り当てられます。 それ以外の場合、 DeleteRule プロパティは Cascade に設定されます。 |
msdata:AcceptRejectRule | スキーマの keyref 要素で AcceptRejectRule 属性が指定されている場合、その値は DataSet の AcceptRejectRule 制約プロパティに割り当てられます。 それ以外の場合、 AcceptRejectRule プロパティは None に設定されます。 |
次の例には、Order 要素の OrderNumber 子要素と OrderDetail 要素の OrderNo 子要素の間のキーとキー参照のリレーションシップを指定するスキーマが含まれています。
この例では、OrderDetail 要素の OrderNumber 子要素が Order 要素の OrderNo キー子要素を参照しています。
<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>
XML スキーマ定義言語 (XSD) スキーマ マッピング プロセスでは、次の DataSet と 2 つのテーブルが生成されます。
OrderDetail(OrderNo, ItemNo) and
Order(OrderNumber, EmpNumber)
さらに、 DataSet は次の制約を定義します。
Order テーブルの一意の制約。
Table: Order Columns: OrderNumber ConstraintName: OrderNumberKey Type: UniqueConstraint IsPrimaryKey: False
Order テーブルと OrderDetail テーブルの間の関係。 2 つの要素がスキーマで入れ子になっていないため、 入れ子になった プロパティは False に設定されます。
ParentTable: Order ParentColumns: OrderNumber ChildTable: OrderDetail ChildColumns: OrderNo ParentKeyConstraint: OrderNumberKey ChildKeyConstraint: OrderNoRef RelationName: OrderNoRef Nested: False
OrderDetail テーブルの外部キー制約。
ConstraintName: OrderNoRef Type: ForeignKeyConstraint Table: OrderDetail Columns: OrderNo RelatedTable: Order RelatedColumns: OrderNumber