¾�ΥС�������ʸ�� �� 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 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

F.42. xml2

xml2�⥸�塼���XPath�䤤��碌��XSLT��ǽ���󶡤��ޤ���

F.42.1. �ѻ�ͽ��β�ǽ���ˤĤ��ƤΤ��Τ餻

PostgreSQL 8.3���顢SQL/XMLɸ��˴�Ť�XML��Ϣ�ε�ǽ�ϥ������������¸�ߤ��ޤ��� ���ε�ǽ�ϡ�XML��ʸ������XPath�䤤��碌�ʤ��ܥ⥸�塼�뤬�Ԥʤ����Ȥ�Ʊ���Τ��ȤȤ���ʾ�Τ��Ȥ��ϰϤȤ��ޤ�����API�ˤϸߴ����Ϥ���ޤ��� ������ɸ��API�Τ��ᡢ�ܥ⥸�塼��Ϻ���ΥС�������PostgreSQL�Ǻ�������ͽ��Ǥ��Τǡ����ץꥱ���������Ѵ����侩����Ƥ��ޤ��� �ܥ⥸�塼��ε�ǽ�˿�����API��Ŭ�ѤǤ��ʤ���Τ����뤳�Ȥ�ʬ���ä���硢������­�˼���Ȥळ�Ȥ��Ǥ���褦���ˤ��������ɽ�����Ƥ���������

F.42.2. �ؿ�������

表F-32���ܥ⥸�塼����󶡤���ؿ��򼨤��ޤ��� �����δؿ��ϴ�ñ��XML���Ϥ�XPath�䤤��碌���󶡤��ޤ��� ���٤Ƥΰ�����text���Ǥ��� �ʷ�ˤ��뤿���������ޤ���

表 F-32. �ؿ�

�ؿ��������
xml_is_well_formed(document) bool

����ϥѥ�᡼���Ȥ���Ϳ����줿ʸ��ƥ����Ȥ���Ϥ���ʸ����������XML�Ǥ���п����֤��ޤ��� ������:PostgreSQL 8.2�����ǤϤ��δؿ���xml_valid()�ȸƤФ�Ƥ��ޤ����� XML�Ǥ������ȸ��ڤ��ۤʤ��̣����Ĥ���ְ�ä�̾���Ǥ����� �Ť�̾����ޤ����ѤǤ��ޤ������ѻ�ͽ��Ǥ�����

xpath_string(document, query) text

�����δؿ���Ϳ����줿ʸ����Ф���XPath�䤤��碌��ɾ��������̤���ꤷ�����˥��㥹�Ȥ��ޤ���

xpath_number(document, query) float4
xpath_bool(document, query) bool
xpath_nodeset(document, query, toptag, itemtag) text

�����ʸ����Ф����䤤��碌��ɾ������XML������˷�̤���ߤޤ��� ��̤�ʣ�����ͤǤ���С����Ϥϰʲ��Τ褦�ˤʤ�ޤ���

<toptag>
<itemtag>Value 1 which could be an XML fragment</itemtag>
<itemtag>Value 2....</itemtag>
</toptag>

toptag�ޤ���itemtag����ʸ�����ä���硢�б����륿���Ͼ�ά����ޤ���

xpath_nodeset(document, query) text

xpath_nodeset(document, query, toptag, itemtag)��Ʊ�ͤǤ�������̤�ξ���Υ�����ʤ��ޤ���

xpath_nodeset(document, query, itemtag) text

xpath_nodeset(document, query, toptag, itemtag)��Ʊ�ͤǤ�������̤�toptag��ʤ��ޤ���

xpath_list(document, query, separator) text

���δؿ���ʣ�����ͤ���ꤷ�����ڤ�ʸ���Ƕ��ڤä��֤��ޤ��� �㤨�С����ڤ�ʸ����,�ʤ��Value 1,Value 2,Value 3�Ȥʤ�ޤ���

xpath_list(document, query) text ����ϡ�,����ڤ�ʸ���Ȥ��ƻ��Ѥ��롢��δؿ��Υ�åѤǤ���

F.42.3. xpath_table

xpath_table(text key, text document, text relation, text xpaths, text criteria) returns setof record

xpath_table�ϳ�ʸ�񽸹���Ф���XPath�䤤��碌�����ɾ��������̤�ơ��֥�Ȥ����֤��ơ��֥�ؿ��Ǥ��� ��ʸ��ơ��֥�Υץ饤�ޥꥭ���ե�����ɤ���̤������Ȥ����֤���ޤ��Τǡ���̥��åȤ��ưפ˷��ǻ��Ѥ��뤳�Ȥ��Ǥ��ޤ��� �ѥ�᡼���ˤĤ��Ƥ�表F-33���������ޤ���

表 F-33. xpath_table�Υѥ�᡼��

�ѥ�᡼������
key

"key"�ե�����ɤ�̾���Ǥ��� ����ϡ����ϥơ��֥�������Ȥ��ƻ��Ѥ����ñ�ʤ�ե�����ɤǤ��� �Ĥޤꡢ����ϳƽ��ϹԤνи������̤���쥳���ɤǤ��� �ʸ�Ҥ�ʣ���ͤ˴ؤ��������򻲾Ȥ��Ƥ�����������

document

XMLʸ���ޤ�ե�����ɤ�̾���Ǥ���

relation

ʸ���ޤ�ơ��֥�ޤ��ϥӥ塼��̾���Ǥ���

xpaths

|�Ƕ��ڤ�줿��1�İʾ��XPath���Ǥ���

criteria

WHERE������ƤǤ��� ����Ͼ�ά���뤳�Ȥ��Ǥ��ޤ��� ��졼�����������Ԥ��������������true�ޤ���1=1����Ѥ��Ƥ���������

��XPathʸ���������ˤ����Υѥ�᡼�������̤�SQL SELECT ʸ��ñ����ִ�����ޤ��� ���Τ��ᡢ¿���ν�����������ޤ���

SELECT <key>, <document> FROM <relation> WHERE <criteria>

ʸ�Ͼ���̤�Ǥ��Τǡ������Υѥ�᡼���ˤϤ��줾��ξ���ͭ���ʤ�ΤǤ�������Ǥ��褤�櫓�Ǥ��� ����SELECT�η�̤����Τ�2�Ĥ�����֤��ʤ���Фʤ�ޤ���ʥ����ޤ���ʸ����Ф���ʣ���Υե�����ɤ���󤵤��褦�Ȥ��ʤ��¤�Ǥ��ˡ� ���δ�ά���줿��ˡ�Ǥϡ�SQL���󥸥�������󹶷���ɤ�����˥桼������Ϳ����줿�ͤ򤹤٤Ƹ��ڤ��ʤ���Фʤ�ʤ����Ȥ����դ��Ƥ���������

���δؿ��ϡ����������ꤹ�뤿���AS����դ���FROM����ǻ��Ѥ���ʤ���Фʤ�ޤ��� �ʲ�����򼨤��ޤ���

SELECT * FROM
xpath_table('article_id',
            'article_xml',
            'articles',
            '/article/author|/article/pages|/article/title',
            'date_entered > ''2003-01-01'' ')
AS t(article_id integer, author text, page_count integer, title text);

����AS��ϡ����ϥơ��֥����̾�Ȥ��η���������ޤ��� ��Ƭ��"key"�ե�����ɡ��Ĥ꤬XPath�䤤��碌���б����ޤ��� ���������¿����XPath�䤤��碌��¸�ߤ����硢;�ä��䤤��碌��̵�뤵��ޤ��� XPath�䤤��碌���¿���η����¸�ߤ������;�ä����NULL�ˤʤ�ޤ���

�������page_count����������Ȥ����������Ƥ��뤳�Ȥ����դ��Ƥ��������� �ؿ�������Ū��ʸ����ɽ���ǰ����ޤ��� ���Τ��ᡢ������������ǰ��������ȸ��äƤ������XPath��̤�ʸ����ɽ������Ф��������ʤޤ���AS����׵ᤷ��Ǥ�դη��ˤ��Ѵ����뤿���PostgreSQL�����ϴؿ�����Ѥ��ޤ��� �㤨�з�̤����ʤɡ��Ѵ��Ǥ��ʤ����ϥ��顼�ˤʤ�ޤ��� �Ǥ��Τǡ��ǡ����˲��餫�����꤬����ȹͤ������硢�󷿤Ȥ���text�˸��ꤹ�������褤���⤷��ޤ���

SELECTʸ�θƤӽФ��Ǥϡ�ñ�ʤ�SELECT *�Ǥʤ���Фʤ�ʤ�ɬ�����Ϥ���ޤ��� �������̾���ǻ��Ȥ��뤳�Ȥ�¾�Υơ��֥�ȷ�礹�뤳�Ȥ��ǽ�Ǥ��� ���δؿ��ϴ�˾�β��餫�������㤨�н��󡢷�硢�����Ȥʤɡˤ�Ԥ����Ȥ��Ǥ��벾�ۥơ��֥���������ޤ��� ���Τ���ʲ�����ʣ������Ȥ��Ƽ������Ȥ��Ǥ��ޤ���

SELECT t.title, p.fullname, p.email
FROM xpath_table('article_id', 'article_xml', 'articles',
                 '/article/title|/article/author/@id',
                 'xpath_string(article_xml,''/article/@date'') > ''2003-03-20'' ')
       AS t(article_id integer, title text, author_id integer),
     tblPeopleInfo AS p
WHERE t.author_id = p.person_id;

�����ʤ��顢���ؤˤ��뤿��ˤ���򤹤٤ƥӥ塼�Ȥ�����߱������Ȥ��Ǥ��ޤ���

F.42.3.1. ʣ���ͤη��

xpath_table�ؿ��ϳ�XPath�䤤��碌�η�̤�ʣ�����ͤ���IJ�ǽ�������뤳�Ȥ�����Ȥ��Ƥ��ޤ��� ���Τ��ᡢ���δؿ����֤��Կ�������ʸ��ο���Ʊ���ˤʤ�ʤ���ǽ��������ޤ��� �֤����ǽ�ιԤˤϳ��䤤��碌�κǽ�η�̤���2���ܤιԤˤϳ��䤤��碌��2���ܤη�̤��ޤޤ�ޤ��� �䤤��碌��1�Ĥ�¾���⾯�ʤ��ͤ���ľ��������NULL�ͤ��֤���ޤ���

���ꤷ��XPath�䤤��碌��ñ��η�̡ʤ����餯��դ�ʸ���̻ҡˤΤߤ��֤����Ȥ��桼����ʬ���äƤ����礬����ޤ��� �⤷�����ʣ���η�̤��֤�XPath�Ȱ��˻��Ѥ����ȡ�ñ���ͤη�̤Ϸ�̤κǽ�ιԤˤΤ߸���ޤ��� ���β����ˡ�Ϥ��ñ���XPath�䤤��碌���Ф�������ʬ�Ȥ��ƥ����ե�����ɤ���Ѥ��뤳�ȤǤ��� �ʲ�����򼨤��ޤ���

CREATE TABLE test (
    id int PRIMARY KEY,
    xml text
);

INSERT INTO test VALUES (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>');

INSERT INTO test VALUES (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>');

SELECT * FROM
  xpath_table('id','xml','test',
              '/doc/@num|/doc/line/@num|/doc/line/a|/doc/line/b|/doc/line/c',
              'true')
  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

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

�ƹԤ�doc_num���դ��뤿��ˤϡ�2�Ĥ�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',
              'true')
    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))
WHERE i.id=t.id AND i.id=1
ORDER BY 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 rows)

F.42.4. XSLT�ؿ�

libxslt�����󥹥ȡ��뤵��Ƥ����硢�ʲ��δؿ�����Ѥ��뤳�Ȥ��Ǥ��ޤ���

F.42.4.1. xslt_process

xslt_process(text document, text stylesheet, text paramlist) returns text

���δؿ���XSL�������륷���Ȥ�ʸ���Ŭ�Ѥ����Ѵ�������̤��֤��ޤ��� paramlist�ϡ�'a=1,b=2'�Ȥ������ǻ��ꤵ�줿���Ѵ��ǻ��Ѥ����ѥ�᡼���������Υꥹ�ȤǤ��� �ѥ�᡼�����ϤϤ��ޤ�Ϲͤ��줿��ΤǤϤʤ����Ȥ����դ��Ƥ����������ѥ�᡼���ͤ˥���ޤ�����뤳�Ȥ��Ǥ��ޤ���

�ޤ����Ѵ��ѤΥѥ�᡼�����Ϥ��ʤ���2�ĤΥѥ�᡼������С�������xslt_process��¸�ߤ��ޤ���

F.42.5. ���

John Gray

�ܥ⥸�塼��γ�ȯ��Torchbox Ltd. (www.torchbox.com)�����Ǥ��� PostgreSQL��Ʊ��BSD�饤���󥹤Ǥ���