| PostgreSQL 9.1.24 문서 | ||||
|---|---|---|---|---|
| 와이즈 토토 : 문서 : 9.1 : Vacuumlo | 위로 | 부록 F. 추가 제공 모듈 | 스포츠 토토 베트맨 : 문서 : 9.1 : 스포츠 토토 베트맨 프로젝트 | |
그배트맨 토토2모듈은 XPath를 제공합니다 쿼리 및 XSLT 기능.
발신포스트그레SQL8.3 켜짐,
SQL/XML을 기반으로 하는 XML 관련 기능이 있습니다.
코어 서버의 표준입니다. 해당 기능에는 XML이 포함됩니다.
구문 검사 및 XPath 쿼리가 이 모듈의 기능입니다.
등이 있지만 API는 전혀 호환되지 않습니다. 그것은
이 모듈은 향후 버전에서 제거될 예정입니다.
PostgreSQL은 최신 표준 API를 선호하므로
응용프로그램을 변환해 보시기 바랍니다. 당신이 발견하면
이 모듈의 일부 기능을 사용할 수 없습니다
최신 API를 사용하여 적절한 형식으로 설명해주세요.
발행자<pgsql-hackers@배트맨 토토.org결핍이 해결될 수 있도록.
표 F-33이 모듈에서 제공하는 기능을 보여줍니다. 이러한 기능 간단한 배트맨 토토 구문 분석 및 XPath 쿼리를 제공합니다. 모두 인수는 유형입니다.텍스트따라서 표시되지 않은 간결함.
표 F-33. 기능
| 기능 | 반품 | 설명 |
|---|---|---|
xml_is_well_formed(문서) |
부울 |
이것은 매개변수의 문서 텍스트를 분석하고
문서가 올바른 형식의 XML이면 true를 반환합니다.
(참고: PostgreSQL 8.2 이전에는 이 함수가
전화함 |
xpath_string(문서,
쿼리) |
텍스트 |
이 함수는 XPath 쿼리를 평가합니다. 제공된 문서를 작성하고 결과를 지정된 유형. |
xpath_number(문서,
쿼리) |
플로트4 | |
xpath_bool(문서,
쿼리) |
부울 | |
xpath_nodeset(문서,
쿼리, toptag, itemtag) |
텍스트 |
이것은 문서에 대한 쿼리를 평가하고 XML 태그가 생성됩니다. 결과가 다중값인 경우 출력은 다음과 같습니다: <상위 태그 <itemtagXML 조각일 수 있는 값 1</itemtag <itemtag값 2....</itemtag </toptag 둘 중 하나라면상위태그또는항목태그은 빈 문자열입니다. 해당 태그는 생략됩니다. |
xpath_nodeset(문서,
쿼리) |
텍스트 |
좋아요 |
xpath_nodeset(문서,
쿼리, 항목태그) |
텍스트 |
좋아요 |
xpath_list(문서, 쿼리,
구분 기호) |
텍스트 |
이 함수는 다음으로 구분된 여러 값을 반환합니다. 예를 들어 지정된 구분 기호값 1,값 2,값 3구분 기호인 경우 이다,. |
xpath_list(문서,
쿼리) |
텍스트 | 이것은 다음을 사용하는 위 함수에 대한 래퍼입니다.,구분자로. |
xpath_table(텍스트 키, 텍스트 문서, 텍스트 관계, 텍스트 xpath, 텍스트 기준)은 레코드 집합을 반환합니다.
xpath_table테이블입니다
각 세트에서 XPath 쿼리 세트를 평가하는 함수
문서를 작성하고 결과를 테이블로 반환합니다. 기본
원본 문서 테이블의 키 필드는 다음과 같이 반환됩니다.
결과 세트를 쉽게 확인할 수 있도록 결과의 첫 번째 열
조인에 사용됩니다. 매개변수는 다음에 설명되어 있습니다.표 F-34.
표 F-34.xpath_table매개변수
| 매개변수 | 설명 |
|---|---|
| 키 |
이름"열쇠"필드 — 이것은 첫 번째 필드로 사용되는 필드입니다. 즉, 출력 테이블의 열은 각 출력 행이 나온 레코드(참고 사항 참조) 여러 값에 대해서는 아래에서) |
| 문서 |
XML이 포함된 필드의 이름 문서 |
| 관계 |
다음을 포함하는 테이블 또는 뷰의 이름 문서 |
| xpaths |
다음으로 구분된 하나 이상의 XPath 표현식| |
| 기준 |
WHERE 절의 내용. 이건 있을 수 없어 생략되었으므로 사용하세요참또는1=1처리하고 싶다면 관계의 모든 행 |
이러한 매개변수(XPath 문자열 제외)는 단지 일반 SQL SELECT 문으로 대체되므로 일부 유연성 — 진술은 다음과 같습니다.
SELECT <키, <문서 FROM <관계 WHERE <기준
따라서 해당 매개변수는 다음과 같습니다.무엇이든그 경우에는 유효함 특정 위치. 이 SELECT의 결과는 다음과 같아야 합니다. 정확히 두 개의 열을 반환합니다. 키 또는 문서에 대한 여러 필드를 나열합니다. 이 점을 주의하세요 단순한 접근 방식에서는 모든 것을 검증해야 합니다. SQL 삽입 공격을 방지하기 위해 사용자가 제공한 값입니다.
함수는 다음에서 사용되어야 합니다.발신표현식,AS18000_18056
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 int 기본 키,
XML 텍스트
);
테스트 값에 삽입(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 int, doc_num varchar(10), line_num varchar(10), val1 int, val2 int, val3 int)
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 int, line_num varchar(10), val1 int, val2 int, val3 int),
xpath_table('id', 'xml', 'test', '/doc/@num', 'true')
AS i(id int, 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 스타일시트를 문서에 적용합니다 그리고 변환된 결과를 반환합니다.매개변수 목록매개변수 할당 목록입니다. 변환에 사용되며 형식에 지정됩니다.a=1,b=2. 매개변수는 구문 분석은 매우 단순합니다. 매개변수 값은 쉼표를 포함하세요!
다음의 두 매개변수 버전도 있습니다.xslt_process아무것도 통과하지 못함
변환에 대한 매개변수입니다.
존 그레이<jgray@azuli.co.uk
이 모듈의 개발은 Torchbox Ltd.의 후원을 받았습니다. (www.torchbox.com). 와 동일한 BSD 라이센스를 가지고 있습니다. 포스트그레SQL.