Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Atributos de metapropertia em um documento XML são atributos que descrevem as propriedades de um item XML, como elemento, atributo ou qualquer outro nó DOM. Esses atributos não existem fisicamente no texto do documento XML. No entanto, OPENXML fornece essas metapropertidades para todos os itens XML. Essas metapropertidades permitem extrair informações, como informações de posicionamento local e namespace, de nós XML. Essas informações fornecem mais detalhes do que são aparentes na representação textual.
Você pode mapear essas metapropriedades para as colunas de conjunto de linhas em uma instrução OPENXML usando o parâmetro ColPattern . As colunas conterão os valores das metapropertidades para as quais são mapeadas. Para obter mais informações sobre a sintaxe de OPENXML, consulte OPENXML (Transact-SQL).
Para acessar os atributos de metapropertia, um namespace específico do SQL Server é fornecido. Esse namespace, urn:schemas-microsoft-com:xml-metaprop , permite que o usuário acesse os atributos de metapropertia. Se o resultado de uma consulta OPENXML for retornado em um formato de tabela de borda, a tabela de borda conterá uma coluna para cada atributo de metapropertia, exceto a metapropertia xmltext .
Alguns dos atributos de metapropertia são usados para fins de processamento. Por exemplo, o atributo de metapropriedade xmltext é usado para tratamento de excesso. O controle de excesso refere-se aos dados não consumidos e não processados no documento. Uma das colunas no conjunto de dados gerado por OPENXML pode ser identificada como a coluna de estouro. Faça isso mapeando-o para a metapropertia xmltext usando o parâmetro ColPattern . Em seguida, a coluna recebe os dados excedentes. O parâmetro flags determina se a coluna contém todos os dados ou apenas os dados não consumidos.
A tabela a seguir lista os atributos de metapropertia que cada elemento XML analisado possui. Esses atributos de metapropertia podem ser acessados usando o namespace urn:schemas-microsoft-com:xml-metaprop. Qualquer valor definido pelo usuário diretamente no documento XML usando essas metapropriedades é ignorado.
Observação
Você não pode referenciar essas metapropriedades em qualquer navegação XPath.
| Atributo de metapropriedade | Descrição |
|---|---|
| @mp:id | Fornece um identificador gerado pelo sistema para o nó DOM em todo o documento. Enquanto o documento não for reescrito, este identificador refere-se ao mesmo nó XML. Uma ID XML de 0 indica que o elemento é um elemento raiz. Sua ID XML pai é NULL. |
| @mp:localname | Armazena a parte local do nome do nó. Usa-se com um prefixo e o URI do namespace para nomear nós de elementos ou atributos. |
| @mp:namespaceuri | Fornece o URI do namespace do elemento atual. Se o valor desse atributo for NULL, nenhum namespace estará presente |
| @mp:prefixo | Armazena o prefixo de namespace do nome do elemento atual. Se nenhum prefixo estiver presente (NULL) e um URI for fornecido, ele indicará que o namespace especificado é o namespace padrão. Se nenhum URI for fornecido, nenhum namespace será anexado. |
| @mp:prev | Armazena o irmão anterior em relação a um nó. Isso fornece informações sobre a ordenação de elementos no documento. @mp:prev contém a ID XML do irmão anterior que tem o mesmo elemento pai. Se um elemento estiver na frente da lista de irmãos, @mp:prev será NULL. |
| @mp:xmltext | Usado para fins de processamento. É a serialização textual do elemento, seus atributos e também os subelementos, conforme usado no tratamento de estouro em OPENXML. |
Esta tabela mostra as propriedades adicionais dos pais que são fornecidas e que permitem recuperar informações sobre a hierarquia.
| Atributo da metapropriedade principal | Descrição |
|---|---|
| @mp:parentid | Corresponde a .. /@mp:id |
| @mp:parentlocalname | Corresponde a .. /@mp:localname |
| @mp:parentnamespacerui | Corresponde a .. /@mp:namespaceuri |
| @mp:parentprefix | Corresponde a .. /@mp:prefixo |
Exemplos
Os exemplos a seguir ilustram como OPENXML é usado para criar diferentes exibições de conjunto de linhas.
Um. Mapeando as colunas do conjunto de linhas OPENXML para as metapropriedades
Este exemplo usa OPENXML para criar uma exibição de conjunto de linhas do documento XML de exemplo. Especificamente, ele mostra como os vários atributos de metapropertia podem ser mapeados para colunas de conjunto de linhas em uma instrução OPENXML usando o parâmetro ColPattern .
A instrução OPENXML ilustra o seguinte:
A coluna id é mapeada para o atributo de metapropriedade @mp:id e indica que a coluna contém a ID XML única gerada pelo sistema para o elemento.
A coluna pai é mapeada para @mp:parentid e indica que a coluna contém a ID XML do pai do elemento.
A coluna parentLocalName é mapeada para @mp:parentlocalname e indica que a coluna contém o nome local do pai.
A instrução SELECT retorna o conjunto de linhas fornecido por 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
Este é o resultado:
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. Recuperando todo o documento XML
Neste exemplo, OPENXML é usado para criar uma exibição de conjunto de linhas de uma coluna do documento XML de exemplo. Esta coluna, Col1, é mapeada para a metapropriedade xmltext e se torna uma coluna de transbordo. Como resultado, a coluna recebe os dados não consumidos. Nesse caso, é o documento inteiro.
A instrução SELECT retorna o conjunto de linhas completo.
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')
Para recuperar todo o documento sem a declaração XML, a consulta pode ser especificada conforme mostrado no seguinte:
SELECT *
FROM OPENXML (@idoc, '/root')
WITH (Col1 ntext '@mp:xmltext')
EXEC sp_xml_removedocument @idoc
A consulta retorna o elemento raiz que tem o nome root e os dados contidos pelo elemento raiz.
C. Especificando a metapropertia xmltext para recuperar os dados não armazenados em uma coluna
Este exemplo usa OPENXML para criar uma exibição de conjunto de linhas do documento XML de exemplo. O exemplo mostra como recuperar dados XML não consumidos mapeando o atributo de metapropriedade xmltext para uma coluna do conjunto de linhas (rowset) em OPENXML.
A coluna comentário é identificada como a coluna de transbordamento, mapeando-a para a metapropriedade @mp:xmltext. O parâmetro flags é definido como 9 (XML_ATTRIBUTE e XML_NOCOPY). Isso indica o mapeamento centrado em atributo e indica que apenas os dados não consumidos devem ser copiados para a coluna de estouro.
Em seguida, a instrução SELECT retorna o conjunto de linhas fornecido por OPENXML.
Neste exemplo, a metapropertia @mp:parentlocalname é definida para uma coluna , ParentLocalName, no conjunto de linhas gerado por OPENXML. Como resultado, essa coluna contém o nome local do elemento pai.
Duas colunas adicionais são especificadas no conjunto de linhas, pai e comentário. A coluna pai é mapeada para @mp:parentid e indica que a coluna contém a ID XML do elemento pai do elemento. A coluna de comentário é identificada como a coluna de estouro mapeando-a para a metapropertia @mp:xmltext .
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
Este é o resultado. Como as colunas oid e as colunas de data já estão utilizadas, elas não aparecem na coluna de excedente.
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"/>