XPath(XML Path Language) 쿼리는 URL의 일부로 지정하거나 템플릿 내에 지정할 수 있습니다. 매핑 스키마에 따라 이 결과 조각의 구조가 결정되고 값은 데이터베이스에서 검색됩니다. 이 프로세스는 CREATE VIEW 문을 사용하여 뷰를 만들고 이러한 뷰에 대한 SQL 쿼리를 작성하는 것과 개념적으로 유사합니다.
참고
SQLXML 4.0의 XPath 쿼리를 이해하려면 템플릿 및 매핑 스키마와 같은 관련 개념과 XML 뷰에 대해 잘 알고 있어야 합니다. 자세한 내용은 주석이 추가된 XSD 스키마 소개(SQLXML 4.0) 및 W3C(World Wide Web Consortium)에서 정의한 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>
이 문서에서 <고객은> 요소 노드이고 cid 는 특성 노드이고 "중요" 는 텍스트 노드입니다.
XPath는 XML 문서에서 노드 집합을 선택하는 데 사용되는 그래프 탐색 언어입니다. 각 XPath 연산자는 이전 XPath 연산자에서 선택한 노드 집합을 기반으로 노드 집합을 선택합니다. 예를 들어 고객> 노드 집합<이 지정된 경우 XPath는 날짜 특성 값이 "7/14/1999"인 모든 <Order> 노드를 선택할 수 있습니다. 결과 노드 집합에는 주문 날짜가 1999년 7월 14일인 모든 주문이 포함됩니다.
XPath 언어는 W3C(World Wide Web Consortium)에서 표준 탐색 언어로 정의됩니다. 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에서는 문서 순서가 항상 확실하지는 않습니다. 따라서
following
과 같이 문서 순서를 사용하는 숫자 조건자와 축은 구현되지 않습니다.또한 문서 순서가 없다는 것은 해당 노드가 단일 행의 단일 열에 매핑되는 경우에만 노드의 문자열 값을 평가할 수 있다는 것을 의미하기도 합니다. 자식 요소가 있는 요소, IDREFS 또는 NMTOKENS 노드는 문자열로 변환할 수 없습니다.
참고
경우에 따라
key-fields
주석이나relationship
주석의 키로 인해 문서 순서가 결정적이 될 수도 있지만 그러나 이러한 주석의 기본 사용은 아닙니다. 자세한 내용은 sql:key-fields를 사용하여 키 열 식별(SQLXML 4.0) 및 sql:relationship를 사용하여 관계 지정(SQLXML 4.0)을 참조하세요.데이터 형식
SQLXML 4.0에서는 XPath
string
,number
및boolean
데이터 형식의 구현에 제약이 따릅니다. 자세한 내용은 XPath 데이터 형식(SQLXML 4.0)을 참조하세요.교차곱 쿼리
SQLXML 4.0에서는
Customers[Order/@OrderDate=Order/@ShipDate]
와 같은 교차곱 XPath 쿼리를 지원하지 않습니다. 이 쿼리는 Order의 OrderDate가 ShipDate와 동일한 Order가 있는 모든 Customer를 선택합니다.그러나 SQLXML 4.0에서는 OrderDate가 ShipDate와 동일한 Order가 있는 Customer를 선택하는
Customer[Order[@OrderDate=@ShippedDate]]
와 같은 쿼리를 지원하지 않습니다.오류 처리 및 보안
사용되는 스키마 및 XPath 쿼리 식에 따라 Transact-SQL 오류가 특정 조건에서 사용자에게 노출될 수 있습니다.
다음 섹션의 표에서는 이러한 영역에서 SQLXML 4.0의 XPath 쿼리 구현이 W3C 사양과 어떻게 다른지 자세히 설명합니다.
지원되는 기능
다음 표에서는 SQLXML 4.0에서 구현되는 XPath 언어의 기능을 보여 줍니다.
기능 | 항목 | 샘플 쿼리에 대한 링크 |
---|---|---|
Axes | attribute , child , parent 및 self 축 |
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 언어의 기능을 보여 줍니다.
기능 | 항목 |
---|---|
Axes | ancestor , ancestor-or-self , descendant , descendant-or-self (//) , following , following-sibling , namespace , preceding , preceding-sibling |
숫자 값 조건자 | |
산술 연산자 | mod |
노드 함수 | ancestor , ancestor-or-self , descendant , descendant-or-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를 지정해야 합니다.