| 윈 토토 : 문서 : 9.4 : 윈 토토 | |||
|---|---|---|---|
| PostgreSQL : 문서 : 9.4 : 토토 핫-SOSSP | PostgreSQL : 문서 : 9.4 : 추가 제공 배트맨 토토 | 부록 F. 추가 제공 모듈 | PostgreSQL : 문서 : 9.4 : 추가 공급 토토 핫 |
그무지개 토토2모듈은 XPath 쿼리 및 XSLT 기능을 제공합니다.
발신포스트그레SQL8.3 on, 코어 서버에는 SQL/XML 표준을 기반으로 하는 XML 관련 기능이 있습니다. 해당 기능에는 이 모듈이 수행하는 작업인 XML 구문 검사 및 XPath 쿼리 등이 포함되지만 API는 전혀 호환되지 않습니다. 이 모듈은 최신 표준 API를 위해 PostgreSQL의 향후 버전에서 제거될 예정이므로 애플리케이션을 변환해 보는 것이 좋습니다. 이 모듈의 일부 기능을 최신 API에서 적절한 형식으로 사용할 수 없는 경우 문제를 설명해주세요.<pgsql-hackers@lists.무지개 토토.org결핍이 해결될 수 있도록.
표 F-34이 모듈에서 제공하는 기능을 보여줍니다. 이러한 기능은 간단한 무지개 토토 구문 분석 및 XPath 쿼리를 제공합니다. 모든 인수는 유형입니다.텍스트, 간략하게 표시되지 않았습니다.
표 F-34. 기능
| 기능 | 반환 | 설명 |
|---|---|---|
xml_is_well_formed(문서) |
부울 |
이것은 매개변수의 문서 텍스트를 구문 분석하고 문서가 올바른 형식의 XML인 경우 true를 반환합니다. (참고: PostgreSQL 8.2 이전에는 이 함수가 호출되었습니다. |
xpath_string(문서, 쿼리) |
텍스트 |
이 함수는 제공된 문서에 대한 XPath 쿼리를 평가하고 결과를 지정된 유형으로 변환합니다. |
xpath_number(문서, 쿼리) |
float4 | |
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-35.
표 F-35.xpath_table매개변수
| 매개변수 | 설명 |
|---|---|
| 키 |
이름"열쇠"필드 — 이는 출력 테이블의 첫 번째 열로 사용되는 필드입니다. 즉, 각 출력 행의 출처 레코드를 식별합니다(여러 값에 대한 아래 참고 사항 참조). |
| 문서 |
XML 문서가 포함된 필드의 이름 |
| 관계 |
문서가 포함된 테이블 또는 뷰의 이름 |
| xpaths |
하나 이상의 XPath 표현식, 구분| |
| 기준 |
WHERE 절의 내용. 생략할 수 없으므로 를 사용하세요.참또는1=1관계의 모든 행을 처리하려는 경우 |
이러한 매개변수(XPath 문자열 제외)는 일반 SQL SELECT 문으로 대체되므로 유연성이 있습니다. 문은 다음과 같습니다.
SELECT <키, <문서 FROM <관계 WHERE <기준
그러므로 해당 매개변수는 다음과 같습니다.무엇이든해당 특정 위치에서 유효합니다. 이 SELECT의 결과는 정확히 두 개의 열을 반환해야 합니다(키 또는 문서에 대해 여러 필드를 나열하려고 시도하지 않는 한 반환됩니다). 이 단순한 접근 방식을 사용하려면 SQL 삽입 공격을 방지하기 위해 사용자가 제공한 값의 유효성을 검사해야 합니다.
함수는 다음에서 사용되어야 합니다.발신표현식,AS15838_15890
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)의 후원을 받았습니다. PostgreSQL과 동일한 BSD 라이센스를 가지고 있습니다.