Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Banco de Dados SQL no Microsoft Fabric
Características de metapropriedades em um documento XML são características que descrevem as propriedades de um item XML, como elemento, atributo ou qualquer outro nó DOM. Esses atributos não existem fisicamente no documento de texto XML. No entanto o OPENXML fornece essas metapropriedades para todos os itens XML. Essas metapropriedades permitem extrair informações, como posicionamento local e informações de namespace, de nós XML. Essas informações fornecem mais detalhes do que os que estão aparentes na representação textual.
Você pode mapear essas metapropriedades para as colunas do rowset em uma instrução OPENXML por meio do parâmetro ColPattern. As colunas conterão os valores das metapropriedades para as quais elas são mapeadas. Para obter mais informações sobre a sintaxe do OPENXML, consulte OPENXML (Transact-SQL).
Para acessar as características de metapropriedades, é fornecido um namespace que é específico ao SQL Server. Esse namespace, urn:schemas-microsoft-com:xml-metaprop permite que o usuário acesse as características de metapropriedade. 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 metapropriedade, exceto a metapropriedade xmltext.
Algumas características de metapropriedade são usados para fins de processamento. Por exemplo, o atributo de metapropriedade xmltext é usado para o tratamento de overflow. O tratamento de overflow refere-se aos dados não consumidos e não processados presentes no documento. Uma das colunas no conjunto de linhas gerado por OPENXML pode ser identificada como a coluna de excedente. Você faz isso mapeando-o para a metapropriedade xmltext usando o parâmetro ColPattern. A coluna então recebe os dados excedentes. O parâmetro flags determina se a coluna contém tudo ou apenas os dados não consumidos.
A tabela a seguir lista os atributos de metapropriedade que cada elemento XML analisado possui. Esses atributos de metapropriedade 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
Não é possível fazer referência a essas metapropriedades em qualquer navegação XPath.
| Atributo de metapropriedade | Descrição |
|---|---|
@mp:id |
Fornece um identificador do nó DOM, gerado pelo sistema e válido para todo o documento. Contanto que o documento não seja analisado novamente, esse ID faz referência ao mesmo nó XML. Uma ID de XML de 0 indica que o elemento é um elemento raiz. O ID XML do elemento pai é NULL. |
@mp:localname |
Armazena a parte local do nome do nó. Ele é usado com um prefixo e um URI de namespace para nomear nós de elemento ou de atributo. |
@mp:namespaceuri |
Fornece o URI do namespace do elemento atual. Se o valor desse atributo for NULL, nenhum namespace estará presente |
@mp:prefix |
Armazena o prefixo do namespace do nome do elemento atual. Se nenhum prefixo estiver presente (NULL) e um URI for fornecido, ele indicará que o namespace identificado é o namespace padrão. Se nenhum URI for fornecido, nenhum namespace será anexado. |
@mp:prev |
Armazena o irmão anterior relativo a um nó. Isso fornece informações sobre a ordenação de elementos no documento.@mp:prev contém a ID de XML do irmão anterior que tem o mesmo elemento pai. Se um elemento estiver à frente da lista de irmãos, @mp:prev será NULL. |
@mp:xmltext |
Usado para fins de processamento. É a serialização textual do elemento, de seus atributos e também dos subelementos, conforme utilizada no tratamento de overflow do OPENXML. |
Esta tabela mostra as propriedades pai adicionais disponibilizadas, que permitem recuperar informações sobre a hierarquia.
| Atributo de metapropriedade pai | 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:prefix |
Exemplos
Os exemplos seguintes ilustram como o OPENXML é usado para criar exibições de conjunto de linhas diferentes.
A. Mapear as colunas do conjunto de linhas OPENXML para as metapropriedades
Este exemplo usa OPENXML para criar uma exibição do conjunto de linhas do documento XML de exemplo. Especificamente, mostra como os vários atributos de metapropriedade podem ser mapeados para colunas do conjunto de linhas em uma instrução OPENXML por meio do parâmetro ColPattern.
A instrução OPENXML ilustra o seguinte:
A coluna
idé mapeada para o atributo de metapropriedade@mp:ide indica que a coluna contém a ID de XML exclusiva gerada pelo sistema do elemento.A coluna
parenté mapeada para@mp:parentide indica que a coluna contém a ID de XML do pai do elemento.A coluna
parentLocalNameé mapeada para@mp:parentlocalnamee indica que a coluna contém o nome local do pai.
Em seguida, 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. Recuperar o documento XML completo
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 overflow. Como resultado, a coluna recebe os dados não consumidos. Nesse caso, é o documento todo.
Em seguida, 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 o documento inteiro sem a declaração XML, a consulta pode ser especificada conforme mostrado a seguir:
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 no elemento raiz.
C. Especificando a metapropriedade xmltext para recuperar os dados não consumidos em uma coluna
Este exemplo usa OPENXML para criar uma exibição do conjunto de linhas do documento XML de exemplo. O exemplo mostra como recuperar dados XML não utilizados ao mapear o atributo de metapropriedade xmltext para uma coluna de rowset no OPENXML.
A coluna comment é identificada como a coluna de estouro ao mapeá-la para a metapropriedade @mp:xmltext. O parâmetro sinalizadores é definido como 9 (XML_ATTRIBUTE e XML_NOCOPY). Isso indica um mapeamento attribute-centric e que apenas os dados não consumidos devem ser copiados para a coluna de estouro.
Em seguida, a instrução SELECT vai devolver o conjunto de linhas fornecido por OPENXML:
Neste exemplo, a metapropriedade @mp:parentlocalname é definida para uma coluna, ParentLocalName, no conjunto de linhas gerado por OPENXML. Como resultado, esta coluna contém o nome local do elemento pai.
São especificadas duas colunas adicionais no conjunto de linhas, parent e comment. A coluna parent é mapeada para @mp:parentid e indica que a coluna contém a ID de XML do elemento pai do elemento. A coluna de comentário é identificada como a coluna de overflow ao mapeá-la para a metapropriedade @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 date já foram usadas, elas não aparecem na coluna de overflow.
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"/>