Condividi tramite


Specifica di uno spazio dei nomi di destinazione mediante l'attributo targetNamespace (SQLXML 4.0)

Nella creazione degli schemi XSD, è possibile utilizzare l'attributo XSD targetNamespace per specificare uno spazio dei nomi di destinazione. In questo argomento viene descritto il funzionamento degli attributi XSD targetNamespace, elementFormDefault e attributeFormDefault, il relativo impatto sull'istanza XML generata e il modo in cui vengono specificate le query XPath con gli spazi dei nomi.

È possibile utilizzare l'attributo xsd:targetNamespace per posizionare gli elementi e gli attributi dello spazio dei nomi predefinito in uno spazio dei nomi differente. È 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 utilizzare gli attributi elementFormDefault e attributeFormDefault nell'elemento <xsd:schema> per specificare a livello globale la qualifica degli elementi e degli attributi locali oppure è possibile utilizzare l'attributo form per specificare separatamente i singoli elementi e attributi.

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. Specificare uno spazio dei nomi di destinazione

Nello schema XSD seguente viene specificato uno spazio dei nomi di destinazione mediante l'attributo xsd:targetNamespace. Vengono inoltre impostati i valori degli attributi elementFormDefault e attributeFormDefault su "unqualified", che rappresenta il valore predefinito per questi attributi. Si tratta di una dichiarazione globale che influisce su tutti gli elementi (<Order> nello schema) e su tutti gli attributi (CustomerID, ContactName e OrderID nello schema) locali.

<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 a questi tipi viene fatto riferimento 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> viene inoltre incluso nello spazio dei nomi di destinazione dello schema poiché è 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 dell'istanza definisce lo spazio dei nomi urn:MyNamespace e vi associa un prefisso (y0). Il prefisso viene applicato solo all'elemento <Customer> globale. L'elemento è globale poiché è stato dichiarato come elemento figlio dell'elemento <xsd:schema> nello schema.

Il prefisso non viene applicato agli elementi e agli attributi locali poiché il valore degli attributi elementFormDefault e attributeFormDefault è impostato su "unqualified" nello schema. Notare che l'elemento <Order> è locale poiché la relativa dichiarazione appare come elemento figlio dell'elemento <complexType> che definisce l'elemento <CustomerType>. In modo analogo, gli attributi (CustomerID, OrderID e ContactName) sono locali, non globali.

Per creare un esempio reale di questo schema

  1. Copiare il codice dello schema precedente e incollarlo in un file di testo. Salvare il file con il nome targetNameSpace.xml.

  2. Copiare il modello seguente e incollarlo in un file di testo. Salvare il file come targetNameSpaceT.xml nella stessa directory nella quale è 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 1. Notare 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 di directory specificato per lo schema di mapping (targetNamespace.xml) è relativo alla directory in cui è 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 ulteriori informazioni, vedere Utilizzo di ADO per eseguire query SQLXML.

Se lo schema specifica gli attributi elementFormDefault e attributeFormDefault con il valore "qualified", il documento dell'istanza conterrà 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 nuovamente il modello. Poiché ora anche gli attributi sono qualificati nell'istanza, la query XPath verrà modificata 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>