2018年7月5日星期四

XML 教學、技術入門及應用 (2)

上一回【XML 教學、技術入門及應用 (1)

範列︰


下載範列︰


IntegrityKnight/XML-Example-in-java Repo
https://github.com/IntegrityKnight/XML-Example-in-java

隨你喜歡,建議用 git clone,有 History 及版本對比。
https://javatoybox.blogspot.com/2017/10/github-egit-part-5-git-branch.html#Git-Clone

gitclone

Eclipse 中顯示 Git History。

對比使用方法︰


gitclone_1

有兩個選擇︰
  1. GitHub 中版本對比頁面,在【Repo】頁按【Commit】,選想看的 Commit,會看到前一個版本對比,可看出加減甚麼,容易看出變化。

  2. Eclipse 內置 Compare Editor
    https://javatoybox.blogspot.com/2017/11/github-egit-part-6-git-conflict.html#Compare Editor

Commit 都是順序的,比對每個步驟加減了甚麼,再加上之後說明,希望大家能了解 XML 基礎技術。

———————————簡易的分隔線————————————

制作 XML︰


很多 Opensource 的 XML 及 XSD 一出來就是完成品,沒給新手看到制作步驟及方法。因為熟 XML,才能一步或幾部到位,只是純分享,沒有義務或責任教人。

0_xml

首先想好,有甚麼資料是必填。

例如 Contact List 一定有持有者 ( Owner ),而且有最後更新時間 ( RenewDateTime ),最少要有一筆資料 ( Record ) 才是 Contact List,資料中,一定要有名稱 ( Name ) 及聯絡方法  ( Address / Contact ) 。

1_xml

然後再想,有甚麼資料可選填。

例如「灰燼」家在鄉下,連電話線路都沒有,那有會有 Contact Number 呢?不能打電話就寄信吧!又例如長谷◯◯是個流浪者,跟本沒有家,只有手提電話能聯絡﹐所以聯絡方法可以二選一或全選。

其他資料沒限制,都可選填,造三筆資料測試 XSD 是否定義正確。

制作 XML schema ( XSD )︰


這裡會由零開始教 XSD 制作︰

1_xsd

在 Eclipse 建立 xsd 檔,會自動填上以上資料。

2_xsd

現在先把料訊改為自己的,並套上 namespace。

3_xsd

Tag 層次結構先放一邊,把所有的 Tag 名稱及資料 Type 定義好及加上 annotation 作為文件註解及參考等。在 JAXB,XML Schema Type 與 Java Data Type 有 Mapping,知道就好,這一刻不用太深入。

DateTime Data Type
https://www.w3schools.com/xml/schema_dtypes_date.asp

Schema-to-Java Mapping
https://docs.oracle.com/cd/E19316-01/819-3669/6n5sg7bjm/index.html#bnazu

4_xsd

這裡開始變得複雜,是時候把結構處理一下,加上 <xs:complexType> 及 <xs:sequence> 定義出層次結構。

5_xsd

基本架構已經成型,現在可以慢慢加上各種限制。例如【minOccurs】及【maxOccurs】限制出現次數,<xs:choice> 限制選擇,最少要選填一次 Contact 或 Address,全選也可以。

【限制】這部份是最難的,多點參考其他人 XSD。

6_xsd

有沒有發現 Tag 有 Attributes?在 Contact 那個 Tag 中。現在要改寫 <xs:element name="Contact"> 那個 Tag,要留心喔,這裡比之前寫的更複雜。

定義 XML 的 XSD 及使用︰


2_xml

XSD 這樣就完成,怎樣用在 XML 上?修改 XML 加上 xmlns 及 xsi:schemaLocation。要注意,XSD 及 XML 要放在同一層資料夾,而 xsi:schemaLocation 在網址後要隔一個空格才打上 XSD 檔案名稱。

3_xml

盡管試!試到有問題,會有即時訊息說有甚麼錯,如果跟預期不一樣,有可能 XSD 寫錯,要想清楚限制怎樣寫。

———————————簡易的分隔線————————————

用 Validator 驗證 XML︰


有 XSD 有 XML,雖然用 Eclipse 可以即時知道有甚麼問題,但怎用程式做驗證?沒理由用「人手」做驗證吧?XML 天生可給「電腦」看,「電腦」只看不做事嗎?當然把「人手」做的東西交「電腦」做。

程式設定︰


Run_Config

設定 Run Config,指定 XSD 及 XML 檔案位置。用程式做 validation,沒了 XML 與 XSD 放在同一層的限制。

程式碼解說︰


XML_validation_1

九成九以上程式碼是參考 API 文件,只有 setNamespaceAware 是額外補上去。

XML 1.0 不支援 namespace,所以補上這行設定,不知道這樣做對不對,但補上這一句,才可執行程式。

javax.xml.validation
https://docs.oracle.com/javase/8/docs/api/index.html?javax/xml/validation/package-summary.html

How Parsers Handle Namespaces ( Namespace Aware parser at XML 1.0 )
https://docstore.mik.ua/orelly/xml/xmlnut/ch04_03.htm

———————————簡易的分隔線————————————

總結︰


可用 XSD 驗證 XML 後,應該可以反過來,用程式造 XML 給其他人 驗證,這個當然不會是人手去寫,例如從資料庫撈特定資料,造一份符合對方用的格式。

轉換資料做 XML 的技術有很多,有機會以 JAXB 示範。還記得上次從政府網頁上拿到 XSD 及 XML 嗎?就用那個作範例,既能學習,也貼近真實世界。

下一回【XML 教學、技術入門及應用 (3)】


沒有留言:

發佈留言

設有留言驗證及審查,檢閱後,才會顯示留言。
本人惰性很高,留言或許會石沉大海。