[Pre-Class] XPath

"

Path, 路徑.
XPath, 叉路徑. (喂)

路徑
1. 往來的道路。
2. 做事的門路、方法。

對以上的理解沒問題的話, 那就應該能理解什麼是 XPath 了.
正如上面的所寫, 往來的道路就是路徑. 而對於 XML 而言, 節點之間的往來也有其路徑.
那麼 XPath 就是代達這些節點往來路徑的方法了.

提及路徑, 大家可能馬上想到 絕對路徑 及 相對路徑 這2種方法.
然而光靠這2種方法作節點的訪問在應用上還是不夠方便.

而 XPath 就提供了很多彈性方法給我們使用.

在 W3C 發佈的 2.0 正式版中指出, 其 expression 方法有以下10種:
1  Primary Expressions
2  Path Expressions
3  Sequence Expressions
4  Arithmetic Expressions
5  Comparison Expressions
6  Logical Expressions
7  For Expressions
8  Conditional Expressions
9  Quantified Expressions
10 Expressions on SequenceTypes

另外由 1.0 文件中我們可以看到當時的 Data Model 定義了 7 種類型的節點: (課本有提及)
1 root nodes
2 element nodes
3 text nodes
4 attribute nodes
5 namespace nodes
6 processing instruction nodes
7 comment nodes

而 W3C 在發佈 XPath 2.0 正式版的同時, 也發佈了 XQuery 1.0 and XPath 2.0 Data Model (XDM)
http://www.w3.org/TR/xpath-datamodel/
從下圖中我們可以看到其 Type Hierarchy 結構

而 XPath 的 Processing Model 如下
http://www.w3.org/TR/xpath20/#id-processing-model

在 W3Schools 裡可以看到這樣的一張示意圖:

由此可見 XQuery, XLink 及 XSLT 也內建支援 XPath.

在我們課本上所提及的 XPath 版本為 1.0, 而在本年一月時 W3C 正式發表了 XPath 2.0 版本.

在 Java 上我們可以透過 Jaxen 配合其他 XML Parser(如 dom4j) 使用.
另外由 Java 5 開始也內建 XPath 的支援了.

以上僅為本人對此標題內容之理解, 如有錯誤歡迎指教.

參考資料
XML Path Language (XPath) 1.0
W3C Recommendation 16 November 1999
http://www.w3.org/TR/xpath/

XML Path Language (XPath) 2.0
W3C Recommendation 23 January 2007
http://www.w3.org/TR/xpath20/

XML 路徑語言(XPath) (版本  1.0)
http://www.opendl.com/openxml/w3/TR/xpath/xpath-big5.html

XPath From Wikipedia
http://en.wikipedia.org/wiki/XPath

Jaxen
http://jaxen.codehaus.org/

domj4
http://www.dom4j.org/

Package javax.xml.xpath
http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/package-summary.html
http://java.sun.com/javase/6/docs/api/javax/xml/xpath/package-summary.html

The Java XPath API
http://www-128.ibm.com/developerworks/xml/library/x-javaxpathapi.html
http://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html

Learn XPath
http://www.w3schools.com/xpath/default.asp

XPath 教程
http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html

"