Share via


시퀀스 및 QNames(XQuery)

적용 대상:SQL Server

이 항목에서는 XQuery의 다음과 같은 기본 개념에 대해 설명합니다.

  • 순서

  • QName 및 미리 정의된 네임스페이스

순서

XQuery에서 식의 결과는 XSD 원자성 형식의 XML 노드 및 인스턴스 목록으로 구성된 시퀀스입니다. 시퀀스의 개별 항목을 항목이라고 합니다. 시퀀스의 항목은 다음 중 하나일 수 있습니다.

  • 요소, 특성, 텍스트, 처리 명령, 주석 또는 문서와 같은 노드

  • XSD 단순 형식의 인스턴스와 같은 원자성 값

예를 들어 다음 쿼리는 두 개의 요소 노드 항목의 시퀀스를 생성합니다.

SELECT Instructions.query('  
     <step1> Step 1 description goes here</step1>,  
     <step2> Step 2 description goes here </step2>  
') AS Result  
FROM Production.ProductModel  
WHERE ProductModelID=7;  
  

결과는 다음과 같습니다.

<step1> Step 1 description goes here </step1>  
<step2> Step 2 description goes here </step2>   

이전 쿼리에서 , 구조의 끝에 있는 쉼표(<step1>)는 시퀀스 생성자이며 필수 요소입니다. 결과의 공백은 그림에 대해서만 추가되며 이 설명서의 모든 예제 결과에 포함됩니다.

다음은 시퀀스에 대해 알아야 할 추가 정보입니다.

  • 쿼리에 다른 시퀀스가 포함된 시퀀스가 생성되면 포함된 시퀀스가 컨테이너 시퀀스로 평면화됩니다. 예를 들어 시퀀스((1,2, (3,4,5)),6)는 데이터 모델에서 평면화됩니다(1, 2, 3, 4, 5, 6).

    DECLARE @x xml;  
    SET @x = '';  
    SELECT @x.query('(1,2, (3,4,5)),6');  
    
  • 빈 시퀀스는 항목이 포함되지 않은 시퀀스입니다. "()"로 표시됩니다.

  • 항목이 하나만 있는 시퀀스는 원자성 값으로 처리될 수 있으며 그 반대의 경우도 마찬가지입니다. 즉, (1) = 1입니다.

이 구현에서 시퀀스는 동질적이어야 합니다. 즉, 원자성 값 시퀀스 또는 노드 시퀀스가 있습니다. 예를 들어 유효한 시퀀스는 다음과 같습니다.

DECLARE @x xml;  
SET @x = '';  
-- Expression returns a sequence of 1 text node (singleton).  
SELECT @x.query('1');  
-- Expression returns a sequence of 2 text nodes  
SELECT @x.query('"abc", "xyz"');  
-- Expression returns a sequence of one atomic value. data() returns  
-- typed value of the node.  
SELECT @x.query('data(1)');  
-- Expression returns a sequence of one element node.   
-- In the expression XML construction is used to construct an element.  
SELECT @x.query('<x> {1+2} </x>');  

이질적인 시퀀스는 지원되지 않으므로 다음 쿼리는 오류를 반환합니다.

SELECT @x.query('<x>11</x>, 22');  

Qname

XQuery의 모든 식별자는 QName입니다. QName은 네임스페이스 접두사 및 로컬 이름으로 구성됩니다. 이 구현에서 XQuery에 있는 변수 이름은 QName이며 접두사가 포함될 수 없습니다.

형식 화되지 않은 xml 변수에 대해 쿼리를 지정하는 다음 예제를 살펴보겠습니다.

DECLARE @x xml;  
SET @x = '<Root><a>111</a></Root>';  
SELECT @x.query('/Root/a');  

식(/Root/a) Root 에서 a QNames입니다.

다음 예제에서는 형식 화된 xml 열에 대해 쿼리를 지정합니다. 쿼리는 첫 번째 작업 센터 위치의 모든 <단계> 요소를 반복합니다.

SELECT Instructions.query('  
   declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
for $Step in /AWMI:root/AWMI:Location[1]/AWMI:step  
      return  
           string($Step)   
') AS Result  
FROM Production.ProductModel  
WHERE ProductModelID=7;  

쿼리 식에서 다음에 유의하십시오.

  • AWMI root, AWMI:Location, AWMI:step모든 $Step QNames입니다. AWMI는 접두사이고 root, LocationStep 모든 로컬 이름입니다.

  • $step 변수는 QName이며 접두사가 없습니다.

다음 네임스페이스는 SQL Server에서 XQuery 지원과 함께 사용하기 위해 미리 정의되어 있습니다.

접두사 URI
Xs http://www.w3.org/2001/XMLSchema
Xsi http://www.w3.org/2001/XMLSchema-instance
xdt http://www.w3.org/2004/07/xpath-datatypes
Fn http://www.w3.org/2004/07/xpath-functions
(접두사 없음) urn:schemas-microsoft-com:xml-sql
sqltypes https://schemas.microsoft.com/sqlserver/2004/sqltypes
xml http://www.w3.org/XML/1998/namespace
(접두사 없음) https://schemas.microsoft.com/sqlserver/2004/SOAP

만드는 모든 데이터베이스에는 sys XML 스키마 컬렉션이 있습니다. 사용자가 만든 XML 스키마 컬렉션에서 액세스할 수 있도록 이러한 스키마를 예약합니다.

참고 항목

이 구현에서는 XQuery 사양http://www.w3.org/2004/07/xquery-local-functionslocal 설명된 대로 접두사를 지원하지 않습니다.

참고 항목

XQuery 기본 사항