範列︰
下載範列︰
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
Eclipse 中顯示 Git History。
對比使用方法︰
有兩個選擇︰
- GitHub 中版本對比頁面,在【Repo】頁按【Commit】,選想看的 Commit,會看到前一個版本對比,可看出加減甚麼,容易看出變化。
- 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,才能一步或幾部到位,只是純分享,沒有義務或責任教人。
首先想好,有甚麼資料是必填。
例如 Contact List 一定有持有者 ( Owner ),而且有最後更新時間 ( RenewDateTime ),最少要有一筆資料 ( Record ) 才是 Contact List,資料中,一定要有名稱 ( Name ) 及聯絡方法 ( Address / Contact ) 。
然後再想,有甚麼資料可選填。
例如「灰燼」家在鄉下,連電話線路都沒有,那有會有 Contact Number 呢?不能打電話就寄信吧!又例如長谷◯◯是個流浪者,跟本沒有家,只有手提電話能聯絡﹐所以聯絡方法可以二選一或全選。
其他資料沒限制,都可選填,造三筆資料測試 XSD 是否定義正確。
制作 XML schema ( XSD )︰
這裡會由零開始教 XSD 制作︰
在 Eclipse 建立 xsd 檔,會自動填上以上資料。
現在先把料訊改為自己的,並套上 namespace。
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
這裡開始變得複雜,是時候把結構處理一下,加上 <xs:complexType> 及 <xs:sequence> 定義出層次結構。
基本架構已經成型,現在可以慢慢加上各種限制。例如【minOccurs】及【maxOccurs】限制出現次數,<xs:choice> 限制選擇,最少要選填一次 Contact 或 Address,全選也可以。
【限制】這部份是最難的,多點參考其他人 XSD。
有沒有發現 Tag 有 Attributes?在 Contact 那個 Tag 中。現在要改寫 <xs:element name="Contact"> 那個 Tag,要留心喔,這裡比之前寫的更複雜。
定義 XML 的 XSD 及使用︰
XSD 這樣就完成,怎樣用在 XML 上?修改 XML 加上 xmlns 及 xsi:schemaLocation。要注意,XSD 及 XML 要放在同一層資料夾,而 xsi:schemaLocation 在網址後要隔一個空格才打上 XSD 檔案名稱。
盡管試!試到有問題,會有即時訊息說有甚麼錯,如果跟預期不一樣,有可能 XSD 寫錯,要想清楚限制怎樣寫。
———————————簡易的分隔線————————————
用 Validator 驗證 XML︰
有 XSD 有 XML,雖然用 Eclipse 可以即時知道有甚麼問題,但怎用程式做驗證?沒理由用「人手」做驗證吧?XML 天生可給「電腦」看,「電腦」只看不做事嗎?當然把「人手」做的東西交「電腦」做。
程式設定︰
設定 Run Config,指定 XSD 及 XML 檔案位置。用程式做 validation,沒了 XML 與 XSD 放在同一層的限制。
程式碼解說︰
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)】
沒有留言:
發佈留言
設有留言驗證及審查,檢閱後,才會顯示留言。
本人惰性很高,留言或許會石沉大海。