OPENXML에 메타 속성 지정Specify Metaproperties in OPENXML

XML 문서의 메타 속성 특성은 요소, 특성, 그 밖의 모든 DOM 노드와 같은 XML 항목의 속성을 설명하는 특성입니다.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. 이러한 특성은 물리적으로 XML 문서 텍스트에 존재하지 않습니다.These attributes do not physically exist in the XML document text. 하지만 OPENXML은 모든 XML 항목에 대해 이러한 메타 속성을 제공합니다.However, OPENXML provides these metaproperties for all the XML items. 이러한 메타 속성을 사용하면 로컬 위치 및 네임스페이스 정보와 같은 XML 노드 정보를 추출할 수 있습니다.These metaproperties allow you to extract information, such as local positioning and namespace information, of XML nodes. 이 정보는 텍스트에 명시적으로 표현된 것보다 자세한 정보를 제공합니다.This information provides you with more details than are apparent in the textual representation.

ColPattern 매개 변수를 사용하여 이러한 메타 속성을 OPENXML 문의 행 집합 열에 매핑할 수 있습니다.You can map these metaproperties to the rowset columns in an OPENXML statement by using the ColPattern parameter. 열에는 매핑될 메타 속성 값이 포함됩니다.The columns will contain the values of the metaproperties to which they are mapped. OPENXML 구문에 대한 자세한 내용은 OPENXML(Transact-SQL)을 참조하세요.For more information about the syntax of OPENXML, see OPENXML (Transact-SQL).

메타 속성 특성에 액세스하기 위해 SQL Server와 관련된 네임스페이스가 제공됩니다.To access the metaproperty attributes, a namespace that is specific to SQL Server is provided. 이 네임스페이스 urn:schemas-microsoft-com:xml-metaprop 를 사용하면 메타 속성 특성에 액세스할 수 있습니다.This namespace, urn:schemas-microsoft-com:xml-metaprop allows the user to access the metaproperty attributes. OPENXML 쿼리의 결과가 Edge 테이블 형식으로 반환되는 경우에는 Edge 테이블에 각 메타 속성 특성( 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.

메타 속성 특성 중 일부는 처리 용도로 사용됩니다.Some of the metaproperty attributes are used for processing purposes. 예를 들어 xmltext 메타 속성 특성은 오버플로 처리를 위해 사용됩니다.For example, the xmltext metaproperty attribute is used for overflow handling. 오버플로 처리란 문서에서 소비되지 않고 처리되지 않은 데이터를 의미합니다.Overflow handling refers to the unconsumed, unprocessed data in the document. OPENXML에 의해 생성된 행 집합에 있는 열 중 하나는 오버플로 열로 식별될 수 있습니다.One of the columns in the rowset that is generated by OPENXML can be identified as the overflow column. 이렇게 하려면 ColPattern 매개 변수를 사용하여 열을 xmltext 메타 속성으로 매핑합니다.You do this by mapping it to the xmltext metaproperty by using the ColPattern parameter. 그러면 열이 오버플로 데이터를 수신합니다.The column then receives the overflow data. flags 매개 변수는 해당 열에 모든 데이터 또는 소비되지 않은 데이터만 포함되는지 여부를 확인합니다.The flags parameter determines whether the column contains everything or only the unconsumed data.

다음 표는 구문 분석된 각각의 XML 요소가 처리하는 메타 속성 특성의 목록입니다.The following table lists the metaproperty attributes that each parsed XML element possesses. 이러한 메타 속성 특성은 네임스페이스 urn:schemas-microsoft-com:xml-metaprop를 사용하여 액세스할 수 있습니다.These metaproperty attributes can be accessed by using the namespace urn:schemas-microsoft-com:xml-metaprop. XML 문서에서 이러한 메타 속성을 사용하여 사용자가 직접 설정한 값은 모두 무시됩니다.Any value that the user sets directly in the XML document by using these metaproperties is ignored.

참고

XPath 탐색에서는 이러한 메타 속성을 참조할 수 없습니다.You cannot reference these metaproperties in any XPath navigation.

메타 속성 특성Metaproperty attribute 설명Description
@mp:id DOM 노드에 대해 시스템에서 생성된 문서 차원의 식별자를 제공합니다.Provides a system-generated, document-wide identifier of the DOM node. 문서가 다시 구문 분석되지 않는 한 이 ID는 동일한 XML 노드를 참조합니다.As long as the document is not reparsed, this ID refers to the same XML node.

XML ID가 0 이면 해당 요소가 루트 요소임을 나타냅니다.An XML ID of 0 indicates that the element is a root element. 해당 부모 XML ID는 NULL입니다.Its parent XML ID is NULL.
@mp:localname 노드 이름의 로컬 부분을 저장합니다.Stores the local part of the name of the node. 이 특성은 접두사 및 네임스페이스 URI와 함께 사용되어 요소 또는 특성 노드 이름을 지정합니다.It is used with a prefix and a namespace URI to name element or attribute nodes.
@mp:namespaceuri 현재 요소의 네임스페이스 URI를 제공합니다.Provides the namespace URI of the current element. 이 특성의 값이 NULL이면 네임스페이스가 없는 것입니다.If the value of this attribute is NULL, no namespace is present
@mp:prefix 현재 요소 이름의 네임스페이스 접두사를 저장합니다.Stores the namespace prefix of the current element name.

접두사가 없는 상태(NULL)에서 URI가 주어진 경우는 지정된 네임스페이스가 기본 네임스페이스임을 나타냅니다.If no prefix is present (NULL) and a URI is given, it indicates that the specified namespace is the default namespace. URI가 주어지지 않은 경우에는 네임스페이스가 연결되지 않습니다.If no URI is given, no namespace is attached.
@mp:prev 노드와 관련된 이전 형제를 저장합니다.Stores the previous sibling relative to a node. 이 특성은 문서에 있는 요소의 순서 정보를 제공합니다.This provides information about the ordering of elements in the document.

@mp:prev 에는 동일한 부모 요소를 가진 이전 형제의 XML ID가 포함됩니다.@mp:prev contains the XML ID of the previous sibling that has the same parent element. 요소가 형제 목록의 시작 부분에 있으면 @mp:prev 는 NULL입니다.If an element is at the front of the sibling list, @mp:prev is NULL.
@mp:xmltext 처리 목적으로 사용됩니다.Used for processing purposes. OPENXML의 오버플로 처리에 사용되는 방식의 요소 및 해당 특성의 텍스트 직렬화와 하위 요소입니다.It is the textual serialization of the element and its attributes, and also the subelements, as used in the overflow handling of OPENXML.

이 표에서는 계층 구조 정보를 검색할 수 있도록 허용하기 위해 제공되는 추가 부모 속성을 보여 줍니다.This table shows the additional parent properties that are provided and which allow you to retrieve information about the hierarchy.

부모 메타 속성 특성Parent metaproperty attribute DescriptionDescription
@mp:parentid ../@mp:id에 해당합니다.Corresponds to ../@mp:id
@mp:parentlocalname ../@mp:localname에 해당합니다.Corresponds to ../@mp:localname
@mp:parentnamespacerui ../@mp:namespaceuri에 해당합니다.Corresponds to ../@mp:namespaceuri
@mp:parentprefix ../@mp:prefix에 해당합니다.Corresponds to ../@mp:prefix

Examples

다음 예에서는 OPENXML을 사용하여 여러 행 집합 뷰를 만드는 방법을 보여 줍니다.The following examples illustrate how OPENXML is used to create different rowset views.

1.A. OPENXML 행 집합 열을 메타 속성에 매핑Mapping the OPENXML rowset columns to the metaproperties

이 예에서는 OPENXML을 사용하여 예제 XML 문서의 행 집합 뷰를 만듭니다.This example uses OPENXML to create a rowset view of the sample XML document. 특히 OPENXML 문에서 ColPattern 매개 변수를 사용하여 여러 가지 메타 속성 특성을 행 집합 열에 매핑할 수 있는 방법을 보여 줍니다.Specifically, it shows how the various metaproperty attributes can be mapped to rowset columns in an OPENXML statement by using the ColPattern parameter.

OPENXML 문에서는 다음을 보여 줍니다.The OPENXML statement illustrates the following:

  • id 열은 @mp:id 메타 속성 특성에 매핑됩니다. 즉, 열에는 요소에 대해 시스템에서 생성된 고유 XML ID가 포함됩니다.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.

  • parent 열은 @mp:parentid에 매핑됩니다. 즉, 열에는 요소의 부모에 대한 XML ID가 포함됩니다.The parent column is mapped to @mp:parentid and indicates that the column contains the XML ID of the parent of the element.

  • parentLocalName 열은 @mp:parentlocalname에 매핑됩니다. 즉, 열에는 부모의 로컬 이름이 포함됩니다.The parentLocalName column is mapped to @mp:parentlocalname and indicates that the column contains the local name of the parent.

    그런 다음 SELECT 문은 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  

다음은 결과입니다.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  

2.B. 전체 XML 문서 검색Retrieving the whole XML document

이 예에서는 OPENXML을 사용하여 예제 XML 문서를 하나의 열로 된 행 집합 뷰로 만듭니다.In this example, OPENXML is used to create a one-column rowset view of the sample XML document. 이 열 Col1xmltext 메타 속성에 매핑되며 오버플로 열이 됩니다.This column, Col1, is mapped to the xmltext metaproperty and becomes an overflow column. 그 결과 열이 소비되지 않은 데이터를 수신합니다.As a result, the column receives the unconsumed data. 이 경우에는 전체 문서입니다.In this case, it is the whole document.

그런 다음 SELECT 문은 완전한 행 집합을 반환합니다.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')  

XML을 선언하지 않고 전체 문서를 검색하기 위해서는 쿼리를 다음과 같이 지정할 수 있습니다.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  

쿼리는 이름 루트가 포함된 루트 요소와 해당 루트 요소에 포함된 데이터를 반환합니다.The query returns the root element that has the name root and the data that is contained by the root element

3.C. xmltext 메타 속성을 지정하여 열에서 소비되지 않은 데이터 검색Specifying the xmltext metaproperty to retrieve the unconsumed data in a column

이 예에서는 OPENXML을 사용하여 예제 XML 문서의 행 집합 뷰를 만듭니다.This example uses OPENXML to create a rowset view of the sample XML document. xmltext 메타 속성 특성을 OPENXML의 행 집합 열에 매핑하여 소비되지 않은 XML 데이터를 검색하는 방법을 설명합니다.The example shows how to retrieve unconsumed XML data by mapping the xmltext metaproperty attribute to a rowset column in OPENXML.

comment 열은@mp:xmltext 메타 속성에 매핑됨으로써 오버플로 열로 식별됩니다.The comment column is identified as the overflow column by mapping it to the @mp:xmltext metaproperty. flags 매개 변수는 9 (XML_ATTRIBUTE 및 XML_NOCOPY)로 설정됩니다.The flags parameter is set to 9 (XML_ATTRIBUTE and XML_NOCOPY). 이는 특성 중심 매핑을 나타내며 소비되지 않은 데이터만 오버플로 열에 복사되어야 함을 나타냅니다.This indicates attribute-centric mapping and indicates that only the unconsumed data should be copied to the overflow column.

그런 다음 SELECT 문은 OPENXML이 제공하는 행 집합을 반환합니다.The SELECT statement then returns the rowset provided by OPENXML.

이 예에서는 OPENXML이 생성한 행 집합의 열 @mp:parentlocalname 에 대해 ParentLocalName메타 속성이 설정됩니다.In this example, the @mp:parentlocalname metaproperty is set for a column, ParentLocalName, in the rowset generated by OPENXML. 결과적으로 이 열에는 부모 요소의 로컬 이름이 포함됩니다.As a result, this column contains the local name of the parent element.

두 개의 추가 열 parentcomment가 행 집합에 지정됩니다.Two additional columns are specified in the rowset, parent and comment. parent 열은 @mp:parentid에 매핑됩니다. 즉, 이 열에는 요소의 부모 요소에 대한 XML ID가 포함됩니다.The parent column is mapped to @mp:parentid and indicates that the column contains the XML ID of the parent element of the element. comment 열은 @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  

다음은 결과입니다.This is the result. oid 열과 date 열은 이미 소비되었으므로 오버플로 열에 나타나지 않습니다.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"/>  

참고 항목See Also

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