Impostazione di metaproprietà in OPENXMLSpecify Metaproperties in OPENXML

Gli attributi delle metaproprietà in un documento XML sono attributi che descrivono le proprietà di un elemento XML (elemento, attributo o qualsiasi altro nodo DOM).Metaproperty attributes in an XML document are attributes that describe the properties of an XML item, such as element, attribute, or any other DOM node. Tali attributi non sono fisicamente presenti nel testo del documento XML,These attributes do not physically exist in the XML document text. tuttavia OPENXML fornisce tali metaproprietà per tutti gli elementi XML.However, OPENXML provides these metaproperties for all the XML items. Queste metaproprietà consentono di estrarre informazioni, ad esempio la posizione locale o le informazioni sullo spazio dei nomi, dei nodi XML,These metaproperties allow you to extract information, such as local positioning and namespace information, of XML nodes. ovvero informazioni più dettagliate rispetto a quelle disponibili nella rappresentazione testuale.This information provides you with more details than are apparent in the textual representation.

Per eseguire il mapping le metaproprietà alle colonne del set di righe, è possibile specificare il parametro ColPattern in un'istruzione OPENXML.You can map these metaproperties to the rowset columns in an OPENXML statement by using the ColPattern parameter. Le colonne conterranno i valori delle metaproprietà alle quali è stato eseguito il mapping.The columns will contain the values of the metaproperties to which they are mapped. Per informazioni sulla sintassi di OPENXML, vedere OPENXML (Transact-SQL).For more information about the syntax of OPENXML, see OPENXML (Transact-SQL).

Per accedere agli attributi delle metaproprietà, è possibile utilizzare uno spazio dei nomi specifico di SQL Server,To access the metaproperty attributes, a namespace that is specific to SQL Server is provided. Questo spazio dei nomi, urn:schemas-microsoft-com:xml-metaprop consente all'utente di accedere agli attributi delle metaproprietà.This namespace, urn:schemas-microsoft-com:xml-metaprop allows the user to access the metaproperty attributes. Se il risultato di una query OPENXML viene restituito nel formato tabella edge, in tale tabella sarà inclusa una colonna per ogni attributo della metaproprietà, a eccezione della metaproprietà xmltext .If the result of an OPENXML query is returned in an edge table format, the edge table contains one column for each metaproperty attribute, except the xmltext metaproperty.

Alcuni attributi delle metaproprietà vengono utilizzati per attività di elaborazione.Some of the metaproperty attributes are used for processing purposes. Ad esempio, l'attributo della metaproprietà xmltext consente di gestire l'overflow.For example, the xmltext metaproperty attribute is used for overflow handling. La gestione dell'overflow implica la gestione dei dati non utilizzati e non elaborati del documento.Overflow handling refers to the unconsumed, unprocessed data in the document. Una delle colonne del set di righe generato da OPENXML può essere identificata come la colonna di overflow.One of the columns in the rowset that is generated by OPENXML can be identified as the overflow column. A tale scopo, è possibile eseguirne il mapping alla metaproprietà xmltext usando il parametro ColPattern .You do this by mapping it to the xmltext metaproperty by using the ColPattern parameter. Nella colonna verranno inseriti i dati di overflowThe column then receives the overflow data. e il parametro flags determinerà se la colonna includerà solo i dati non utilizzati oppure tutti i dati.The flags parameter determines whether the column contains everything or only the unconsumed data.

Nella tabella seguente sono elencati gli attributi delle metaproprietà per ogni elemento XML analizzato.The following table lists the metaproperty attributes that each parsed XML element possesses. Per accedere a tali attributi, è necessario usare lo spazio dei nomi urn:schemas-microsoft-com:xml-metaprop.These metaproperty attributes can be accessed by using the namespace urn:schemas-microsoft-com:xml-metaprop. Qualsiasi valore impostato dall'utente direttamente nel documento XML tramite queste metaproprietà verrà ignorato.Any value that the user sets directly in the XML document by using these metaproperties is ignored.

Nota

Non è possibile fare riferimento a queste metaproprietà nelle strutture di navigazione XPath.You cannot reference these metaproperties in any XPath navigation.

Attributo della metaproprietàMetaproperty attribute DescrizioneDescription
@mp:id Restituisce un identificatore del nodo DOM generato dal sistema e valido a livello globale per il documento.Provides a system-generated, document-wide identifier of the DOM node. Se il documento non viene nuovamente analizzato, questo ID fa riferimento allo stesso nodo XML.As long as the document is not reparsed, this ID refers to the same XML node.

Un ID XML 0 indica che l'elemento è un elemento radice.An XML ID of 0 indicates that the element is a root element. Il relativo ID XML padre è NULL.Its parent XML ID is NULL.
@mp:localname Archivia la parte locale del nome del nodo.Stores the local part of the name of the node. Viene utilizzato insieme a un prefisso e a un URI dello spazio dei nomi per definire i nodi di elementi o attributi.It is used with a prefix and a namespace URI to name element or attribute nodes.
@mp:namespaceuri Restituisce l'URI dello spazio dei nomi dell'elemento corrente.Provides the namespace URI of the current element. Se il valore di questo attributo è NULL, non sono presenti spazi dei nomi.If the value of this attribute is NULL, no namespace is present
@mp:prefix Archivia il prefisso dello spazio dei nomi del nome dell'elemento corrente.Stores the namespace prefix of the current element name.

Se non è presente alcun prefisso (NULL) e viene specificato un URI, indica che lo spazio dei nomi specificato è lo spazio dei nomi predefinito.If no prefix is present (NULL) and a URI is given, it indicates that the specified namespace is the default namespace. Se non viene specificato alcun URI, non verranno associati spazi dei nomi.If no URI is given, no namespace is attached.
@mp:prev Archivia l'elemento di pari livello precedente in un nodoStores the previous sibling relative to a node. e fornisce informazioni sull'ordinamento degli elementi nel documento.This provides information about the ordering of elements in the document.

@mp:prev contiene l'ID XML dell'elemento di pari livello precedente con lo stesso elemento padre.@mp:prev contains the XML ID of the previous sibling that has the same parent element. Se un elemento si trova all'inizio dell'elenco di elementi di pari livello, @mp:prev è NULL.If an element is at the front of the sibling list, @mp:prev is NULL.
@mp:xmltext Utilizzato per attività di elaborazione.Used for processing purposes. Rappresenta la serializzazione testuale dell'elemento e dei relativi attributi nonché dei sottoelementi, come vengono utilizzati nella gestione dell'overflow di OPENXML.It is the textual serialization of the element and its attributes, and also the subelements, as used in the overflow handling of OPENXML.

Nella tabella seguente vengono illustrate le proprietà padre aggiuntive che consentono di recuperare le informazioni relative alla gerarchia.This table shows the additional parent properties that are provided and which allow you to retrieve information about the hierarchy.

Attributo della metaproprietà padreParent metaproperty attribute DescrizioneDescription
@mp:parentid Corrisponde a ../@mp:idCorresponds to ../@mp:id
@mp:parentlocalname Corrisponde a ../@mp:localnameCorresponds to ../@mp:localname
@mp:parentnamespacerui Corrisponde a ../@mp:namespaceuriCorresponds to ../@mp:namespaceuri
@mp:parentprefix Corrisponde a ../@mp:prefixCorresponds to ../@mp:prefix

EsempiExamples

Negli esempi seguenti viene illustrato l'utilizzo di OPENXML per visualizzare i set di righe in modi diversi.The following examples illustrate how OPENXML is used to create different rowset views.

A.A. Mapping tra le colonne del set di righe OPENXML e le metaproprietàMapping the OPENXML rowset columns to the metaproperties

In questo esempio, l'istruzione OPENXML viene utilizzata per visualizzare il documento XML di esempio come un set di righe.This example uses OPENXML to create a rowset view of the sample XML document. In particolare, viene illustrato come eseguire il mapping di più attributi delle metaproprietà alle colonne del set di righe in un'istruzione OPENXML usando il parametro ColPattern .Specifically, it shows how the various metaproperty attributes can be mapped to rowset columns in an OPENXML statement by using the ColPattern parameter.

Nell'istruzione OPENXML si noti quanto segue:The OPENXML statement illustrates the following:

  • e il parametro id all'attributo della metaproprietà @mp:id per indicare che la colonna includerà l'ID XML univoco generato dal sistema dell'elemento.The id column is mapped to the @mp:id metaproperty attribute and indicates that the column contains the system-generated unique XML ID of the element.

  • e il parametro parent a @mp:parentid per indicare che la colonna includerà l'ID XML del padre dell'elemento.The parent column is mapped to @mp:parentid and indicates that the column contains the XML ID of the parent of the element.

  • e il parametro parentLocalName a @mp:parentlocalname a indicare che la colonna includerà il nome locale del padre.The parentLocalName column is mapped to @mp:parentlocalname and indicates that the column contains the local name of the parent.

    L'istruzione SELECT restituisce quindi il set di righe fornito da OPENXML:The SELECT statement then returns the rowset that is provided by OPENXML:

DECLARE @idoc int  
DECLARE @doc nvarchar(1000)  
-- Sample XML document  
SET @doc = N'<root>  
  <Customer cid= "C1" name="Janine" city="Issaquah">  
      <Order oid="O1" date="1/20/1996" amount="3.5" />  
      <Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied</Order>  
   </Customer>  
   <Customer cid="C2" name="Ursula" city="Oelde" >  
      <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">  
          <Urgency>Important</Urgency>  
      </Order>  
      <Order oid="O4" date="1/20/1996" amount="10000"/>  
   </Customer>  
</root>'  
-- Create an internal representation of the XML document.  
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc  

-- Execute a SELECT statement using OPENXML rowset provider.  
SELECT *  
FROM OPENXML (@idoc, '/root/Customer/Order', 9)  
      WITH (id int '@mp:id',   
            oid char(5),   
            date datetime,   
            amount real,   
            parentIDNo int '@mp:parentid',   
            parentLocalName varchar(40) '@mp:parentlocalname')  
EXEC sp_xml_removedocument @idoc  

Risultato:This is the result:

id   oid         date                amount    parentIDNo  parentLocalName    
--- ------- ---------------------- ---------- ------------ ---------------  
6    O1    1996-01-20 00:00:00.000     3.5         2        Customer  
10   O2    1997-04-30 00:00:00.000     13.4        2        Customer  
19   O3    1999-07-14 00:00:00.000     100.0       15       Customer  
25   O4    1996-01-20 00:00:00.000     10000.0     15       Customer  

B.B. Recupero dell'intero documento XMLRetrieving the whole XML document

In questo esempio, l'istruzione OPENXML visualizza il documento XML di esempio come un set di righe a una colonna.In this example, OPENXML is used to create a one-column rowset view of the sample XML document. Viene eseguito il mapping della colonna, Col1, alla metaproprietà xmltext e diventa una colonna di overflow,This column, Col1, is mapped to the xmltext metaproperty and becomes an overflow column. pertanto vi verranno inseriti i dati non utilizzatiAs a result, the column receives the unconsumed data. che in questo caso sono rappresentati dall'intero documento.In this case, it is the whole document.

L'istruzione SELECT restituisce quindi l'intero set di righe.The SELECT statement then returns the complete rowset.

DECLARE @idoc int  
DECLARE @doc nvarchar(1000)  
SET @doc = N'<?xml version="1.0"?>  
<root>  
  <Customer cid= "C1" name="Janine" city="Issaquah">  
      <Order oid="O1" date="1/20/1996" amount="3.5" />  
      <Order oid="O2" date="4/30/1997" amount="13.4">Customer was very   
             satisfied</Order>  
   </Customer>  
   <Customer cid="C2" name="Ursula" city="Oelde" >  
      <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue   
             white red">  
     <MyTag>Testing to see if all the subelements are returned</MyTag>  
          <Urgency>Important</Urgency>  
      </Order>  
      <Order oid="O4" date="1/20/1996" amount="10000"/>  
   </Customer>  
</root>'  
-- Create an internal representation of the XML document.  
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc  

-- Execute a SELECT statement using OPENXML rowset provider.  
SELECT *  
FROM OPENXML (@idoc, '/')  
   WITH (Col1 ntext '@mp:xmltext')  

Per recuperare l'intero documento senza la dichiarazione XML, è possibile specificare la query nel modo seguente:To retrieve the whole document without the XML declaration, the query can be specified as shown in the following:

SELECT *  
FROM OPENXML (@idoc, '/root')  
   WITH (Col1 ntext '@mp:xmltext')  
EXEC sp_xml_removedocument @idoc  

La query restituisce l'elemento radice insieme al relativo nome, nonché i dati contenuti in tale elemento.The query returns the root element that has the name root and the data that is contained by the root element

C.C. Impostazione della metaproprietà xmltext per il recupero dei dati non utilizzati in una colonnaSpecifying the xmltext metaproperty to retrieve the unconsumed data in a column

In questo esempio, l'istruzione OPENXML viene utilizzata per visualizzare il documento XML di esempio come un set di righe.This example uses OPENXML to create a rowset view of the sample XML document. L'esempio descrive inoltre come recuperare i dati XML non utilizzati tramite il mapping tra l'attributo della metaproprietà xmltext e una colonna del set di righe nell'istruzione OPENXML.The example shows how to retrieve unconsumed XML data by mapping the xmltext metaproperty attribute to a rowset column in OPENXML.

e il parametro comment viene definita come colonna di overflow tramite il mapping alla metaproprietà @mp:xmltext .The comment column is identified as the overflow column by mapping it to the @mp:xmltext metaproperty. Il parametro flags viene impostato su 9 (XML_ATTRIBUTE e XML_NOCOPY),The flags parameter is set to 9 (XML_ATTRIBUTE and XML_NOCOPY). per indicare che il mapping è incentrato sugli attributi e che nella colonna di overflow verranno copiati solo i dati non utilizzati.This indicates attribute-centric mapping and indicates that only the unconsumed data should be copied to the overflow column.

L'istruzione SELECT restituisce quindi il set di righe definito dall'istruzione OPENXML.The SELECT statement then returns the rowset provided by OPENXML.

In questo esempio, la metaproprietà @mp:parentlocalname viene impostata per una colonna, ParentLocalName, del set di righe generato dall'istruzione OPENXML.In this example, the @mp:parentlocalname metaproperty is set for a column, ParentLocalName, in the rowset generated by OPENXML. Questa colonna includerà pertanto il nome locale dell'elemento padre.As a result, this column contains the local name of the parent element.

Nel set di righe vengono definite altre due colonne, parent e comment.Two additional columns are specified in the rowset, parent and comment. e il parametro parent a @mp:parentid per indicare che la colonna includerà l'ID XML dell'elemento padre dell'elemento.The parent column is mapped to @mp:parentid and indicates that the column contains the XML ID of the parent element of the element. La colonna comment viene definita come colonna di overflow tramite il mapping alla metaproprietà @mp:xmltext .The comment column is identified as the overflow column by mapping it to the @mp:xmltext metaproperty.

DECLARE @idoc int  
DECLARE @doc nvarchar(1000)  
-- sample XML document  
SET @doc = N'<root>  
  <Customer cid= "C1" name="Janine" city="Issaquah">  
      <Order oid="O1" date="1/20/1996" amount="3.5" />  
      <Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied</Order>  
   </Customer>  
   <Customer cid="C2" name="Ursula" city="Oelde" >  
      <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">  
          <Urgency>Important</Urgency>  
      </Order>  
      <Order oid="O4" date="1/20/1996" amount="10000"/>  
   </Customer>  
</root>  
'  
-- Create an internal representation of the XML document.  
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc  

-- Execute a SELECT statement using OPENXML rowset provider.  
SELECT *  
FROM OPENXML (@idoc, '/root/Customer/Order', 9)  
      WITH (oid char(5),   
            date datetime,  
            comment ntext '@mp:xmltext')  
EXEC sp_xml_removedocument @idoc  

Di seguito è riportato il risultato.This is the result. Poiché le colonne oid e date sono già utilizzate, non sono riportate nella colonna di overflow.Because the oid columns and date columns are already consumed, they do not appear in the overflow column.

oid   date                        comment                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
----- --------------------------- ----------------------------------------  
O1    1996-01-20 00:00:00.000     <Order amount="3.5"/>  
O2    1997-04-30 00:00:00.000     <Order amount="13.4">Customer was very   
                                   satisfied</Order>  
O3    1999-07-14 00:00:00.000     <Order amount="100" note="Wrap it blue   
                                   white red"><Urgency>   
                                   Important</Urgency></Order>  
O4    1996-01-20 00:00:00.000     <Order amount="10000"/>  

Vedere ancheSee Also

OPENXML (Transact-SQL) OPENXML (Transact-SQL)
OPENXML (SQL Server) OPENXML (SQL Server)