경로 식 - 축약된 구문 사용
적용 대상: SQL Server
XQuery에서 경로 식 이해의 모든 예제는 경로 식에 대해 축약되지 않은 구문을 사용합니다. 경로 식의 축 단계에 대한 축 단계의 축 구문에는 축 이름 및 노드 테스트가 포함되며, 이중 콜론으로 구분되고 0개 이상의 단계 한정자 뒤에 잇습니다.
예시:
child::ProductDescription[attribute::ProductModelID=19]
XQuery는 경로 식에 사용할 다음 약어를 지원합니다.
자식 축이 기본 축입니다. 따라서 자식:: 축은 식의 단계에서 생략할 수 있습니다. 예를 들어 다음과
/child::ProductDescription/child::Summary
같이/ProductDescription/Summary
작성할 수 있습니다.특성 축은 @으로 축을 축약할 수 있습니다. 예를 들어 다음과
/child::ProductDescription[attribute::ProductModelID=10]
같이/ProductDescription[@ProductModelID=10]
작성할 수 있습니다./descendant-or-self::node()/는 //로 축약할 수 있습니다. 예를 들어 다음과
/descendant-or-self::node()/child::act:telephoneNumber
같이//act:telephoneNumber
작성할 수 있습니다.이전 쿼리는 Contact 테이블의 AdditionalContactInfo 열에 저장된 모든 전화 번호를 검색합니다. AdditionalContactInfo에 대한 스키마는 telephoneNumber> 요소가 문서의 아무 곳에나 나타날 수 있는 방식으로 <정의됩니다. 따라서 모든 전화 번호를 검색하려면 문서의 모든 노드를 검색해야 합니다. 검색은 문서의 루트에서 시작하여 모든 하위 노드를 통해 계속됩니다.
다음 쿼리에서는 특정 고객 연락처에 대한 모든 전화 번호를 검색합니다.
SELECT AdditionalContactInfo.query(' declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes"; declare namespace crm="https://schemas.adventure-works.com/Contact/Record"; declare namespace ci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo"; /descendant-or-self::node()/child::act:telephoneNumber ') as result FROM Person.Contact WHERE ContactID=1
경로 식을 축약된 구문
//act:telephoneNumber
으로 바꾸면 동일한 결과가 표시됩니다.한 단계의 self::node() 는 단일 점(.)으로 축약할 수 있습니다. 그러나 점이 자체::node()와 동일하거나 서로 교환할 수 없습니다.
예를 들어 다음 쿼리에서 점의 사용은 노드가 아닌 값을 나타냅니다.
("abc", "cde")[. > "b"]
단계의 parent::node() 는 이중 점(..)으로 축약할 수 있습니다.