그토토 베이2모듈은 XPath를 제공합니다 쿼리 및 XSLT 기능.
발신포스트그레SQL8.3 켜짐,
SQL/XML을 기반으로 하는 XML 관련 기능이 있습니다.
코어 서버의 표준입니다. 해당 기능에는 XML이 포함됩니다.
구문 검사 및 XPath 쿼리가 이 모듈의 기능입니다.
등이 있지만 API는 전혀 호환되지 않습니다. 그것은
이 모듈은 향후 버전에서 제거될 예정입니다.
PostgreSQL은 최신 표준 API를 선호하므로
응용프로그램을 변환해 보시기 바랍니다. 당신이 발견하면
이 모듈의 일부 기능을 사용할 수 없습니다
최신 API를 사용하여 적절한 형식으로 설명해주세요.
발행자<pgsql-hackers@토토 베이.org결핍이 해결될 수 있도록.
표 F-35이 모듈에서 제공하는 기능을 보여줍니다. 이러한 기능 간단한 토토 베이 구문 분석 및 XPath 쿼리를 제공합니다. 모두 인수는 유형입니다.텍스트그러므로 표시되지 않은 간결함.
표 F-35. 기능
xml_is_well_formed(문서)가 bool을 반환함 |
이것은 매개변수의 문서 텍스트를 분석하고
문서가 올바른 형식의 XML이면 true를 반환합니다.
(참고: PostgreSQL 8.2 이전에는 이 함수가
전화함 |
xpath_string(document,query)는 텍스트를 반환합니다.
xpath_number(document,query)는 float4를 반환합니다.
xpath_bool(document,query)는 bool을 반환합니다.
|
이 함수는 XPath 쿼리를 평가합니다. 제공된 문서를 작성하고 결과를 지정된 유형. |
xpath_nodeset(document,query,toptag,itemtag)는 텍스트를 반환합니다. |
이것은 문서에 대한 쿼리를 평가하고 XML 태그가 생성됩니다. 결과가 다중값인 경우 출력은 다음과 같습니다: <toptag <itemtag값 1 XML 조각일 수 있습니다</itemtag <itemtag값 2....</itemtag </toptagtoptag 또는 itemtag가 빈 문자열인 경우, 해당 태그는 생략됩니다. |
xpath_nodeset(document,query)가 텍스트를 반환함 |
좋아요 xpath_nodeset(문서,쿼리,toptag,itemtag) 그러나 결과에는 두 태그가 모두 생략되었습니다. |
xpath_nodeset(document,query,itemtag)는 텍스트를 반환합니다. |
좋아요 xpath_nodeset(문서,쿼리,toptag,itemtag) 그러나 결과에는 상단 태그가 생략되었습니다. |
xpath_list(document,query,separator)는 텍스트를 반환합니다. |
이 함수는 다음으로 구분된 여러 값을 반환합니다. 예를 들어 지정된 구분 기호값 1,값 2,값 3if 구분 기호 이다,. |
xpath_list(document,query)가 텍스트를 반환함 |
이것은 다음을 사용하는 위 함수에 대한 래퍼입니다.,구분자로. |
xpath_table(텍스트 키, 텍스트 문서, 텍스트 관계, 텍스트 xpath, 텍스트 기준)은 레코드 집합을 반환합니다.
xpath_table테이블입니다
각 세트에서 XPath 쿼리 세트를 평가하는 함수
문서를 작성하고 결과를 테이블로 반환합니다. 기본
원본 문서 테이블의 키 필드는 다음과 같이 반환됩니다.
결과 세트를 쉽게 확인할 수 있도록 결과의 첫 번째 열
조인에 사용됩니다.
표 F-36. 매개변수
| 키 |
이름"열쇠"필드 — 이것은 첫 번째 필드로 사용되는 필드입니다. 즉, 출력 테이블의 열은 각 출력 행이 나온 레코드(참고 사항 참조) 여러 값에 대해서는 아래에서) |
| 문서 |
XML을 포함하는 필드의 이름 문서 |
| 관계 |
다음을 포함하는 테이블 또는 뷰의 이름 문서 |
| xpaths |
다음으로 구분된 하나 이상의 XPath 표현식| |
| 기준 |
WHERE 절의 내용. 이건 있을 수 없어 생략되었으므로 사용하세요참또는1=1처리하고 싶다면 관계의 모든 행 |
이 매개변수(XPath 문자열 제외)는 단지 일반 SQL SELECT 문으로 대체되므로 일부 유연성 — 진술은 다음과 같습니다.
SELECT <키, <문서 FROM <관계 WHERE <기준
따라서 해당 매개변수는 다음과 같습니다.무엇이든그 경우에는 유효함 특정 위치. 이 SELECT의 결과는 다음과 같아야 합니다. 정확히 두 개의 열을 반환합니다. 키 또는 문서에 대한 여러 필드를 나열합니다. 이 점을 주의하세요 단순한 접근 방식에서는 모든 것을 검증해야 합니다. SQL 삽입 공격을 방지하기 위해 사용자가 제공한 값입니다.
함수는 다음에서 사용되어야 합니다.발신표현식,AS절은 출력 열을 지정합니다. 에 대한 예
SELECT * FROM
xpath_table('article_id',
'article_xml',
'기사',
'/기사/저자|/기사/페이지|/기사/제목',
'입력한 날짜 ''2003-01-01'' ')
AS t(article_id 정수, 작성자 텍스트, 페이지 수 정수, 제목 텍스트);
그AS절은 이름을 정의하고 출력 테이블의 열 유형입니다. 첫 번째는"열쇠"필드와 나머지는 일치합니다. XPath 쿼리에. XPath 쿼리가 다음보다 많은 경우 결과 열에서는 추가 쿼리가 무시됩니다. 만약 있다면 XPath 쿼리보다 결과 열이 더 많으면 추가 열이 NULL이어야 합니다.
이 예는 다음을 정의합니다.page_count결과 열을 정수로 표시합니다. 는 함수는 내부적으로 문자열 표현을 처리하므로 출력에 정수를 원한다고 말하면 XPath 결과의 문자열 표현 및 PostgreSQL 사용 이를 정수(또는 무엇이든)로 변환하는 입력 함수 다음을 입력하세요.AS절 요청). 오류 이를 수행할 수 없는 경우 결과가 발생합니다. 예를 들어 결과가 다음과 같은 경우 비어 있으므로 그냥 계속 사용하셔도 됩니다.텍스트데이터에 다음이 있다고 생각되면 열 유형으로 어떤 문제라도.
소명선택성명 반드시 그럴 필요는 없습니다.선택 *— 이름이나 조인으로 출력 열을 참조할 수 있습니다. 다른 테이블로 보내세요. 이 함수는 가상 테이블을 생성합니다. 원하는 모든 작업을 수행할 수 있습니다(예: 집계, 결합, 정렬 등). 따라서 다음도 가질 수 있습니다.
SELECT t.title, p.fullname, p.email
FROM xpath_table('article_id', 'article_xml', 'articles',
'/기사/제목|/기사/저자/@id',
'xpath_string(article_xml,''/article/@date'') ''2003-03-20'' ')
AS t(article_id 정수, 제목 텍스트, 작성자_id 정수),
tblPeopleInfo AS p
t.author_id = p.person_id;
더 복잡한 예를 들어보겠습니다. 물론 다 포장해도 되지만 편의를 위해 이렇게 했습니다.
그xpath_table함수
각 XPath 쿼리의 결과는 다음과 같을 수 있다고 가정합니다.
다중 값이므로 함수에서 반환된 행 수
입력 문서의 수와 동일하지 않을 수 있습니다. 는
반환된 첫 번째 행에는 각 쿼리의 첫 번째 결과가 포함됩니다.
두 번째 행은 각 쿼리의 두 번째 결과입니다. 다음 중 하나인 경우
쿼리의 값이 다른 쿼리보다 적으면 NULL이 됩니다.
대신 반환되었습니다.
어떤 경우에는 사용자가 주어진 XPath 쿼리가 단일 결과(아마도 고유한 문서)만 반환됩니다. 식별자) — XPath 쿼리 반환과 함께 사용되는 경우 결과가 여러 개인 경우 단일 값 결과만 표시됩니다. 결과의 첫 번째 행에 있습니다. 이에 대한 해결책은 더 간단한 XPath에 대한 조인의 일부로 키 필드를 사용합니다. 쿼리. 예를 들어:
CREATE TABLE 테스트(
ID int4는 NULL이 아닙니다.
XML 텍스트,
제약 조건 pk 기본 키(id)
);
테스트 값에 삽입(1, '<doc num="C1"
<line num="L1"<a1</a<b2</b<c3</c</line
<line num="L2"<a11</a<b22</b<c33</c</line
</doc');
테스트 값에 삽입(2, '<doc num="C2"
<line num="L1"<a111</a<b222</b<c333</c</line
<line num="L2"<a111</a<b222</b<c333</c</line
</doc');
선택 *에서
xpath_table('id','xml','테스트',
'/doc/@num|/doc/line/@num|/doc/line/a|/doc/line/b|/doc/line/c',
'사실')
AS t(id int4, doc_num varchar(10), line_num varchar(10), val1 int4, val2 int4, val3 int4)
WHERE id = 1 ORDER BY doc_num, line_num
아이디 | 문서_번호 | 라인_번호 | 발1 | 발2 | 발3
----+---------+---------+------+------+------
1 | C1 | L1 | 1 | 2 | 3
1 | | L2 | 11 | 22 | 33
모든 줄에서 doc_num을 얻으려면 해결책은 두 개를 사용하는 것입니다 xpath_table을 호출하고 결과를 조인합니다.
다음에서 t.*,i.doc_num 선택
xpath_table('id', 'xml', '테스트',
'/doc/line/@num|/doc/line/a|/doc/line/b|/doc/line/c',
'사실')
AS t(id int4, line_num varchar(10), val1 int4, val2 int4, val3 int4),
xpath_table('id', 'xml', 'test', '/doc/@num', 'true')
AS i(id int4, doc_num varchar(10))
i.id=t.id AND i.id=1인 경우
ORDER BY doc_num, line_num;
아이디 | 라인_번호 | 발1 | 발2 | 발3 | 문서_번호
----+----------+------+------+------+---------
1 | L1 | 1 | 2 | 3 | C1
1 | L2 | 11 | 22 | 33 | C1
(2행)
libxslt가 다음과 같은 경우 다음 기능을 사용할 수 있습니다. 설치됨:
xslt_process(text document, text stylesheet, text paramlist)는 텍스트를 반환합니다.
이 함수는 XSL 스타일시트를 문서에 적용합니다 그리고 변환된 결과를 반환합니다. paramlist는 목록입니다. 변환에 사용될 매개변수 할당 형식으로 지정됨a=1,b=2. 참고 매개변수 구문 분석은 매우 단순합니다. 값에는 쉼표가 포함될 수 없습니다!
다음의 두 매개변수 버전도 있습니다.xslt_process아무것도 통과하지 못함
변환에 대한 매개변수입니다.
존 그레이<jgray@azuli.co.uk
이 모듈의 개발은 Torchbox Ltd.의 후원을 받았습니다. (www.torchbox.com). 와 동일한 BSD 라이센스를 가지고 있습니다. 포스트그레SQL.