Xml Tree

lua-users home
wiki

xmltree:XML 的中階結構

(這份文件原本是 LazyKit 的一部分。)

此文件說明 XML 的中階樹狀結構表示方式。其用意是儲存在 lua-users wiki 中,讓使用者能參考關於這項主題的討論。

這種表示方式用在描述 XML 信息集中的資料,但依然能輕鬆搭配慣用的 Lua 程式碼使用。此表示方式是一種介面,讓精緻的實作能使用元表提供和基本表格相同的介面。

LxpTreeLazyTree 採用這種方式實作。

範例說明規格

<paragraph justify='centered'>first child<b>bold</b>second child</paragraph> 
lz = {name="paragraph", attr={justify="centered"}, 
  "first child",
  {name="b", "bold", n=1}
  "second child",
  n=3
} 

稻草人規格

是 Lua 中元素及其內容的表格表示方式。表格必須有 name 鍵,表示元素名稱。

樹可能有一個 attr 鍵,用來表示元素中所有屬性的表格。只有字串鍵有意義。(LuaExpat? 使用數字鍵標記從 DTD 預設而來的屬性。)應提供 xattrpairs(tree) 這類的輕鬆反覆運算器。

若元素不為空,每個子節點會包含在 tree[1]tree[2] 等欄位中。子節點可能是表示字元資料內容的字串,或是其他樹。

剖析器應嘗試合併相鄰的字元資料內容。換言之,應避免產生類似以下內容:

{name="p", "Hello w", "orld"} 

剖析器應包含 n 鍵,表示子節點數量。不過,針對程式碼中的樹字面值,通用的處理程式碼應該使用類似以下程式碼:

tree.n or table.getn(tree) 

。(會以 xmliter.getn(tree) 找出),這和在一般清單(而非 list.n)中使用 table.getn(list) 的方式相同。

(為何需要獨立的 getn?這是必要的,因為 table.getn(tree) 並未明確呼叫 tree.n,而是使用 rawget(tree, "n")。精緻的樹實作可能需要使用元表呼叫才能找出子項數量。)

未明確建模的項目

XML 原始檔案的語法細節不在範圍內,例如:

元素屬性的順序並不重要。

CDATA 區段的存在與否並無特別意義;這只是撰寫字元資料的另一種方式。

註解並不重要。

屬性的來源,無論是明確指出或是在 DTD 中指定,都無關緊要。

明確建模的項目

所有元素,無論是否重複。

所有字元資料,包括混合內容。

上述元素的順序。

應建模的項目

DTD。這可以放入 root.dtd 中。

編碼。不過,宣告所有內容皆為 UTF-8 可能沒有什麼問題---尤其是對 USASCII 使用者而言....

命名空間。我沒有足夠經驗提出設計。


最近的變更 · 偏好設定
編輯 · 歷史記錄
最後一次編輯於 2004 年 2 月 29 日 12:28 am GMT (差異)