이것은 구현에 따라 다르므로 모든 XML 데이터베이스에 대해이를 일반화 할 수 없습니다. 이 간단한 경우에는 모든 데이터베이스에서 동일하다고 생각합니다. 중요하지 않습니다.
여기서 BaseX에 대해 설명 할 예정입니다. 첫 번째 구조를 사용하고 <A/>
요소를 가져 오려고한다고 가정 해 보겠습니다.
//A[Name/@n = "John"]
: 아마도 다음과 같을 것이다
db:text("your-database", "John")/parent::*:Name/parent::*:A
두 번째 데이터 구조는 XPath 반면 : 그래서 당신은
//A[Name = "John"]
이 다음 쿼리를 최적화 할 것 같은 XPath를 사용
은
db:attribute("your-database", "John")/self::*:n/parent::*:Name/parent::*:A
여러분이 볼 수있는 것처럼, 하나의 경로 단계를 제외하고는 (속성에 액세스해야하기 때문에) 매우 쌌습니다. 가장 큰 차이점은 db:text()
대 db:attribute()
입니다. 그러나 documented으로,이 함수는 모두 값 인덱스 (있는 경우)를 사용하며 (기본적으로) 인덱스 조회 덕분에 매우 빠릅니다.
실제로 XML 기반 응용 프로그램을 설계하고 나중에 XQuery를 사용하여 정보를 검색하려는 경우 다른 병목 현상이 발생합니다. 쿼리를 사용하는 인덱스가 아닌 인덱스 또는 for 중첩 된 루프
이 두 변형의 차이는 XSLT를 개발하는 동안 만들 수있는 다른 디자인 결정 (예 : 색인 사용, 템플릿 일치 패턴, XSLT 용 이진 도구 선택, 숫자 공구 호출 수). 구체적인 경우에는 속성의 내용이 시작 태그와 닫기 태그 사이의 하위 트리의 일반적인 경우와 비교하여 비교적 제한적이기 때문에 속성 기반 변형이 약간 더 간단한 구문 분석 요구 사항으로 인해 약간 더 빠를 수도 있습니다. –