Condividi tramite


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

Nella scrittura di schemi XSD è possibile usare l'attributo targetNamespace XSD per specificare uno spazio dei nomi di destinazione. Questo argomento descrive come funzionano gli attributi XSD targetNamespace, elementFormDefault e attributeFormDefault, come influiscono sull'istanza XML generata e sul modo in cui vengono specificate query XPath con 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 attributi elementFormDefault e attributeFormDefault nell'elemento<xsd:schema> per specificare a livello globale la qualificazione degli elementi e degli attributi locali oppure è possibile usare l'attributo del modulo per specificare singoli elementi e attributi separatamente.

Esempio

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

A. 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 gli 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 questi tipi vengono a cui si fa riferimento nella dichiarazione dell'elemento <Customer> e nel 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 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 <Global 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 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 un CustomerID pari a 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 altre informazioni, vedere Uso di ADO per eseguire query SQLXML.

Se lo schema specifica gli attributi elementFormDefault e attributeFormDefault con valore "qualificato", il documento dell'istanza avrà tutti gli elementi e gli attributi locali qualificati. È possibile modificare lo schema precedente per includere questi attributi nell'elemento <xsd:schema> ed eseguire di nuovo 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>