Указание метапродажей в OPENXML
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Атрибутами метасвойств в документе XML называются атрибуты, описывающие свойства сущностей XML, например элементов, атрибутов и других узлов DOM. Эти атрибуты физически не существуют в тексте XML-документа. Тем не менее инструкция OPENXML предоставляет эти метасвойства для всех сущностей XML. Эти метасвойства позволяют извлекать сведения, например данные о локальном положении и пространстве имен, об узлах XML. Эти сведения предоставляют более подробные данные, чем текстовое представление.
Метасвойства можно сопоставить со столбцами набора строк инструкции OPENXML при помощи параметра ColPattern . Столбцы будут содержать значения метаданных, с которыми они сопоставляются. Дополнительные сведения о синтаксисе OPENXML см. в разделе OPENXML (Transact-SQL).
Для доступа к атрибутам метасвойств предоставлено характерное для сервера SQL Server пространство имен. Это пространство urn:schemas-microsoft-com:xml-metaprop
имен позволяет пользователю получать доступ к атрибутам метапропастерии. Если результат запроса OPENXML возвращается в формате пограничной таблицы, граничная таблица содержит один столбец для каждого атрибута метапроперти, за исключением xmltext
метапропастерства.
Некоторые атрибуты метасвойств используются в целях обработки. Например, xmltext
атрибут метапропастерии используется для обработки переполнения. Управление переполнением подразумевает обработку невостребованных, необработанных данных документа. Один столбец набора строк, сформированного инструкцией OPENXML, можно назначить столбцом переполнения. Для этого необходимо сопоставить его с xmltext
метапропастерством с помощью параметра ColPattern . После этого в столбец будут копироваться данные переполнения. Параметр flags определяет, какие данные содержит столбец: все или только невостребованные.
В следующей таблице перечислены атрибуты метасвойств, которыми обладают все анализируемые элементы XML. Доступ к этим атрибутам метапропастерии можно получить с помощью пространства urn:schemas-microsoft-com:xml-metaprop
имен. Значение, заданное непосредственно в документе XML с помощью метасвойств, игнорируется.
Примечание.
На метасвойства нельзя ссылаться при перемещении по XML с помощью XPath.
Атрибут метасвойства | Description |
---|---|
@mp:id |
Формируемый системой идентификатор узла DOM, действующий в пределах документа. Если документ не перепарирован, этот идентификатор ссылается на тот же XML-узел. XML-идентификатор 0 указывает, что элемент является корневым элементом. У такого узла идентификатор XML родительского элемента равен значению NULL. |
@mp:localname |
Локальная часть имени узла. Применяется вместе с префиксом и URI пространства имен для обозначения элементов и узлов атрибутов. |
@mp:namespaceuri |
URI пространства имен текущего элемента. Если значение атрибута равно NULL, пространство имен не существует. |
@mp:prefix |
Префикс пространства имен текущего элемента. Если префикс отсутствует (равен значению NULL), а URI задан, значит, указанное пространство имен используется по умолчанию. Если URI не задан, пространство имен не присоединяется. |
@mp:prev |
Предыдущий элемент того же уровня. Благодаря этому можно получить сведения о порядке элементов документа.@mp:prev содержит идентификатор XML предыдущего соседнего элемента, который является потомком того же родителя. У первого элемента в списке соседних узлов атрибут @mp:prev равен значению NULL. |
@mp:xmltext |
Применяется для обработки. Текстовая сериализация элемента, его атрибутов и подэлементов, которая используется при управлении переполнением в инструкции OPENXML. |
В следующей таблице перечислены дополнительные родительские свойства, которые позволяют получить сведения об иерархии.
Родительский атрибут метасвойства | Description |
---|---|
@mp:parentid |
Соответствует ../\@mp:id |
@mp:parentlocalname |
Соответствует ../\@mp:localname |
@mp:parentnamespacerui |
Соответствует ../\@mp:namespaceuri |
@mp:parentprefix |
Соответствует ../\@mp:prefix |
Примеры
Следующие примеры демонстрируют, как при помощи инструкции OPENXML создать различные представления наборов строк.
А. Сопоставление столбцов набора строк OPENXML с метапромышлениями
В этом примере инструкция OPENXML применяется для создания представления набора строк учебного документа XML. В частности, пример демонстрирует, как различные атрибуты метасвойств можно связать со столбцами набора строк инструкции OPENXML при помощи параметра ColPattern .
Инструкция OPENXML иллюстрирует следующее:
Столбец
id
сопоставляется с атрибутом@mp:id
metaproperty и указывает, что столбец содержит созданный системой уникальный XML-идентификатор элемента.Столбец
parent
сопоставляется и@mp:parentid
указывает, что столбец содержит XML-идентификатор родительского элемента.Столбец
parentLocalName
сопоставляется и@mp:parentlocalname
указывает, что столбец содержит локальное имя родительского элемента.
Инструкция SELECT возвращает набор строк, предоставленных 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;
Результат:
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. Получение всего XML-документа
В этом примере инструкция OPENXML применяется для создания представления набора строк из одного столбца учебного XML-документа. Этот столбец Col1
сопоставляется с xmltext
метапропаптом и становится столбцом переполнения. В результате столбец получает невостребованные данные. В этом случае это весь документ.
Затем инструкция SELECT возвращает полный набор строк.
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')
Чтобы получить весь документ без объявления XML, запрос можно указать следующим образом:
SELECT *
FROM OPENXML (@idoc, '/root')
WITH (Col1 ntext '@mp:xmltext')
EXEC sp_xml_removedocument @idoc;
Запрос возвращает корневой элемент, имеющий имя, и данные, которые он содержит.
C. Определение метасвойства xmltext для получения невостребованных данных в столбце
В этом примере инструкция OPENXML применяется для создания представления набора строк учебного документа XML. В примере показано, как получить неуправляемые XML-данные путем сопоставления атрибута xmltext
метапромышленности с столбцом набора строк в OPENXML.
Столбец comment
определяется как столбец переполнения путем сопоставления его с @mp:xmltext
метапропастерией. Параметр флагов имеет 9
значение (XML_ATTRIBUTE и XML_NOCOPY). Это указывает attribute-centric
на сопоставление и указывает, что в столбец переполнения должны быть скопированы только неуправляемые данные.
Затем инструкция SELECT возвращает набор строк, предоставленных OPENXML.
В этом примере @mp:parentlocalname
метапропапты задаются для столбца в наборе строк, ParentLocalName
созданном OPENXML. В результате этот столбец содержит локальное имя родительского элемента.
В наборе строк указаны два дополнительных столбца и parent
comment
. Столбец parent
сопоставляется и @mp:parentid
указывает, что столбец содержит XML-идентификатор родительского элемента элемента элемента. Столбец comment указан в качестве столбца переполнения путем привязки к метасвойству @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;
Результат. Так как столбцы и столбцы даты уже используются, они не отображаются в столбце переполнения.
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"/>