요소 특성을 형식 특성으로 ID 지정할 수 있으며 IDREFS 해당 특성을 사용하여 참조할 수 있습니다. 이렇게 하면 문서 내 링크를 사용할 수 있으며 관계형 데이터베이스의 기본 키 및 외래 키 관계와 유사합니다.
이 예제에서는 ID 및 IDREFS 지시문을 사용하여 ID 및 IDREFS 형식의 특성을 만드는 방법을 보여 줍니다. ID는 정수 값일 수 없으므로 이 예제의 ID 값은 변환됩니다. 즉, 특정한 이미지로 정형화되었습니다. 접두사는 ID 값에 사용됩니다.
다음과 같이 XML을 생성한다고 가정합니다.
<Customer CustomerID="C1" SalesOrderIDList=" O11 O22 O33..." >
<SalesOrder SalesOrderID="O11" OrderDate="..." />
<SalesOrder SalesOrderID="O22" OrderDate="..." />
<SalesOrder SalesOrderID="O33" OrderDate="..." />
...
</Customer>
SalesOrderIDList 특성을 가진 <Customer> 요소는 <SalesOrder> 요소의 SalesOrderID 특성을 참조하는 다중값 특성입니다. 이 링크를 설정하려면 SalesOrderID 형식의 특성이 선언되어야 하며, SalesOrderIDList 요소의 <Customer> 특성은 IDREFS 형식으로 선언되어야 합니다. 고객이 여러 주문을 요청할 수 있으므로 형식이 IDREFS 사용됩니다.
형식의 IDREFS 요소에도 두 개 이상의 값이 있습니다. 따라서 동일한 태그, 부모 및 키 열 정보를 다시 사용하는 별도의 select 절을 사용해야 합니다.
ORDER BY 그런 다음 값을 구성하는 IDREFS 행의 시퀀스가 부모 요소 아래에 그룹화되어 표시되는지 확인해야 합니다.
원하는 XML을 생성하는 쿼리입니다. 쿼리는 ID 및 IDREFS 지시문을 사용하여 열 이름(SalesOrder!2!SalesOrderID!ID, Customer!1!SalesOrderIDList!IDREFS)의 형식을 덮어씁니다.
USE AdventureWorks2012;
GO
SELECT 1 as Tag,
0 as Parent,
C.CustomerID [Customer!1!CustomerID],
NULL [Customer!1!SalesOrderIDList!IDREFS],
NULL [SalesOrder!2!SalesOrderID!ID],
NULL [SalesOrder!2!OrderDate]
FROM Sales.Customer C
UNION ALL
SELECT 1 as Tag,
0 as Parent,
C.CustomerID,
'O-'+CAST(SalesOrderID as varchar(10)),
NULL,
NULL
FROM Sales.Customer AS C
INNER JOIN Sales.SalesOrderHeader AS SOH
ON C.CustomerID = SOH.CustomerID
UNION ALL
SELECT 2 as Tag,
1 as Parent,
C.CustomerID,
NULL,
'O-'+CAST(SalesOrderID as varchar(10)),
OrderDate
FROM Sales.Customer AS C
INNER JOIN Sales.SalesOrderHeader AS SOH
ON C.CustomerID = SOH.CustomerIDORDER BY [Customer!1!CustomerID] ,
[SalesOrder!2!SalesOrderID!ID],
[Customer!1!SalesOrderIDList!IDREFS]
FOR XML EXPLICIT;