본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

XML 질의 언어(XML Query Language)는 트리 구조로 된 XML 문서에서 원하는 요소·속성·값을 찾아내고, 걸러 내고, 새 XML 로 다시 구성하기 위해 쓰는 언어로, W3C 의 XPath·XQuery 와 SQL 의 XML 확장인 SQL/XML 이 대표적이다.

관계형 데이터는 행과 열로 된 평평한 표라서 SQL 로 질의한다. XML 은 요소가 요소를 품는 계층(트리) 구조이고, 같은 요소가 몇 번 나올지, 어떤 요소가 빠질지 정해지지 않은 반구조적(semi-structured) 데이터다. 그래서 "몇 번째 단계의 어떤 요소" 를 가리키는 경로 표현과 순서·중첩을 다루는 기능이 필요하다. 1990년대 후반 XML-QL, Lorel, XQL, Quilt 같은 연구 언어가 나왔고, W3C 가 이를 모아 XPath 와 XQuery 로 표준화했다.

언어 표준 하는 일 예
XPath W3C 권고(1.0 1999년, 3.1 2017년) 경로 표현식으로 문서 트리에서 노드를 선택한다. 축(child, parent, descendant 등), 노드 테스트, 조건(술어 [ ]) 으로 이루어진다 /library/book[price > 30]/title
XQuery W3C 권고(1.0 2007년, 3.1 2017년) XPath 를 포함하며 FLWOR 식으로 검색·조인·정렬·재구성까지 하는 XML 의 SQL이다. 결과를 새 XML 로 만든다 아래 예
XSLT W3C 권고 XML 을 다른 XML·HTML·텍스트로 변환하는 규칙(템플릿) 언어. 노드 선택에 XPath 를 쓴다 화면 출력용 HTML 생성
SQL/XML ISO/IEC 9075-14 (SQL:2003 부터) 관계형 DBMS 안에서 XML 을 다루는 SQL 확장. XML 데이터 타입과 함수(XMLELEMENT, XMLAGG, XMLQUERY, XMLTABLE, XMLEXISTS)를 둔다 테이블 행을 XML 로 내보내기, XML 컬럼을 XQuery 로 질의

XQuery 의 FLWOR 식

편집 원본 편집
절 뜻 SQL 에 견주면
For 노드 집합을 하나씩 돌며 변수에 묶는다 FROM
Let 값을 변수에 묶는다(반복하지 않음) 별칭
Where 조건으로 거른다 WHERE
Order by 정렬한다 ORDER BY
Return 결과를 만든다. 새 요소를 구성할 수 있다 SELECT
for $b in doc("library.xml")/library/book
let $p := $b/price
where $p > 30
order by $b/title
return <expensive>{ $b/title }</expensive>

관계형 데이터베이스와의 매핑

편집 원본 편집

XML 을 관계형 데이터베이스에 넣거나 테이블을 XML 로 내보내려면 트리와 표 사이의 대응 규칙(매핑)이 필요하다.

매핑 방식 방법 장점 단점
구조(스키마) 기반 매핑 XML 스키마나 DTD 를 보고 요소마다 테이블을 만든다. 반복되는 하위 요소는 별도 테이블로 떼고 외래 키로 부모와 잇는다. 단순 요소·속성은 컬럼이 된다 일반 SQL 로 질의·인덱스·무결성 제약을 그대로 쓴다 스키마가 바뀌면 테이블도 바꿔야 한다. 깊은 중첩은 조인이 많아진다
모델 기반 매핑(에지·노드 방식) 스키마와 상관없이 노드 하나를 한 행으로 저장한다(노드 ID, 부모 ID, 이름, 값, 순서) 어떤 XML 이든 저장한다 문서를 복원하거나 경로를 질의할 때 자기 조인이 반복되어 느리다
테이블 기반 매핑 XML 을 "테이블 - 행 - 컬럼" 모양의 정해진 틀로만 다룬다. 데이터 교환용으로 DB 를 그대로 XML 로 덤프할 때 쓴다 단순하다 임의 구조의 문서를 담지 못한다
통째 저장 문서를 CLOB 이나 XML 타입 컬럼에 그대로 넣고 XQuery·SQL/XML 로 질의한다 원문과 순서·주석이 보존된다 부분 수정·질의 성능은 별도 XML 인덱스에 기댄다
  • 구조 기반·모델 기반처럼 문서를 쪼개 테이블에 나눠 넣는 것을 분해 저장(shredding), 다시 XML 로 조립하는 것을 게시(publishing)라고 한다
  • 요소의 순서, 혼합 콘텐츠(텍스트와 요소가 섞인 내용), 네임스페이스는 표로 옮기면 잃기 쉬워 따로 순서 컬럼 등을 둔다
  • 저장 방식에 따른 DBMS 분류는 XML 데이터베이스 문서에 있다

SQL 과 XML 질의 언어 비교

편집 원본 편집
구분 SQL XPath·XQuery
데이터 모델 릴레이션(평평한 표), 행 순서 없음 트리, 문서 순서 있음
스키마 반드시 있다 없어도 된다(반구조적)
기본 단위 행·열 노드(요소·속성·텍스트)
결과 테이블 노드 열(sequence), 새 XML
탐색 조인 경로 표현식(부모·자식·후손 축)