Specificare uno spazio dei nomi di destinazione usando l'attributo targetNamespace (SQLXML 4.0)

Si applica a: SQL Server database SQL di Azure

Nella scrittura di schemi XSD, è possibile usare l'attributo XSD targetNamespace per specificare uno spazio dei nomi di destinazione. Questo articolo descrive il funzionamento degli attributi XSD targetNamespace, elementFormDefaulte attributeFormDefault , il modo in cui influiscono sull'istanza XML generata e il 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. È inoltre possibile specificare se gli elementi e gli attributi dello schema dichiarati localmente devono essere qualificati da uno spazio dei nomi, sia in modo esplicito mediante un prefisso sia in modo implicito per impostazione predefinita. È possibile usare gli elementFormDefault attributi e attributeFormDefault nell'elemento <xsd:schema> per specificare a livello globale la qualificazione di elementi e attributi locali oppure è possibile usare l'attributo form per specificare singoli elementi e attributi separatamente.

Esempi

Per creare esempi reali utilizzando gli esempi seguenti, è necessario soddisfare alcuni requisiti. Per altre informazioni, vedere Requisiti per l'esecuzione di esempi SQLXML.

R. Specificare 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 attributeFormDefault su "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, ContactNamee 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 CustomerType dichiarazioni di tipo 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 di <Customer> elemento e nel relativo <Order> elemento figlio, 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 sullo schema la query Xpath seguente:

(/CO:Customer[@CustomerID=1)

La query XPath genera questo documento dell'istanza (sono mostrati 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 <Customer> globale. L'elemento è globale perché viene dichiarato come elemento figlio dello <xsd:schema> schema.

Il prefisso non viene applicato agli elementi e agli attributi locali perché il valore di elementFormDefault e attributeFormDefault attributi è impostato su "unqualified" nello schema. L'elemento <Order> è locale perché la relativa dichiarazione viene visualizzata come figlio dell'elemento <complexType> che definisce l'elemento <CustomerType> . Analogamente, gli attributi (CustomerID, OrderIDe ContactName) sono locali, non globali.

Creare un esempio funzionante di questo schema

  1. Copiare il codice dello schema precedente e incollarlo in un file di testo. Salvare il file come targetNamespace.xml.

  2. Copiare il modello seguente e incollarlo in un file di testo. Salvare il file con nome 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. 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"
    
  3. 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 4.0.

Se lo schema specifica elementFormDefault e attributeFormDefault gli attributi con valore "qualified", il documento dell'istanza include 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 cambia per includere il prefisso dello spazio dei nomi.

La query XPath modificata è:

/CO:Customer[@CO:CustomerID=1]

Di seguito è riportato 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>