| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 문서 : 9.3 : 토토-SOSSP | PostgreSQL : 문서 : 9.3 : 추가 제공 배트맨 토토 | 부록 F. 추가 제공 모듈 | 와이즈 토토 : 문서 : 9.3 : 추가 공급 프로그램 | |
그토토2모듈은 XPath를 제공합니다 쿼리 및 XSLT 기능.
발신포스트그레SQL8.3에, 저기
SQL/XML 표준을 기반으로 하는 XML 관련 기능입니다.
코어 서버. 해당 기능에는 XML 구문 검사 및
이 모듈이 수행하는 XPath 쿼리 등이 있지만
API가 전혀 호환되지 않습니다. 이 모듈은 다음과 같이 계획되어 있습니다.
최신 버전을 위해 PostgreSQL의 향후 버전에서는 제거됩니다.
표준 API이므로 변환을 시도해 보는 것이 좋습니다.
응용 프로그램. 이 기능 중 일부를 발견했다면
최신 API에서는 모듈을 적절한 형식으로 사용할 수 없습니다.
귀하의 문제를 설명해주세요.<pgsql-hackers@토토.org결핍이 해결될 수 있도록.
표 F-34쇼 이 모듈에서 제공하는 기능. 이러한 기능은 다음을 제공합니다. 간단한 XML 구문 분석 및 XPath 쿼리. 모든 인수는 유형텍스트, 간결하게 말하면 그렇지 않습니다. 표시됩니다.
표 F-34. 기능
| 기능 | 반품 | 설명 |
|---|---|---|
xml_is_well_formed(문서) |
부울 |
이것은 매개변수의 문서 텍스트를 구문 분석하고 true를 반환합니다.
문서가 올바른 형식의 XML인 경우. (참고: PostgreSQL 8.2 이전에는
이 함수가 호출되었습니다. |
xpath_string(문서,
쿼리) |
텍스트 |
이 함수는 제공된 XPath 쿼리를 평가합니다. 문서화하고 결과를 지정된 유형으로 캐스팅합니다. |
xpath_number(문서,
쿼리) |
float4 | |
xpath_bool(문서, 쿼리) |
부울 | |
xpath_nodeset(문서, 쿼리, toptag,
항목태그) |
텍스트 |
문서에 대한 쿼리를 평가하고 결과를 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의 결과는 정확히 2개를 반환해야 합니다. 열(여러 필드를 나열하려고 시도하지 않는 한 키 또는 문서). 이 단순한 접근 방식에는 다음이 필요하다는 점에 유의하세요. 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 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 라이센스를 가지고 있습니다.