지원되는 버전:현재 (18) / 17 / 16 / 15 / 14 / 13
개발 버전:개발
지원되지 않는 버전:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3
이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

F.42. 토토2

토토2모듈은 XPath를 제공합니다 쿼리 및 XSLT 기능.

F.42.1. 지원 중단 알림

발신포스트그레SQL8.3에, 저기 SQL/XML 표준을 기반으로 하는 XML 관련 기능입니다. 코어 서버. 해당 기능에는 XML 구문 검사 및 이 모듈이 수행하는 XPath 쿼리 등이 있지만 API가 전혀 호환되지 않습니다. 이 모듈은 다음과 같이 계획되어 있습니다. 최신 버전을 위해 PostgreSQL의 향후 버전에서는 제거됩니다. 표준 API이므로 변환을 시도해 보는 것이 좋습니다. 응용 프로그램. 이 기능 중 일부를 발견했다면 최신 API에서는 모듈을 적절한 형식으로 사용할 수 없습니다. 귀하의 문제를 설명해주세요.결핍이 해결될 수 있도록.

F.42.2. 기능 설명

표 F-34쇼 이 모듈에서 제공하는 기능. 이러한 기능은 다음을 제공합니다. 간단한 XML 구문 분석 및 XPath 쿼리. 모든 인수는 유형텍스트, 간결하게 말하면 그렇지 않습니다. 표시됩니다.

표 F-34. 기능

기능 반품 설명
xml_is_well_formed(문서) 부울

이것은 매개변수의 문서 텍스트를 구문 분석하고 true를 반환합니다. 문서가 올바른 형식의 XML인 경우. (참고: PostgreSQL 8.2 이전에는 이 함수가 호출되었습니다.토토_valid(). 그것은 타당성과 올바른 형식이 있기 때문에 잘못된 이름입니다. XML의 다른 의미 이전 이름은 여전히 사용 가능하지만 더 이상 사용되지 않습니다.)

xpath_string(문서, 쿼리) 텍스트

이 함수는 제공된 XPath 쿼리를 평가합니다. 문서화하고 결과를 지정된 유형으로 캐스팅합니다.

xpath_number(문서, 쿼리) float4
xpath_bool(문서, 쿼리) 부울
xpath_nodeset(문서, 쿼리, toptag, 항목태그) 텍스트

문서에 대한 쿼리를 평가하고 결과를 XML로 래핑합니다. 태그. 결과가 다중값인 경우 출력은 다음과 같습니다.

<상위 태그
<itemtagXML 조각일 수 있는 값 1</itemtag
<itemtag값 2....</itemtag
</toptag

둘 중 하나라면상위태그또는항목태그은 빈 문자열이고 관련 태그는 다음과 같습니다. 생략했습니다.

xpath_nodeset(문서, 쿼리) 텍스트

좋아요xpath_nodeset(문서, 쿼리, 상단태그, 항목태그)그러나 결과에는 두 태그가 모두 생략되었습니다.

xpath_nodeset(문서, 쿼리, 항목태그) 텍스트

좋아요xpath_nodeset(문서, 쿼리, 상단태그, 항목태그)그러나 결과에는 상단 태그가 생략되었습니다.

xpath_list(문서, 쿼리, 구분 기호) 텍스트

이 함수는 지정된 값으로 구분된 여러 값을 반환합니다. 예를 들어 구분 기호값 1,값 2,값 3구분자가 다음인 경우,.

xpath_list(문서, 쿼리) 텍스트 이것은 다음을 사용하는 위 함수에 대한 래퍼입니다.,구분자로.

F.42.3.xpath_table

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;

더 복잡한 예를 들어보겠습니다. 물론, 모두 포장할 수도 있습니다. 이는 편의를 위한 것입니다.

F.42.3.1. 다중값 결과

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행)

F.42.4. XSLT 기능

libxslt가 다음과 같은 경우 다음 기능을 사용할 수 있습니다. 설치됨:

F.42.4.1.xslt_process

xslt_process(text document, text stylesheet, text paramlist)는 텍스트를 반환합니다.

이 함수는 XSL 스타일시트를 문서에 적용하고 변환된 결과를 반환합니다.매개변수 목록은 매개변수 할당 목록입니다. 변환에 사용되며 형식에 지정됨a=1,b=2. 매개변수 구문 분석은 매우 단순함: 매개변수 값에는 쉼표가 포함될 수 없습니다!

다음의 두 매개변수 버전도 있습니다.xslt_process어떤 매개변수도 전달하지 않음 변신에.

F.42.5. 작성자

존 그레이

이 모듈의 개발은 Torchbox Ltd.의 후원을 받았습니다. (www.torchbox.com). PostgreSQL과 동일한 BSD 라이센스를 가지고 있습니다.