theXML2
모듈은 XPath 토토 베이 및 XSLT 기능을 제공합니다.
FromPostgreSQL8.3 on on, 핵심 서버의 SQL/XML 표준을 기반으로 XML 관련 기능이 있습니다. 이 기능은 XML 구문 검사 및 XPath 토토 베이를 다룹니다.이 모듈은이 모듈 등이지만 API는 전혀 호환되지 않습니다. 이 모듈은 새로운 표준 API를 선호하여 향후 버전의 PostgreSQL에서 제거 될 예정이므로 응용 프로그램을 변환하는 것이 좋습니다. 이 모듈의 일부 기능이 최신 API와 적절한 형태로 제공되지 않는 경우 문제를 설명하십시오.<pgsql-hackers@lists.postgresql.org
부족을 해결할 수 있도록.
테이블 F.37이 모듈에서 제공 한 함수를 보여줍니다. 이러한 기능은 간단한 XML 파싱 및 XPath 토토 베이를 제공합니다.
표 F.37. XML2
기능
기능 설명 |
---|
주어진 문서를 구문 분석하고 문서가 잘 형성된 XML 인 경우 true를 반환합니다. (참고 : 이것은 표준 postgresql 함수의 별칭입니다 |
제공된 문서의 XPath 토토 베이를 평가하고 결과를 |
제공된 문서의 XPath 토토 베이를 평가하고 결과를 |
제공된 문서의 XPath 토토 베이를 평가하고 결과를 |
문서의 토토 베이를 평가하고 결과를 XML 태그로 랩합니다. 결과가 다수 인 경우 출력은 다음과 같습니다. <poptag XML 조각 일 수있는 <Ittag 값 1 </itemtag <Ittag value 2 .... </itemtag </toptag IF 중 |
Like |
좋아요 |
문서의 토토 베이를 평가하고 지정된 분리기에 의해 분리 된 여러 값을 반환합니다 (예 : |
이것은 위의 함수를위한 래퍼입니다 |
xpath_table
#xpath_table (텍스트 키, 텍스트 문서, 텍스트 관계, 텍스트 xpaths, 텍스트 기준)을 반환 record
xpath_table
는 각 문서 세트에서 XPath 토토 베이 세트를 평가하고 결과를 테이블로 반환하는 테이블 함수입니다. 원본 문서 테이블의 기본 키 필드는 결과 세트를 조인에 쉽게 사용할 수 있도록 결과의 첫 번째 열로 리턴합니다. 매개 변수는에 설명되어 있습니다.테이블 F.38.
표 F.38. xpath_table
매개 변수
매개 변수 | 설명 |
---|---|
키 |
이름의 이름“키”필드 - 이것은 출력 테이블의 첫 번째 열로 사용될 필드 일뿐입니다. |
문서 |
XML 문서를 포함하는 필드의 이름 |
관계 |
문서가 포함 된 테이블 또는보기의 이름 |
xpaths |
하나 이상의 XPath 표현식, 분리 |
기준 |
WHERE 절의 내용. 이것은 생략 할 수 없으므로 사용 |
이 매개 변수 (XPath 문자열 제외)는 일반 SQL Select 문으로 대체되므로 약간의 유연성이 있습니다. 진술은입니다.
<key, <concection에서 <songy <criteria를 선택하십시오.
따라서 해당 매개 변수가 될 수 있습니다무엇이든해당 특정 위치에서 유효합니다. 이 선택의 결과는 정확히 두 개의 열을 반환해야합니다 (키 또는 문서에 대한 여러 필드를 나열하지 않는 한). 이 단순한 접근 방식은 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 토토 베이보다 결과 열이 더 많으면 추가 열이 null입니다.
이 예제는를 정의한다는 것을 알 수 있습니다.page_count
정수로서의 결과 열. 이 함수는 내부적으로 문자열 표현을 다루므로 출력에서 정수를 원한다고 말하면 XPath 결과의 문자열 표현을 사용하여 PostgreSQL 입력 함수를 사용하여 정수 (또는 모든 유형으로 변환합니다.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 토토 베이의 결과가 다중 자리화 될 수 있다고 가정하므로 함수에 의해 반환 된 행 수는 입력 문서 수와 다를 수 없습니다. 반환 된 첫 번째 행에는 각 토토 베이의 첫 번째 결과가 포함되어 있고 두 번째 행은 각 토토 베이의 결과입니다. 토토 베이 중 하나가 다른 값보다 값이 적은 경우 NULL 값이 대신 반환됩니다.
경우에 따라, 사용자는 주어진 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
#XSLT_PROCESS (텍스트 문서, 텍스트 스타일 시트, 텍스트 매개 변수) 텍스트를 반환
이 함수는 XSL 스타일 시트를 문서에 적용하고 변환 된 결과를 반환합니다. 그만큼Paramlist
형식에 지정된 변환에 사용할 매개 변수 할당 목록입니다.a = 1, b = 2
. 매개 변수 구문 분석은 매우 간단합니다. 매개 변수 값은 쉼표를 포함 할 수 없습니다!
2 파라미터 버전의도 있습니다.XSLT_PROCESS
변환에 매개 변수를 전달하지 않습니다.
John Grey<jgray@azuli.co.uk
이 모듈의 개발은 Torchbox Ltd. (www.torchbox.com)가 후원했습니다. Postgresql과 동일한 BSD 라이센스가 있습니다.