• 沒有找到結果。

第二章 背景

2.1 XML 與XPath

在 2.1.1 節會從 HTML 介紹到 XML 的起源與特性,而 2.1.2 節是說 明 XPath 的功能及語法。

2.1.1 HTML 與 XML 介紹

回顧全球資訊網所採用的 HTML (HyperText Markup Language)網 頁 標 準 格 式 。 HTML 基 本 上 是 一 個 以 SGML(Standard Generalized Markup Language)所定義出來的描述語言(Markup Language)。 然而,

HTML 卻有下列不足的地方:

z 擴充性(Extensibility):HTML 並無法讓使用者可以自行定義標 籤(tag)、屬性(attribute)。

z 結構化(Structure):HTML 的標記只是註記,並不支援正規結構 的定義,以表示資料庫(database)中的 schema 或者是物件導向的 hierarchy。

z 驗證(Validation):HTML 也無法透過 HTML 語言的定義,來為某 個 HTML 文件進行查核驗證(Validation)的工作。

除了彌補 HTML 的不足,為了滿足各式各樣的應用需求並且將 Web 的 發 展 推 向 一 個 分 散 式 資 料 處 理 的 新 領 域 , W3C(Word Wide Web Consortium) 以 及 其 參 與 成 員 於 是 制 訂 了 XML(eXtensible Markup Language)。

相對於 HTML 網頁格式, XML 的主要優點是使用者可以自行定義所 需要註記之語言。這讓使用者得以保存所註記資料的語意及與將其資 料結構化。舉例來說,一家商店可能保留其顧客的基本資料。假設該 商店的保留的某顧客資料如下:

周大強

電話:(03)5712121

地址:新竹市大學路 1001 號

若是使用 HTML 來儲存,一個可能的寫法如下:

<H1>周大強</H1>

<TABLE BORDER="1">

<TR><TD>電話:</TD>

<TD><B>(03)5712121</B></TD>

</TR>

<TR><TD>地址:</TD>

<TD><B>新竹市大學路 1001 號</B></TD>

</TR>

</TABLE>

然而,對這份 HTML 資料文件而言,它要對 Web 所顯示的真正資訊—

顧客姓名、地址與電話—已經消失;相對地,它只顯示了在文字上,

哪些要變成標題,哪些要製成一個 table,哪些要成為粗體字等等。

這文件中的名字、電話、地址等語意已經不見了。若改用 XML 格式,

則可將這些語意存於標記(tag)中。例如︰

<PERSON>

<NAME>周大強</NAME>

<PHONE>(03)5712121</PHONE>

<ADDRESS>新竹市大學路 1001 號</ADDRESS>

</PERSON>

上述的例子,顯示 XML 格式的資料仍可以保留 NAME、PHONE、ADDRESS 等訊息,這可用於與其他資料模式的系統(如資料庫)做資料交換。

這是 XML 資料模式重要的地方。至於呈現的部份可用 XSLT (eXtensible Stylesheet Language Transformation)來轉化成網頁。

簡言之,XML 不但是用來讓機器之間交換資料的橋樑,還可以是人 與人之間的溝通媒介;XML 也不僅僅與 Web 有關,更可以和所有一般 的 事 務 相 關 。 XML 已 經 是 當 今 電 子 商 務 資 訊 交 換 (Information Exchange)的標準。由於資料使用的重複率高,將資料改用 XML 儲存,

對於資料的保存及再利用都有很好的效果,因此 XML 應該會在極短的 未來廣泛的被採用,漸漸的取代 HTML 的地位。

2.1.2 XPath (XML Path Language):

XPath 是 W3C 的一種標準[1][20][21],他所定義的語法和語意可 供 XSLT 使用,主要目的是用來定出 XML 文件中各個部分的位置。XPath

z ancestor, ancestor-or-self z Parent, self, child

z descendant, descendant-or-self z following, following-sibling z preceding, preceding-sibling z attribute

z processing-instruction() z node()

‹ 謂語(Predicates):謂語可有可無,也可以有好幾則。我們可 以在謂語中使用運算式來篩選所選取的節點。

„ 謂語運算式:

z Boolean: or , and , = , != , <= , < , >= , >

z Numeral: + , - , * , div , mod z Functional: position( )

„ 範例:

z child::tr[position( ) > =0]

Æ 取 child 位置大於 0 的

z child::table[attribute::width =“150"]

Æ 取 child 名稱是 table,且有個屬性 width 的值是 150。

z tr[position()=0 AND child::td]

Æ 取第 0 個 tr,且有 child 為 td。

圖 2-1 是 XPath 的一個範例,目前節點是/TABLE/TBODY,他的取向軸 是"child",節點測試是"TR",謂語是"position()>=0",意思是只要 是 TBODY 的 child,且位置大於等於 0 就會被選取。因此圖中的那兩 個 TR 就都被選出來了。

TABLE

TBODY

TR TR

TD TD TD TD

…/TABLE/TBODY/child::TR[position( ) >= 0]

圖 2-1: XPath 的範例

2.2 BODE 系統(Browser-Oriented Data

相關文件