XML - 資料交換管理/基本資料結構
| 上一章 | 下一章 |
| ← 單個實體 | 一對多關係 → |
學習目標
|
在回顧資料管理的四大核心問題(捕獲、儲存、檢索和交換)時,典型的 XML 使用者會遇到在整個儲存和交換階段應用於各種資料的重複的基本結構模式。這些模式始終重複出現,因為它們的使用超出了底層資料處理的特定上下文。我們稱這些模式為“資料結構”(或資料型別)。
在本節中,我們將討論一些最基本的資料結構,並解釋它們為何有用以及如何使用 XML 處理它們。
我們從一個簡單的例子開始。考慮一個單人家庭的普通雜貨購物清單。
購物清單示例
Andy's shopping list: * eggs * cough syrup(pick up for granny) * orange juice * bread * laundry detergent **don't forget this**
在分析此購物清單中包含的資訊的各個方面時,我們可以進行一些基本概括
- 可移植性:購物清單可以輕鬆地表示和傳輸。如果需要,它可以儲存在資料庫中並由定製軟體處理,但它也可以輕鬆地寫在紙上;
- 可理解性:購物清單很容易被其目標受眾(在本例中,是唯一編寫此清單的人)理解,因此不需要額外的資訊或結構即可立即使用;
- 適應性:如果需要進行任何更改(例如新增或刪除清單專案),則存在現有的且眾所周知的完成此操作的方法(例如,在手寫清單的情況下,只需寫下新條目或劃掉不需要的條目)。
有了前面的例子作為背景,我們現在可以介紹“基本資料結構”的基本概念。
| “基本資料結構”的概念描述了我們用來儲存資料的基本約定,以便我們可以更輕鬆地交換資料。當我們遵循這些基本約定時,我們有助於確保資訊的可移植性、可理解性和適應性。 |
現在我們已經介紹了資料結構的概念,我們可以從一些具體的定義開始,然後在我們的購物清單示例的上下文中回顧這些定義。
以下術語定義了我們在本章中使用的“核心”資料結構[1],這些術語按複雜度遞增的順序排列
- SimpleBoolean:任何可以表示為“真”或“假”的值。
- SimpleString:連續的字元序列,包括字母數字字元和非字母數字字元。
- SimpleSequence:專案的列舉,通常可以透過數字索引訪問。
- 名稱-值對:與單個值關聯的任意單個名稱。
- SimpleDictionary:專案的列舉,通常可以透過字母數字索引訪問。
- SimpleTable:列和行的有序排列。SimpleTable 可以被分類為“複合”資料結構(例如,SimpleSequence,其中序列中的每個專案都是單個 SimpleDictionary)。
在回顧這些“核心”資料結構時要記住的一點是,它們是基本的和互補的。也就是說,核心結構組合使用可以形成更復雜的結構。一旦讀者理解了這一事實,就會發現,使用 XML,除了這些“核心”資料結構之外,沒有可想而知的應用程式或資料規範無法完全描述。
| 一旦我們理解了“核心”資料結構,我們就可以將它們組合使用來表示任何可想而知的結構化資訊。 |
現在回顧上面的“購物清單示例”。當我們將它與我們剛剛定義的“核心”資料結構進行比較時,我們可以做出一些相當直接的觀察
- 整個購物清單無法使用 SimpleBoolean 資料結構表示,因為資訊比“真”或“假”更復雜。
- 整個購物清單可以使用 SimpleString 表示。
- 可能有一些原因讓我們不想使用 SimpleString 來表示整個購物清單。例如,我們可能希望將清單傳輸到資料庫或其他軟體應用程式中,然後能夠對清單中的單個專案進行排序、查詢、複製或以其他方式處理。因此,將整個清單視為 SimpleString 會使我們的處理要求變得複雜。
在 XML 中表示 SimpleString 的不同方法
<Example>
<String note="This XML attribute contains a SimpleString.">
This XML Text Node represents a SimpleString.
</String>
<!-- This XML comment contains a SimpleString -->
<![CDATA[ This XML CDATA section contains a SimpleString. ]]>
</Example>
在 XML 中表示 SimpleSequence 的不同方法
<Example>
<!-- use a single XML attribute with a space-delimited list of items -->
<ShoppingList items="bread eggs milk juice" />
<!-- use a single XML attribute with a semicolon-delimited list of items
(this allows us to add items with spaces in them) -->
<ShoppingList items="bread;cough syrup;milk;juice;laundry detergent" />
<!-- yet another way (but not necessarily a good way)
using multiple XML attributes -->
<ShoppingList item00="bread" item01="eggs" item02="cough syrup" />
<!-- yet another way
using XML child elements -->
<ShoppingList>
<item>eggs</item><item>milk</item><item>cough syrup</item>
</ShoppingList>
</Example>
SimpleTable (XML_Elem)
<table>
<tr><item>eggs</item><getfor>andy</getfor><notes></notes></tr>
<tr><item>milk</item><getfor>andy</getfor><notes></notes></tr>
<tr><item>laundry detergent</item><getfor>andy</getfor><notes></notes></tr>
<tr><item>cough syrup</item><getfor>granny</getfor><notes>try to get grape flavor</notes></tr>
</table>
SimpleTable (XML_Attr)
<table>
<tr item="eggs" getfor="andy" notes="" />
<tr item="milk" getfor="andy" notes="" />
<tr item="laundry detergent" getfor="andy" notes="" />
<tr item="cough syrup" getfor="granny" notes="try to get grape flavor" />
</table>
SimpleTable (XML_Mixed)
<table>
<tr>
<item getfor="andy" >eggs</item><notes></notes>
</tr>
<tr>
<item getfor="andy" >milk</item><notes></notes>
</tr>
<tr>
<item getfor="andy" >laundry detergent</item><notes></notes>
</tr>
<tr>
<item getfor="granny">cough syrup</item><notes>try to get grape flavor</notes>
</tr>
</table>
為了進一步說明基本資料結構如何在許多不同的上下文中應用,這裡將檢查和比較前面列出的某些基本資料結構在計算機程式設計中的上下文。
在比較的第一部分,我們檢查了通用術語與程式語言中常用的術語。
- SimpleBoolean:通常稱為
boolean,通常可以取true或false,0或1,或其他值,具體取決於語言。 - SimpleString:通常稱為
string或stringBuffer。 - SimpleSequence:程式設計中按數字索引的變數通常用
array表示。 - Name-value pair:(將在下面更詳細地解釋)
- SimpleDictionary:這些通常用
dictionary或associative array表示。 - SimpleTable:(將在下面更詳細地解釋)
現在我們已經介紹並討論了基本資料結構的具體示例,這裡有一些適用於所有資料結構的技術考量,對於可能負責實施和設計 XML 架構以處理特定實施場景的人來說,這些考量尤其重要。
- 確切的術語取決於上下文:雖然這裡描述的“基本”結構適用於許多不同的場景,但用於描述它們的術語可能會重疊或衝突。例如,這裡使用的術語“SimpleSequence”與許多程式語言中稱為“array”的術語非常接近。類似地,術語“SimpleDictionary”是某些程式語言中稱為“associative array”的簡寫。雖然這種密切關聯是故意的,但必須始終牢記,特定應用程式或程式語言的具體細微差別將需要額外關注。有時,當深入研究任何給定專案或技術中任何特定資料結構的細節時,會產生輕微的衝突或差異。
- 基本結構是靈活的概念:結構可以根據彼此定義,某些結構可以遞迴應用。例如,可以使用 SimpleString 和一些基本假設輕鬆地定義 SimpleSequence。(例如,SimpleSequence 是一個字母數字字元的字串,其中序列中的每個專案都由一個或多個空格字元隔開:“eggs bread butter milk”)。
- 抽象結構傾向於隱藏棘手的細節:例如,術語“SimpleString”描述了字元序列的抽象概念(例如,“ISBN 0-596-00327-7”)。抽象概念相當直觀且簡單。然而,用於實現該抽象概念並將其表示為真實執行程式碼的精確表示法完全是另一回事。不同的程式語言和不同的環境可能使用不同的約定來表示相同的“字串”。由於這種可變性,人們還可以認識到 XML 中“SimpleString”的抽象概念也取決於任何給定專案的需要而具有不同的表示形式。
- ↑ 重要說明:這裡使用的基本術語是概括。雖然它們可能與特定軟體、特定程式語言或特定應用程式中使用的術語一致,但這些術語並非旨在作為技術精確的定義。這裡描述的概念旨在幫助強調 XML 中可互操作性的上下文無關原則。