Creazione di attributi di tipo ID, IDREF e IDREFS validi tramite sql:id-prefix (schema XDR)
Importante |
---|
Questo argomento è incluso come riferimento per le applicazioni legacy. Per questa funzionalità non è previsto alcun progetto di sviluppo in futuro. Evitare di utilizzarla in un nuovo progetto di sviluppo. Utilizzare invece gli schemi XSD con annotazioni per creare le viste XML. Per ulteriori informazioni, vedere Introduzione agli schemi XSD con annotazioni (SQLXML 4.0). È possibile convertire gli schemi XDR con annotazioni esistenti in schemi XSD. Per ulteriori informazioni, vedere Conversione di schemi XDR con annotazioni in schemi XSD equivalenti (SQLXML 4.0). |
È possibile specificare un attributo come attributo di tipo ID. Gli attributi specificati come IDREF o IDREFS possono quindi essere utilizzati per fare riferimento agli attributi di tipo ID, in modo da abilitare i collegamenti tra i documenti.
ID, IDREF e IDREFS corrispondono alle relazioni di chiave primaria/chiave esterna nel database, con alcune differenze. Nel documento XML i valori degli attributi di tipo ID devono essere distinti. Se in un documento XML sono presenti attributi CustomerID e SalesOrderID, tali valori devono essere distinti. In un database, tuttavia, le colonne CustomerID e SalesOrderID possono avere gli stessi valori. Ad esempio, CustomerID = 1 e OrderID = 1 sono validi nel database.
Per specificare attributi ID, IDREF e IDREFS validi:
Il valore di ID deve essere univoco all'interno del documento XML.
Per ogni IDREF e IDREFS, i valori ID di riferimento devono essere inclusi nel documento XML.
Il valore di un attributo ID, IDREF e IDREFS deve essere un token denominato. Il valore integer 101, ad esempio, non può essere un valore ID.
Non è possibile eseguire il mapping degli attributi di tipo ID, IDREF e IDREFS a colonne di tipo text, ntext o image o di qualsiasi altro tipo di dati binary, ad esempio timestamp.
Se un documento XML contiene più ID, viene specificata l'annotazione sql:id-prefix per garantire l'univocità dei valori. L'annotazione sql:id-prefix viene utilizzata anche per creare token denominati da numeri. Il valore specificato per sql:id-prefix deve essere un carattere di nome valido.
L'attributo sql:id-prefix antepone ai valori di ID, IDREF e IDREFS una stringa, rendendoli in tal modo univoci. Non viene eseguito alcun controllo per verificare la validità dei prefissi e l'univocità dei valori di ID, IDREF o IDREFS.
L'attributo sql:id-prefix viene ignorato negli attributi che non sono di tipo ID, IDREF o IDREFS.
[!NOTA]
Ogni valore degli attributi ID, IDREF e IDREFS è limitato a 4.000 caratteri, incluso il prefisso (se specificato).
Esempi
Per creare esempi reali utilizzando gli esempi seguenti, è necessario soddisfare alcuni requisiti. Per ulteriori informazioni, vedere Requisiti per l'esecuzione di esempi di SQLXML.
A. Definizione di sql:id-prefix per un attributo di tipo ID
In questo schema XDR gli attributi SalesOrderID e CustomerID vengono dichiarati come tipo ID. Per garantire che gli ID siano univoci e validi, per tali attributi viene specificata l'annotazione sql:id-prefix:
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Order" sql:relation="Sales.SalesOrderHeader" sql:key-fields="SalesOrderID">
<AttributeType name="SalesOrderID" dt:type="id" sql:id-prefix="Ord-" />
<AttributeType name="OrderDate" />
<attribute type="SalesOrderID" />
<attribute type="OrderDate" />
</ElementType>
<ElementType name="Customer" sql:relation="Sales.Customer">
<AttributeType name="CustomerID" dt:type="id" />
<attribute type="CustomerID" />
<AttributeType name="OrderList" dt:type="idrefs"
sql:id-prefix="Ord-" />
<attribute type="OrderList" sql:relation="Sales.SalesOrderHeader" sql:field="SalesOrderID">
<sql:relationship
key-relation="Sales.Customer"
key="CustomerID"
foreign-relation="Sales.SalesOrderHeader"
foreign-key="CustomerID" />
</attribute>
<element type="Order">
<sql:relationship key-relation="Sales.SalesOrderHeader"
key="SalesOrderID"
foreign-relation="Sales.Customer"
foreign-key="SalesOrderID" />
</element>
</ElementType>
</Schema>
Per testare una query Xpath di esempio sullo schema
Copiare il codice dello schema precedente e incollarlo in un file di testo. Salvare il file con il nome sqlPrefix-Xdr.xml.
Copiare il modello seguente e incollarlo in un file di testo. Salvare il file come sqlPrefix-XdrT.xml nella stessa directory in cui è stato salvato il file sqlPrefix-Xdr.xml. La query XPath nel modello restituisce i sottoelementi <Customer> e <Order> in cui CustomerID è 1.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sqlPrefix-Xdr.xml"> Customer[@CustomerID="1"] </sql:xpath-query> </ROOT>
Il percorso di directory specificato per lo schema di mapping (sqlPrefix-Xdr.xml) è relativo alla directory in cui è salvato il modello. È possibile specificare anche un percorso assoluto, ad esempio:
mapping-schema="C:\MyDir\sqlPrefix-Xdr.xml"
Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.
Per ulteriori informazioni, vedere Utilizzo di ADO per eseguire query SQLXML 4.0.
Set di risultati:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1" OrderIDList="Ord-43860 Ord-44501 Ord-45283 Ord-46042">
<Order SalesOrderID="Ord-43860" OrderDate="2001-08-01T00:00:00" />
<Order SalesOrderID="Ord-44501" OrderDate="2001-11-01T00:00:00" />
<Order SalesOrderID="Ord-45283" OrderDate="2002-02-01T00:00:00" />
<Order SalesOrderID="Ord-46042" OrderDate="2002-05-01T00:00:00" />
</Customer>
</ROOT>