Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nella scrittura di schemi XSD è possibile usare l'attributo targetNamespace XSD per specificare uno spazio dei nomi di destinazione. In questo argomento viene descritto il funzionamento degli attributi targetNamespace XSD, elementFormDefault e attributeFormDefault , sul modo in cui influiscono sull'istanza XML generata e sul modo in cui le query XPath vengono specificate con gli spazi dei nomi.
È possibile usare l'attributo xsd:targetNamespace per inserire elementi e attributi dallo spazio dei nomi predefinito in uno spazio dei nomi diverso. È anche possibile specificare se gli attributi e gli elementi dichiarati localmente dello schema devono essere qualificati da uno spazio dei nomi, in modo esplicito usando un prefisso o in modo implicito per impostazione predefinita. È possibile utilizzare gli attributi elementFormDefault e attributeFormDefault nell'elemento <xsd:schema> per specificare globalmente la qualifica di elementi e attributi locali oppure è possibile utilizzare l'attributo form per specificare separatamente singoli elementi e attributi.
Esempi
Per creare esempi reali utilizzando gli esempi seguenti, è necessario soddisfare alcuni requisiti. Per altre informazioni, vedere Requisiti per l'esecuzione di esempi SQLXML.
Un. Specifica di uno spazio dei nomi di destinazione
Lo schema XSD seguente specifica uno spazio dei nomi di destinazione usando l'attributo xsd:targetNamespace . Lo schema imposta anche i valori dell'attributo elementFormDefault e attributeFormDefaultsu "unqualified" (il valore predefinito per questi attributi). Si tratta di una dichiarazione globale e influisce su tutti gli elementi locali (<Order> nello schema) e sugli attributi (CustomerID, ContactName e OrderID nello schema).
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
xmlns:CO="urn:MyNamespace"
targetNamespace="urn:MyNamespace" >
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustOrders"
parent="Sales.Customer"
parent-key="CustomerID"
child="Sales.SalesOrderHeader"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer"
sql:relation="Sales.Customer"
type="CO:CustomerType" />
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="Order"
sql:relation="Sales.SalesOrderHeader"
sql:relationship="CustOrders"
type="CO:OrderType" />
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="SalesPersonID" type="xsd:string" />
</xsd:complexType>
<xsd:complexType name="OrderType" >
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:schema>
Nello schema:
Le dichiarazioni di tipo CustomerType e OrderType sono globali e pertanto sono incluse nello spazio dei nomi di destinazione dello schema. Di conseguenza, quando si fa riferimento a questi tipi nella dichiarazione dell'elemento <Customer> e del relativo <elemento figlio Order> , viene specificato un prefisso associato allo spazio dei nomi di destinazione.
L'elemento <Customer> è incluso anche nello spazio dei nomi di destinazione dello schema perché è un elemento globale nello schema.
Eseguire la query XPath seguente sullo schema:
(/CO:Customer[@CustomerID=1)
La query XPath genera questo documento di istanza (vengono visualizzati solo alcuni ordini):
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<y0:Customer xmlns:y0="urn:MyNamespace"
CustomerID="ALFKI" ContactName="Maria Anders">
<Order CustomerID="ALFKI" OrderID="10643" />
<Order CustomerID="ALFKI" OrderID="10692" />
...
</y0:Customer>
</ROOT>
Questo documento di istanza definisce lo spazio dei nomi urn:MyNamespace e associa un prefisso (y0) a esso. Il prefisso viene applicato solo all'elemento <globale Customer> . L'elemento è globale perché è dichiarato come figlio dell'elemento <xsd:schema> nello schema.
Il prefisso non viene applicato agli elementi e agli attributi locali perché il valore degli attributi elementFormDefault e attributeFormDefault è impostato su "non qualificato" nello schema. Si noti che l'elemento <Order> è locale perché la relativa dichiarazione viene visualizzata come figlio dell'elemento complexType che definisce l'elemento <CustomerType>>.< Analogamente, gli attributi (CustomerID, OrderID e ContactName) sono locali, non globali.
Per creare un esempio funzionante di questo schema
Copiare il codice dello schema precedente e incollarlo in un file di testo. Salvare il file come targetNameSpace.xml.
Copiare il modello seguente e incollarlo in un file di testo. Salvare il file come targetNameSpaceT.xml nella stessa directory in cui è stato salvato targetNamespace.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="targetNamespace.xml" xmlns:CO="urn:MyNamespace" > /CO:Customer[@CustomerID=1] </sql:xpath-query> </ROOT>La query XPath nel modello restituisce l'elemento <Customer> per il cliente con customerID pari a 1. Si noti che la query XPath specifica il prefisso dello spazio dei nomi per l'elemento nella query e non per l'attributo . Gli attributi locali non sono qualificati, come specificato nello schema.
Il percorso della directory specificato per lo schema di mapping (targetNamespace.xml) è relativo alla directory in cui viene salvato il modello. È possibile specificare anche un percorso assoluto, ad esempio:
mapping-schema="C:\MyDir\targetNamepsace.xml"Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.
Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML.
Se lo schema specifica gli attributi elementFormDefault e attributeFormDefault con valore "qualified", il documento dell'istanza avrà tutti gli elementi e gli attributi locali qualificati. È possibile modificare lo schema precedente in modo da includere questi attributi nell'elemento <xsd:schema> ed eseguire di nuovo il modello. Poiché gli attributi sono ora qualificati anche nell'istanza, la query XPath cambierà in modo da includere il prefisso dello spazio dei nomi.
Si tratta della query XPath modificata:
/CO:Customer[@CO:CustomerID=1]
Questo è il documento XML restituito:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<y0:Customer xmlns:y0="urn:MyNamespace" CustomerID="1" SalesPersonID="280">
<Order SalesOrderID="43860" CustomerID="1" />
<Order SalesOrderID="44501" CustomerID="1" />
<Order SalesOrderID="45283" CustomerID="1" />
<Order SalesOrderID="46042" CustomerID="1" />
</y0:Customer>
</ROOT>