8.3のXML型XPath関数XPathの基本まとめ新しいシステムや規格が登場した場合、そのシステムや規格の仕様を理解してから使わないとセキュリティ上の問題が発生します。何も考えないで「動くだけ」のコードを書いても問題ない場合もありますが、多くの場合、規格や仕様を理解していないとセキュリティ上の問題が発生します。XMLデータベースも一般的に利用されるようになり、XPathも一般的に利用されるようになってきました。次回以降にXPathのセキュリティ問題を解説するため、簡単にXPathについて解説します。詳しいXPath入門は書籍や仕様書などを参照してください。今回はXPathの基本を紹介するのみとなります。XPathとはXPathとは、XML文書から必要な情報を取得するための規格です。W3Cで規格が策定されています。2.0は2007年にリリースされた規格です。1.0互換モードも定義されています。2.0では表現の記述方法が異なります。XPathとほかのXML規格XPathはXSLT、XQuery、XLink、XPointer規格にも含まれています。XQueryとXPath出典:XQeury+XMLデータベース入門(日経BP出版センター)XQueryは文書やデータベース、WebページなどXMLデータソースを統合するクエリ言語です。2.0はXQueryの基礎となる規格となっています。8.3からXPathを利用してXMLテキストから情報を取得可能になりました。8.3にはXML型のデータ型とXML型のデータを取り扱うXML関数が追加されました。8.3のXML型PostgreSQLはXML文書をテキストのまま保存せず、パースした状態のデータをXML型として保存します。XML型コラムにそのままXML文書は保存できないのでxmlparse関数を利用して変換します。'abc<foo>bar</foo><bar>foo</bar>')このほかにも::xmlを利用してテキストをXML型にキャストすることも可能です。詳しくはhttp://www.postgresql.jp/document/pg833doc/html/datatype-xml.htmlを参照してください。8.3にはXML型コラムやXMLテキストにXPath1.0のクエリを実行するxpath関数が追加されています。nsarray])XMLサポートを有効にしたPostgreSQLサーバにpsqlを利用して接続すると、XPathクエリが行えることが解ります。msPostgreSQLをご存知の方なら“⁠{bar}⁠”⁠、“⁠{bar2}⁠”と結果が配列型で返ってきていることが解ります。XMLでは同じ要素名の要素が複数あっても構わないので、PostgreSQLは配列型を返します。本記事の目的はXPathインジェクション対策が目的ですから、すべての構文は解説しませんが、次回はもう少し詳しくXPath言語を解説します。;の'/foo//text()'がXPathの表現です。言葉に訳すと“/⁠”(ルート)以下にある“⁠foo⁠”要素の“⁠text⁠”を取得せよとなります。先の例の場合、2つのレコードがあるので2つの結果が返ってきています。ms余計な“⁠abc⁠”がなくなっていますが、普通にSELECTするとデータ全体が保存されていることが分かります。msまとめXPathを利用すると、とても簡単にXML文書からデータを取り出せることが解ります。1.0をサポートしているので基本的な操作は可能になっています。XQeuryをサポートするシステムであればFLOWR(フラワー)構文を利用してさらに高度なクエリが可能です。本連載ではXQeuryの解説は行いません。興味をお持ちの方は書籍などを参考にしてください。次回はPHP本体に付属しているDOMモジュールのXPath関数を利用し、より複雑なXPath表現を紹介します。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します⁠。個別にライセンスが設定されている記事等はそのライセンスに従います。