XPath 쿼리 사용 소개(SQLXML 4.0)

적용 대상:SQL ServerAzure SQL Database

XPath(XML Path Language) 쿼리는 URL의 일부 또는 템플릿 내에서 지정할 수 있습니다. 매핑 스키마는 이 결과 조각의 구조를 결정하며 값은 데이터베이스에서 검색됩니다. 이 프로세스는 CREATE VIEW 문을 사용하여 뷰를 만들고 이러한 뷰에 대한 SQL 쿼리를 작성하는 것과 개념적으로 유사합니다.

참고 항목

SQLXML 4.0의 XPath 쿼리를 이해하려면 XML 보기 및 템플릿 및 매핑 스키마와 같은 관련 개념을 잘 알고 있어야 합니다. 자세한 내용은 주석이 추가된 XSD 스키마 소개(SQLXML 4.0) 및 W3C(World Wide Web 컨소시엄)에서 정의한 XPath 표준을 참조하세요.

XML 문서는 요소 노드, 특성 노드, 텍스트 노드 등의 노드로 구성됩니다. 예를 들어 다음 XML 문서를 고려해 보세요.

<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>  

이 문서에서 <Customer> 는 요소 노드이고, cid 는 특성 노드이고 , "중요" 는 텍스트 노드입니다.

XPath는 XML 문서에서 노드 집합을 선택하는 데 사용되는 그래프 탐색 언어입니다. 각 XPath 연산자는 이전 XPath 연산자에서 선택한 노드 집합을 기반으로 노드 집합을 선택합니다. 예를 들어 고객> 노드 집합<이 지정된 경우 XPath는 날짜 특성 값이 "7/14/1999"인 모든< Order> 노드를 선택할 수 있습니다. 결과 노드 집합에는 주문 날짜가 1999년 7월 14일인 모든 주문이 포함됩니다.

XPath 언어는 W3C(World Wide Web 컨소시엄)에 의해 표준 탐색 언어로 정의됩니다. SQLXML 4.0은 에 있는 http://www.w3.org/TR/1999/PR-xpath-19991008.htmlW3C XPath 사양의 하위 집합을 구현합니다.

다음은 W3C XPath 구현과 SQLXML 4.0 구현 간의 주요 차이점입니다.

  • 루트 쿼리

    SQLXML 4.0은 루트 쿼리(/)를 지원하지 않습니다. 모든 XPath 쿼리는 스키마의 최상위 <ElementType> 에서 시작해야 합니다.

  • 오류 보고

    W3C XPath 사양은 오류 조건을 정의하지 않습니다. 노드를 선택하지 못하는 XPath 쿼리는 빈 노드 집합을 반환합니다. SQLXML 4.0에서 쿼리는 여러 유형의 오류 메시지를 반환할 수 있습니다.

  • 문서 순서

    SQLXML 4.0에서 문서 순서가 항상 결정되지는 않습니다. 따라서 문서 순서를 사용하는 숫자 조건자와 축(예: 다음)은 구현되지 않습니다.

    또한 문서 순서가 없다는 것은 해당 노드가 단일 행의 단일 열에 매핑되는 경우에만 노드의 문자열 값을 평가할 수 있다는 것을 의미하기도 합니다. 자식 요소나 IDREFS 또는 NMTOKENS 노드가 있는 요소는 문자열로 변환할 수 없습니다.

    참고 항목

    경우에 따라 관계 주석의 키 필드 주석 또는 키 로 인해 문서 순서가 결정적일 수 있습니다. 그러나 이러한 주석의 기본 사용은 아닙니다. 자세한 내용은 sql:key-fields를 사용하여 키 열 식별(SQLXML 4.0)sql:relationship를 사용하여 관계 지정(SQLXML 4.0)을 참조하세요.

  • Data types

    SQLXML 4.0에는 XPath 문자열, 숫자부울 데이터 형식을 구현하는 데 제한이 있습니다. 자세한 내용은 XPath 데이터 형식(SQLXML 4.0)을 참조하세요.

  • 제품 간 쿼리

    SQLXML 4.0은 다음과 같은 Customers[Order/@OrderDate=Order/@ShipDate]제품 간 XPath 쿼리를 지원하지 않습니다. 이 쿼리는 Order의 OrderDate가 ShipDate와 동일한 Order가 있는 모든 Customer를 선택합니다.

    그러나 SQLXML 4.0은 OrderDate가 ShipDate와 같은 주문이 있는 고객을 선택하는 등의 Customer[Order[@OrderDate=@ShippedDate]]쿼리를 지원합니다.

  • 오류 처리 및 보안

    사용되는 스키마 및 XPath 쿼리 식에 따라 Transact-SQL 오류가 특정 조건에서 사용자에게 노출될 수 있습니다.

다음 섹션의 표에서는 SQLXML 4.0의 XPath 쿼리 구현이 이러한 영역의 W3C 사양과 어떻게 다른지에 대한 세부 정보를 제공합니다.

지원되는 기능

다음 표에서는 SQLXML 4.0에서 구현되는 XPath 언어의 기능을 보여줍니다.

기능 Item 샘플 쿼리에 연결
특성, 자식, 부모자체 XPath 쿼리에 축 지정(SQLXML 4.0)
연속 조건자와 중첩된 조건자를 포함한 부울 반환 조건자 XPath 쿼리에서 산술 연산자 지정(SQLXML 4.0)
모든 관계형 연산자 =, !=, <, <=, >, >= XPath 쿼리에 관계형 연산자 지정(SQLXML 4.0)
산술 연산자 +, -, *, div XPath 쿼리에서 산술 연산자 지정(SQLXML 4.0)
명시적 변환 함수 number(), string(), Boolean() XPath 쿼리에 명시적 변환 함수 지정(SQLXML 4.0)
부울 연산자 AND, OR XPath 쿼리에서 부울 연산자 지정(SQLXML 4.0)
부울 함수 true(), false(), not() XPath 쿼리에서 부울 함수 지정(SQLXML 4.0)
XPath 변수 XPath 쿼리에서 XPath 변수 지정(SQLXML 4.0)

지원되지 않는 기능

다음 표에서는 SQLXML 4.0에서 구현되지 않는 XPath 언어의 기능을 보여 줍니다.

기능 Item
ancestor, ancestor-or-self, descendant, descendant 또는 self (//), following, following-sibling, namespace, preceding, preceding-sibling
숫자 반환 조건자
산술 연산자 mod
노드 함수 ancestor, ancestor-or-self, descendant, descendant 또는 self (//), following, following-sibling, namespace, preceding, preceding-sibling
문자열 함수 string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalize(), translate()
부울 함수 lang()
숫자 함수 sum(), floor(), ceiling(), round()
Union 연산자 |

템플릿에서 XPath 쿼리를 지정하는 경우 다음 동작을 확인합니다.

  • XPath는 XML에 특별한 의미가 있는 문자(템플릿은 XML 문서)와 같은 < 문자를 포함할 수 있습니다. XML 인코딩을 사용하여 이러한 문자를 이스케이프하거나 URL에서 XPath를 지정해야 합니다.

참고 항목

SQLXML 4.0에서 XPath 쿼리 사용