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
Copiare il codice dello schema precedente e incollarlo in un file di testo. Salvare il file con il nome sql-mapped.xml.
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 < 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"
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