토토 9.3.25 토토 | ||||
---|---|---|---|---|
PostgreSQL : 토토 : 9.3 : 토토-SOSSP | PostgreSQL : 토토 : 9.3 : 추가 제공 배트맨 토토 | 부록 F. 추가 제공된 모듈 | 와이즈 토토 : 토토 : 9.3 : 추가 공급 프로그램 |
the토토2모듈은 xpath를 제공합니다 쿼리 및 XSLT 기능.
From토토8.3 on, 거기
SQL/XML 표준을 기반으로 XML 관련 기능입니다.
핵심 서버. 이 기능은 XML 구문 확인 및 다룹니다
xpath 쿼리는이 모듈이하는 일입니다.
API는 전혀 호환되지 않습니다. 이 모듈이 될 계획입니다
새로 유리하여 미래 버전의 토토에서 제거됩니다.
표준 API이므로 변환하는 것이 좋습니다.
응용 프로그램. 이것의 기능 중 일부를 찾으면
모듈은 최신 API와 함께 적절한 형태로 제공되지 않습니다.
문제를 설명 해주세요<pgsql-hackers@토토.org
부족을 해결할 수 있도록.
표 F-34쇼 이 모듈에서 제공하는 기능. 이러한 기능은 제공합니다 간단한 토토 파싱 및 XPath 쿼리. 모든 논쟁이 있습니다 유형텍스트표시
표 F-34. 기능
기능 | 반환 | 설명 |
---|---|---|
토토_is_well_formed (Document) |
bool |
이것은 매개 변수의 토토 텍스트를 구문 분석하고 true를 반환합니다.
토토가 잘 형성된 XML 인 경우. (참고 : Postgresql 8.2 이전,
이 기능은라고 불 렸습니다. |
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 (토토,
질문) |
텍스트 |
Like |
xpath_nodeset (토토, 쿼리,
ItemTag) |
텍스트 |
좋아요 |
xpath_list (토토, 쿼리,
분리 기호) |
텍스트 |
이 함수는 지정된 것들로 분리 된 여러 값을 반환합니다 분리기, 예를 들어값 1, 값 2, 값 3분리기 인 경우,. |
xpath_list (토토, 쿼리) |
텍스트 | 이것은 위의 함수를위한 래퍼입니다,분리기로 |
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;
더 복잡한 예로. 물론, 당신은 모든 것을 포장 할 수 있습니다 이것은 편의를위한 견해로.
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 줄)
libxslt 인 경우 다음 기능을 사용할 수 있습니다 설치 :
xslt_process (텍스트 토토, 텍스트 스타일 시트, 텍스트 매개 변수) 텍스트를 반환
이 함수는 XSL 스타일 시트를 토토에 적용하고 변환 된 결과를 반환합니다. 그만큼Paramlist는 매개 변수 할당 목록입니다 형식에 지정된 변환에 사용a = 1, b = 2. 매개 변수 구문 분석은 매우 중요합니다 간단한 생각 : 매개 변수 값은 쉼표를 포함 할 수 없습니다!
2 파라미터 버전의도 있습니다.XSLT_PROCESS
이것은 매개 변수를 전달하지 않습니다
변형으로.
John Grey<jgray@azuli.co.uk
이 모듈의 개발은 Torchbox Ltd.가 후원했습니다. (www.torchbox.com). 토토과 동일한 BSD 라이센스가 있습니다.