Condividi tramite


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

A causa del mapping predefinito, viene eseguito il mapping di ogni elemento e attributo nello schema XSD a una vista/tabella e a una colonna di database. Se si desidera creare un elemento nello schema XSD di cui non venga eseguito il mapping 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 di cui non è stato eseguito il mapping 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. Viene eseguito il mapping dell'elemento <Person.Contact> alla tabella Person.Contact e di tutti gli attributi 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.

Vedere anche

Riferimento

Mapping predefinito di elementi e attributi XSD a tabelle e colonne (SQLXML 4.0)