XPath 쿼리 사용 소개(SQLXML 4.0)
적용 대상: SQL Server Azure 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)을 참조하세요.
데이터 형식
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를 지정해야 합니다.