2025 년 7 월 17 일 : | 윈 토토 : 윈 토토 18 베타
이 문서는 지원되지 않는 버전의 토토을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다4CL2토토 캔CL29버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

F.42. 토토2

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

F.42.1. 감가 상각 통지

From토토8.3 on, 거기 SQL/XML 표준을 기반으로 XML 관련 기능입니다. 핵심 서버. 이 기능은 XML 구문 확인 및 다룹니다 xpath 쿼리는이 모듈이하는 일입니다. API는 전혀 호환되지 않습니다. 이 모듈이 될 계획입니다 새로 유리하여 미래 버전의 토토에서 제거됩니다. 표준 API이므로 변환하는 것이 좋습니다. 응용 프로그램. 이것의 기능 중 일부를 찾으면 모듈은 최신 API와 함께 적절한 형태로 제공되지 않습니다. 문제를 설명 해주세요부족을 해결할 수 있도록.

F.42.2. 기능 설명

표 F-34쇼 이 모듈에서 제공하는 기능. 이러한 기능은 제공합니다 간단한 토토 파싱 및 XPath 쿼리. 모든 논쟁이 있습니다 유형텍스트표시

표 F-34. 기능

기능 반환 설명
토토_is_well_formed (Document) bool

이것은 매개 변수의 토토 텍스트를 구문 분석하고 true를 반환합니다. 토토가 잘 형성된 XML 인 경우. (참고 : Postgresql 8.2 이전, 이 기능은라고 불 렸습니다.토토_valid (). 유효성과 잘 형성이 있었기 때문에 잘못된 이름입니다. 토토의 다른 의미. 이전 이름은 여전히 사용 가능하지만 그렇습니다 더 이상 사용되지 않는다.)

xpath_string (토토, 질문) 텍스트

이 기능은 제공된 것의 xpath 쿼리를 평가합니다 토토화하고 결과를 지정된 유형으로 시전합니다.

xpath_number (토토, 질문) float4
xpath_bool (토토, 쿼리) bool
xpath_nodeset (토토, 쿼리, Toptag, ItemTag) 텍스트

이것은 문서의 쿼리를 평가하고 결과를 토토로 랩핑합니다. 태그. 결과가 다수 인 경우 출력은 다음과 같습니다.

<poptag
XML 조각 일 수있는 <Ittag 값 1 </itemtag
<Ittag value 2 .... </itemtag
</toptag

IF 중Toptag또는ItemTag는 빈 문자열이며 관련 태그는입니다 생략.

xpath_nodeset (토토, 질문) 텍스트

Likexpath_nodeset (토토, 쿼리, Toptag, itemtag)그러나 결과는 두 태그를 모두 생략합니다.

xpath_nodeset (토토, 쿼리, ItemTag) 텍스트

좋아요xpath_nodeset (토토, 쿼리, Toptag, itemtag)그러나 결과는 Toptag를 생략합니다.

xpath_list (토토, 쿼리, 분리 기호) 텍스트

이 함수는 지정된 것들로 분리 된 여러 값을 반환합니다 분리기, 예를 들어값 1, 값 2, 값 3분리기 인 경우,.

xpath_list (토토, 쿼리) 텍스트 이것은 위의 함수를위한 래퍼입니다,분리기로

F.42.3.xpath_table

xpath_table (텍스트 키, 텍스트 토토, 텍스트 관계, 텍스트 xpaths, 텍스트 기준)을 반환합니다.

xpath_table는 테이블 함수입니다 각 토토 세트에서 일련의 XPath 쿼리를 평가합니다. 결과를 테이블로 반환합니다. The의 기본 키 필드 원본 토토 테이블은 결과 세트를 조인에 쉽게 사용할 수 있도록 결과. 그만큼 매개 변수는에 설명되어 있습니다.표 F-35.

표 F-35.xpath_table매개 변수

매개 변수 설명

이름의 이름"키"필드 - 이것은입니다 출력 테이블의 첫 번째 열로 사용할 필드 만 즉, 각 출력 행이 온 레코드를 식별합니다 ( 아래의 여러 값에 대해서는 참고)

토토

XML 토토를 포함하는 필드의 이름

관계

토토가 포함 된 표 또는보기의 이름

xpaths

하나 이상의 Xpath 표현식, 분리|

기준

WHERE 절의 내용. 이것은 생략 할 수 없으므로 사용true또는1 = 1if 관계에서 모든 행을 처리하고 싶습니다

이 매개 변수 (XPath 문자열 제외)는 방금 대체됩니다 평범한 SQL Select 문으로 가면 유연성이 있습니다. 진술은

<key, <cument에서 선택하십시오 <관계 여기서 <Criteria

따라서 해당 매개 변수가 될 수 있습니다무엇이든특히 유효합니다 위치. 이 선택의 결과는 정확히 2를 반환해야합니다. 열 (여러 필드를 나열하지 않는 한 키 또는 토토). 이 단순한 접근 방식이 필요하다는 것을 조심하십시오 SQL 주입을 피하기 위해 사용자가 공급 한 값을 검증합니다. 공격.

함수는 a에서 사용해야합니다.From표현,as지정할 조항 출력 열; 예를 들어

선택 *에서
xpath_table ( 'article_id',
            'article_xml',
            '조항',
            '/기사/저자 |/기사/페이지 |/기사/제목',
            'date_entered' ''2003-01-01 '' ')
as t (article_id 정수, 저자 텍스트, page_count 정수, 제목 텍스트);

theas조항은 이름을 정의합니다 출력 테이블의 열 유형. 첫 번째는입니다."키"필드와 나머지는 다음과 같습니다 xpath 쿼리. 결과보다 XPath 쿼리가 더 많은 경우 열, 추가 쿼리는 무시됩니다. 더 많은 경우 XPath 쿼리보다 결과 열은 추가 열이 다음과 같습니다. 널.

이 예제는를 정의한다는 것을 알 수 있습니다.page_count정수로서의 결과 열. 그만큼 함수는 문자열 표현을 내부적으로 처리하므로 귀하가 할 때 출력에서 정수를 원한다고 말하면 문자열이 필요합니다. XPath 결과의 표현 및 토토 입력 사용 그것을 정수로 변환하는 기능 (또는 어떤 유형이든as조항 요청). 오류가 발생합니다 예를 들어 결과가 비어 있으면이 작업을 수행 할 수 없습니다. 그냥 고집하고 싶다텍스트열 유형으로 데이터가 문제가 있다고 생각되면

전화select진술은 그렇지 않습니다 반드시 그냥선택 *- 가능합니다 출력 열을 이름으로 참조하거나 다른 테이블에 가입하십시오. 이 기능은 수행 할 수있는 가상 테이블을 생성합니다. 원하는 작업 (예 : 집계, 결합, 정렬 등). 그래서 우리는 또한 가질 수 있습니다 :

T.Title, P.FullName, P.Email을 선택하십시오
xpath_table에서 ( 'article_id', 'article_xml', 'articles',
                 '/기사/제목 |/article/author/@id',
                 'xpath_string (article_xml,' '/article/@date' ')' '2003-03-20' '')
       t (article_id 정수, 제목 텍스트, author_id 정수),
     p
여기서 t.author_id = p.person_id;

더 복잡한 예로. 물론, 당신은 모든 것을 포장 할 수 있습니다 이것은 편의를위한 견해로.

F.42.3.1. 다중 결과

thexpath_table함수는 가정합니다 각 XPath 쿼리의 결과가 다중일 수 있으므로 함수에 의해 반환 된 행의 수는 입력 토토 수. 반환 된 첫 번째 행에는 다음에 포함됩니다 각 쿼리에서 첫 번째 결과, 두 번째 행은 두 번째 행이 각 쿼리. 쿼리 중 하나가 다른 값보다 값이 적은 경우 널 값이 대신 반환됩니다.

경우에 따라 사용자는 주어진 XPath 쿼리가 단일 결과 만 반환합니다 (아마도 고유 한 토토 식별자) - 여러 결과를 반환하는 XPath 쿼리와 함께 사용하면 단일 값 결과는 결과. 이에 대한 해결책은 키 필드를 더 간단한 XPath 쿼리와 결합하십시오. 예를 들어 :

테이블 테스트 생성 (
    ID int 기본 키,
    XML 텍스트
);

테스트 값 (1, '<doc num = "c1"에 삽입하십시오
<line num = "l1" <a 1 </a <b 2 </b <c 3 </c </line
<line num = "l2" <a 11 </a <b 22 </b <c 33 </c </line
</doc ');

테스트 값 (2, '<doc num = "c2"에 삽입하십시오
<line num = "l1" <a 111 </a <b 222 </b <c 333 </c </line
<line num = "l2" <a 111 </a <b 222 </b <c 333 </c </line
</doc ');

*에서 선택하십시오
  xpath_table ( 'id', 'xml', 'test',
              '/doc/num |/doc/line/@num |/doc/line/a |/doc/line/b |/doc/line/c',
              '진실')
  A로 t (id int, doc_num varchar (10), line_num varchar (10), val1 int, val2 int, val3 int)
여기서 id = 1 Doc_num, line_num의 주문

 id | doc_num | line_num | val1 | Val2 | Val3
----+--------+----------+------+------+------
  1 | C1 | L1 |    1 |    2 |    3
  1 |         | L2 |   11 |   22 |   33

getdoc_num모든 라인에서 솔루션은의 두 가지 호출을 사용하는 것입니다.xpath_table결과에 참여하십시오 :

select t.*, i.doc_num from
  xpath_table ( 'id', 'xml', 'test',
              '/doc/line/@num |/doc/line/a |/doc/line/b |/doc/line/c',
              '진실')
    t (Id int, line_num varchar (10), Val1 Int, Val2 int, Val3 Int),
  xpath_table ( 'id', 'xml', 'test', '/doc/@num', 'true')))
    I로 (ID int, doc_num varchar (10))
여기서 i.id = t.id 및 i.id = 1
doc_num, line_num의 주문;

 id | line_num | val1 | Val2 | val3 | doc_num
----+----------+------+------+------+-------
  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 (텍스트 토토, 텍스트 스타일 시트, 텍스트 매개 변수) 텍스트를 반환

이 함수는 XSL 스타일 시트를 토토에 적용하고 변환 된 결과를 반환합니다. 그만큼Paramlist는 매개 변수 할당 목록입니다 형식에 지정된 변환에 사용a = 1, b = 2. 매개 변수 구문 분석은 매우 중요합니다 간단한 생각 : 매개 변수 값은 쉼표를 포함 할 수 없습니다!

2 파라미터 버전의도 있습니다.XSLT_PROCESS이것은 매개 변수를 전달하지 않습니다 변형으로.

F.42.5. 작가

John Grey

이 모듈의 개발은 Torchbox Ltd.가 후원했습니다. (www.torchbox.com). 토토과 동일한 BSD 라이센스가 있습니다.