Compartir a través de


Asignar restricciones KEY de un esquema XML (XSD) a restricciones de conjuntos de datos

En un esquema, puede especificar una restricción de clave en un elemento o atributo mediante el key elemento . El elemento o atributo en el que se especifica una restricción de clave debe tener valores únicos en cualquier instancia de esquema y no puede tener valores NULL.

La restricción de clave es similar a la restricción única, salvo que la columna en la que se define una restricción de clave no puede tener valores NULL.

En la tabla siguiente se describen los msdata atributos que puede especificar en el key elemento .

Nombre del atributo Descripción
msdata:ConstraintName Si se especifica este atributo, su valor se usa como nombre de restricción. De lo contrario, el name atributo proporciona el valor del nombre de restricción.
msdata:PrimaryKey Si PrimaryKey="true" está presente, la IsPrimaryKey propiedad de restricción se establece en true, por lo que es una clave principal. La AllowDBNull propiedad column se establece en false, ya que las claves principales no pueden tener valores NULL.

Al convertir el esquema en el que se especifica una restricción de clave, el proceso de asignación crea una restricción única en la tabla con la propiedad de la columna establecida en false para cada columna de la restricción. La IsPrimaryKey propiedad de la restricción única también se establece en false menos que se haya especificado msdata:PrimaryKey="true" en key elemento. Esto es idéntico a una restricción única en el esquema en el que PrimaryKey="true".

En el ejemplo de esquema siguiente, el key elemento especifica la restricción de clave en el CustomerID elemento .

<xs:schema id="cod"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Customers">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="CustomerID" type="xs:string" minOccurs="0" />
        <xs:element name="CompanyName" type="xs:string" minOccurs="0" />
       <xs:element name="Phone" type="xs:string" />
     </xs:sequence>
   </xs:complexType>
 </xs:element>
<xs:element name="MyDataSet" msdata:IsDataSet="true">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="Customers" />
    </xs:choice>
  </xs:complexType>
   <xs:key  msdata:PrimaryKey="true"
       msdata:ConstraintName="KeyCustID"
          name="KeyConstCustomerID" >
     <xs:selector xpath=".//Customers" />
     <xs:field xpath="CustomerID" />
    </xs:key>
 </xs:element>
</xs:schema>

El key elemento especifica que los valores del CustomerID elemento secundario del Customers elemento deben tener valores únicos y no pueden tener valores NULL. Al traducir el esquema del lenguaje de definición de esquema XML (XSD), el proceso de asignación crea la tabla siguiente:

Customers(CustomerID, CompanyName, Phone)

La asignación de esquema XML también crea un UniqueConstraint elemento en la CustomerID columna , como se muestra en el siguiente DataSet. (Por motivos de simplicidad, solo se muestran las propiedades pertinentes).

      DataSetName: MyDataSet
TableName: customers
  ColumnName: CustomerID
      AllowDBNull: False
      Unique: True
  ConstraintName: KeyCustID
      Table: customers
      Columns: CustomerID
      IsPrimaryKey: True

En el DataSet que se genera, la propiedad IsPrimaryKey del UniqueConstraint se establece en true porque el esquema especifica msdata:PrimaryKey="true" en el elemento key.

El valor de la propiedad ConstraintName del UniqueConstraint en el DataSet es el valor del atributo msdata:ConstraintName especificado en el elemento key del esquema.

Consulte también