Condividi tramite


Esclusione di elementi dello schema dal documento XML risultante tramite sql:mapped (SQLXML 4.0)

A causa del mapping predefinito, ogni elemento e attributo nello schema XSD viene mappato a una vista/tabella e a una colonna di database. Se si desidera creare un elemento nello schema XSD che non venga mappato a qualsiasi tabella (vista) o colonna di database e che non venga visualizzato in XML, è possibile specificare l'annotazione sql:mapped.

L'annotazione sql:mapped risulta particolarmente utile se lo schema non può essere modificato o se viene utilizzato per la convalida XML da altre origini pur contenendo dati non archiviati nel database. La differenza tra l'annotazione sql:mapped e sql:is-constant consiste nel fatto che gli elementi e gli attributi non mappati non vengono visualizzati nel documento XML.

L'annotazione sql:mapped accetta un valore booleano (0=false, 1=true). I valori possibili sono 0, 1, true e false.

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. Specifica dell'annotazione sql:mapped

Si supponga di disporre di uno schema XSD di un'altra origine. Tale schema XSD è costituito dall'elemento <Person.Contact> con gli attributi ContactID, FirstName e LastName e HomeAddress.

Nell'eseguire il mapping dello schema XSD alla tabella Person.Contact nel database AdventureWorks, l'annotazione sql:mapped viene specificata nell'attributo HomeAddress in quanto nella tabella Employees non sono archiviati gli indirizzi personali dei dipendenti. Di conseguenza, questo attributo non viene mappato al database e non viene restituito nel documento XML risultante quando viene specificata una query XPath sullo schema di mapping.

Per il resto dello schema viene eseguito il mapping predefinito. L'elemento <Person.Contact> viene mappato alla tabella Person.Contact e tutti gli attributi vengono mappati alle colonne con lo stesso nome all'interno di questa tabella.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="Person.Contact">
    <xsd:complexType>
      <xsd:attribute name="ContactID"   type="xsd:string"/>
      <xsd:attribute name="FirstName"    type="xsd:string" />
      <xsd:attribute name="LastName"     type="xsd:string" />
      <xsd:attribute name="HomeAddress" type="xsd:string" 
                     sql:mapped="false" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Per testare una query Xpath di esempio sullo schema

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

  2. Copiare il modello seguente e incollarlo in un file di testo. Salvare il file con il nome sql-mappedT.xml nella stessa directory in cui è stato salvato il file sql-mapped.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="sql-mapped.xml">
            /Person.Contact[@ContactID &lt; 10]
        </sql:xpath-query>
    </ROOT>
    

    Il percorso della directory specificato per lo schema di mapping (MySchema.xml) è relativo alla directory in cui viene salvato il modello. È possibile specificare anche un percorso assoluto, ad esempio:

    mapping-schema="C:\MyDir\sql-mapped.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.

Set di risultati:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Person.Contact ContactID="1" FirstName="Gustavo" LastName="Achong" /> 
  <Person.Contact ContactID="2" FirstName="Catherine" LastName="Abel" /> 
  <Person.Contact ContactID="3" FirstName="Kim" LastName="Abercrombie" /> 
  <Person.Contact ContactID="4" FirstName="Humberto" LastName="Acevedo" /> 
  <Person.Contact ContactID="5" FirstName="Pilar" LastName="Ackerman" /> 
  <Person.Contact ContactID="6" FirstName="Frances" LastName="Adams" /> 
  <Person.Contact ContactID="7" FirstName="Margaret" LastName="Smith" /> 
  <Person.Contact ContactID="8" FirstName="Carla" LastName="Adams" /> 
  <Person.Contact ContactID="9" FirstName="Jay" LastName="Adams" /> 
</ROOT>

Si noti che gli attributi ContactID, FirstName e LastName sono presenti, mentre HomeAdress è assente, in quanto lo schema di mapping specifica il valore 0 per l'attributo sql:mapped.