Java XML - xsd location path
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<!-- location path
'/' - 루트 노드 | 구분자
절대경로 :
/A/B/C/D
상대경로(현재 A노드에서 D노드를 찾아가는 경우) :
./B/C/D 또는 B/C/D
여기서 B,C,D,A 를 location step(location path 를 구성하는 요소)
- location step 작성 형식(요와같은형태로쓰면해당노드를찾아갈수있다)
Axis::NodeTest[Predicate]
Axis - 노드를 찾기 위한 검색방향을 지정
NodeTest - 찾고자 하는 노드이름
Predicate - 필터링하기위한 표현식을 의미
Axis 종류: ancestor(조상축), ancestor-or-self, parent(부모축), self, attribute, child, descendant(자손들축), descendant-or-self,
preceding, preceding-sibling, following, following-sibling
[NodeTest에 올 수 있는 것들: 엘리먼트명, 속성명, 함수 등이 올 수 있다.]
Axis::엘리먼트명 (지정된 축에서 해당 엘리먼트명을 갖는 노드를 선택한다.)
Axis::속성명 (지정된 축에서 해당 속성명을 갖는 노드를 선택한다.)
Axis::* (지정된 축의 모든 엘리먼트의 노드들을 선택한다.)
Axis::접두사:* (지정된 네임스페이스 접두사를 갖는 모든 노드를 선택한다.)
Axis::접두사:로컬이름(지정된 네임스페이스 접두사를 갖고 로컬이름과 동일한 노드를 선택한다.)
Axis::node() (지정된 축의 모든 노드(엘리먼트 노드, 텍스트노드)들을 선택한다.)
Axis::comment() (지정된 축의 모든 주석 노드들을 선택한다.)
Axis::text() (지정된 축의 텍스트 노드를 선택한다.)
Axis::processing-instruction() (지정된 축의 processing-instruction 노드들을 선택)
사용예> descendant::book = 자손노드중에서 book 노드를 가리키는 location step을 의미
child::title = 자식 노드 중에서 title 노드를 가리키는 location step을 의미
attribute::id = 속성 노드 중에서 id노드를 가리키는 location step을 의미
[Predicate에 올수 있는 표현식]
: NodeTest에서 선택된 노드 중에서 특별한 노드를 선택하기 위한 필터링과 관련된 표현식을 의미
Axis::노드명[조건문 또는 (true또는 false를 반환하는 함수)]
:지정된 축에서 조건문 또는 함수의 반환값이 true가 되는 노드명만 필터링된다.
조건문에서 사용하는 연산자들
. 사칙연산 : + - * div(나눗셈), mod(나머지연산자)
. 비교연산 : < > <= >=
. 등가비교 : =, !=
. 논리연산 : AND, OR
일반적으로 많이 사용하는 Predicate 표현식
. Axis::노드명[child::노드명 = "값"] - 자식 노드명의 콘텐트 내용이 주어진 값과 동일한 노드명 선택
. Axis::노드명[attribute::속성명="값"] - 속성명의 속성값이 주어진값과 동일한 노드명 선택
. Axis::노드명[contains(child::노드명, "값")] - 자식 노드명의 콘텐트가 주어진 값을 포함하고 있는 노드명 선택
- 단축형 location step
축의이름을 생략한다.
location path가 길어지는 것을 방지하기 위해서 축의 이름을 생략해서 사용할 수 있는데
이것을 단축형 location step 이라고 한다.
단축형식
. child::엘리먼트명 >>>> 엘리먼트명 (축을 생략하고 노드명만 적는 방식)
. /child::엘리먼트명/child::엘리먼트명 >>>>> /엘리먼트명/엘리먼트명
. /child::엘리먼트명[child::엘리먼트명="값"] >>>> /엘리먼트명[엘리먼트명="값"]
. attribute::속성명 >>>> @속성명
. /child::엘리먼트명/attribute::속성명 >>>> /엘리먼트명/@속성명
. descendant-or-self::엘리먼트명 >>>> //엘리먼트명
. child::엘리먼트명/descendant-or-self::엘리먼트명 >>>> /엘리먼트명//엘리먼트명
. self::node() >>>> .
. parent::node() >>>> ..
. child::엘리먼트명/parent::node()/child::엘리먼트명 >>>> /엘리먼트명/../엘리먼트명
-->
</xs:schema>