Webservice-DTD和Schema(四)
寫SOAP之前,寫點XML的東西,為Soap打下一個比較好的基礎。XML中主要講DTD、Schema以及對XML的解析與XML與Java物件的關係等,DTD和Schema都不陌生,就蜻蜓點水,一帶而過,XMl的解析在下篇中寫。
關於dtd作用好處不用在此多言,它大有被schema替代的趨勢,下面舉例說明。首先來認識一下的DTD,如果我們想要如下格式的xml文件,dtd應該怎麼寫呢?
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE persons SYSTEM "persons.dtd"> <persons> <person id="_1"> <sex/> <name/> <age/> <messages> <message> <title/> <content/> </message> </messages> </person> <person id="_2"> <sex></sex> <name></name> <age></age> <messages> <message> <title></title> <content></content> </message> </messages> </person> </persons>
來看為上面xml所寫的dtd:
<?xml version="1.0" encoding="UTF-8"?> <!ELEMENT persons (person+)> <!ELEMENT person (sex,name,age,messages+)> <!ATTLIST person id ID #REQUIRED> <!ELEMENT sex (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT messages (message+)> <!ELEMENT message (title,content)> <!ELEMENT title (#PCDATA)> <!ELEMENT content (#PCDATA)>
閱讀上面的dtd,persons為根節點,裡面包含person節點,+為常用控制符,?表示0次或者1次,+表示1此或者多次,預設表示1次,這個不需要記憶,查文件即可,person包括sex等節點,為每一個節點定義型別,<!ATTLIST>是給person定義屬性的,ID為型別,#REQUIRED表示該屬性必須,不能不寫。
dtd沒多少內容,會寫會用基本就可以了。關於schema有三部分內容,第一是名稱空間,第二是元素和屬性的定義,第三是語法和建議編寫的方式。Schema基於xml語法,編寫更加的合理,使用名稱空間支援名稱相同的元素,完成了對java或者所有物件的修飾並且提供了大量的資料型別。
名稱空間
先來講解名稱空間,所謂名稱空間就等於包,跟java中的包是一個作用,下圖為定義一個schema:
在xml中引入schema,需要用schemaLocation屬性來指定,此屬性有兩個值,第一個值是需要使用的名稱空間,第二個值是供名稱空間使用的xmlschema的位置,兩者之間用空格分隔,下圖中沒有體現,讀者可參考spring中的配置,還需要注意的是,使用schemaLocation屬性時,需要指定該屬性來自哪裡。
通過檔案路徑引入:
元素和屬性的定義
元素是有element來定義,複雜型別由complexType表示,見下圖:
屬性的定義包含在complexType內部:
語法和建議的編寫方式
Schema有三大種編寫方式的方式,RussianDoll、SalamiSlice和Venetian Blind。
RussianDoll:只有一個根元素,通過巢狀的方式完成編寫,結構清晰,但不能重用。編寫示例就是文章前面元素和屬性定義中講到的那種方式。
SalamiSlice:和上邊的玩偶相反,什麼節點都不包含,能夠最大化重用,根元素不清晰。
VenetianBlind:集成了以上兩種方式的優點。只有一個根結點,一般重用不是對元素的重用,更多是對型別的重用,因此,對於schema不僅有complexType還有simpleType。
一般是一個schema對應一個java類,將兩個schema組合可以使用include標籤,將schema轉換成一個java物件可以使用xjc命令,用法可百度之。
相關推薦
Webservice-DTD和Schema(四)
寫SOAP之前,寫點XML的東西,為Soap打下一個比較好的基礎。XML中主要講DTD、Schema以及對XML的解析與XML與Java物件的關係等,DTD和Schema都不陌生,就蜻蜓點水,一帶而過,XMl的解析在下篇中寫。 關於dtd作用好處不用在此多言,它大有被schema替代的趨勢,下面舉例說明。首
基於rhel7.2的Zabbix平臺搭建和部署(四)
linux 監控軟件 zabbix nginx mysql php lnmp基於rhel7.2的Zabbix平臺搭建和部署(四)一、實現zabbix添加監測項,添加對Linux主機的監控、說明:先在“配置”-“主機”裏添加主機監控,監控os資源:內存,cpu,io,負載,帶寬等.(1)登錄zabbix,先在
Goroutines和Channels(四)
IT capacity 額外 有一個 連接 -o AC 簡單 內存 如果說goroutine是Go語言程序的並發體的話,那麽channels則是它們之間的通信機制。 一個channel是一個通信機制,它可以讓一個goroutine通過它給另一個goroutine發送值信息。
CentOS7.4搭建DNS緩存服務器和轉發器(四)
inter 效率 分享 oot type out def TP dns查詢 (一)簡述一,DNS緩存服務器:DNS緩存服務器,即用來存儲計算機網絡上的用戶需要的網頁、文件等信息的專用服務器。這種服務器不僅可以使用戶得到他們想要的信息,而且可以減少網絡的交換量。緩存服務器往往
.NetCore下使用Prometheus實現系統監控和警報 (四)客戶端程式碼處理
在程式碼中使用就比較簡單了 Nuget包獲取下 prometheus-net prometheus-net.AspNetCore 然後新增中介軟體就行了 app.UseMetricServer(); 預設地址都是/metrics,在Prometheus中的targets就是指向了這
Java類和物件(四)
抽象類和抽象方法 1. 抽象類 在 Java 面向物件當中,所有的物件都是用過類進行描繪的,但是並不是所有的類都是用來描繪物件的,如果一個類中沒有包含足夠的資訊來描繪一個具體的物件,我們把這種類定義為抽象類。 抽象類的特徵: 抽象類不能用來例項化物件,所以抽象類必須被
Java資料結構和演算法(四)赫夫曼樹
Java資料結構和演算法(四)赫夫曼樹 哈夫曼樹又稱為最優二叉樹,赫夫曼樹的一個最主要的應用就是哈夫曼編碼。 一、赫夫曼樹 can you can a can as a can canner can a can. 1.1 定長編碼 99 97 110 32 121 111 117 32 99 97
詳解C#特性和反射(四)
本篇內容是特性和反射的最後一篇內容,前面三篇文章: 一、晚期繫結(Late Binding)是一種在編譯時不知道型別及其成員,而在執行時建立指定型別的例項並呼叫其成員的技術,使用名稱空間System中的Activator類來實現晚期繫結,例如: Type myType = Type.
android -------- ConstraintLayout Guideline和Barrier(四)
前面的文章 此博文主要講解:Guideline和Barrier Guideline (瞭解,實際使用過程中我使用的不多) 當需要一個任意位置的錨點時,可以使用指示線(Guideline)來幫助定位,指示線實際上是 View 的子類,使用方式和普通的 Vi
Android 9 功能和 API(四)-----------其它一些改變
多攝像頭支援和攝像頭更新 在執行 Android 9 的裝置上,您可以通過兩個或更多物理攝像頭來同時訪問多個視訊流。] 在配備雙前置攝像頭或雙後置攝像頭的裝置上,您可以建立只配備單攝像頭的裝置所不可能實現的創新功能,例如無縫縮放、背景虛化和立體成像。 通過該 API,您還可以呼叫邏輯或融合的攝像
git的使用和學習(四)配置別名讓git更加簡單
別名的配置方法 $ git config --global alias.st status $ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --glo
Java8之日期和時間(四)
Java 8新增了LocalDate和LocalTime介面,為什麼要搞一套全新的處理日期和時間的API。因為舊的java.util.Date實在是太難用了。java.util.Date月份從0開始,一月是0,十二月是11,變態吧!java.time.LocalDate月份和
linq的延遲執行--學習linq的資料和筆記(四)
延遲執行的實現 是因為使用了IEnumerable<T>的這種列舉進行迭代! 如:方法 public static IEnumerable<string> getString() { for (int i =
SVN的使用和安裝(四)--三大指令
SVN的使用和安裝(四)--三大指令 1. 檢出操作checkout::建立與服務端連線,更新資料到本地 注意:第一次操作使用checkout,以後使用update 2. 提交操作commit 3. 提交update 示例如下: 建立要提交的檔案 第一次檢出之
React全家桶之NodeJs和Webpack(四)
NodeJs 如果你學過java,你一定知道tomcat,它是一個開源的Web 應用伺服器,當你執行tomcat後,在瀏覽器輸入本地機器的IP地址或者保留IP地址"127.0.0.1"加上專案地址,就可以在本地測試了,java是一門後臺語言。
lidgren 介紹和使用 (四)------ p2p
p2p前幾年比較流行,因為他不需要伺服器,通過不同客戶端內網,就可以互動。 他的原理也很簡單,就是先內網傳送給伺服器,瞭解到自己的外網ip和埠。然後內網向對方外網傳送資料。 由於nat,也就是路由器的阻攔,第一次傳送資料會被拋棄,但傳送方的 路由器卻記錄了 對方的ip,這樣對方 傳送外網 給你,就不會被
CAS 5.1.x 的搭建和使用(四)—— 配置使用HTTP協議訪問的服務端
本文轉自:http://www.cnblogs.com/flying607/p/7605158.html這節比較簡單。前面第一篇說道了配置HTTPS訪問需要三件事:2、配置Tomcat使用該keystore來支援https3、客戶端的jre的證書倉庫(cacerts)要加上該
Maven--生命週期和外掛(四)
上幾篇從應用角度來講Maven,這篇還本著應用的精神繼續講解,Maven最好玩的地方不是單單的為你管理了jar這麼簡單,而是在他所定義的生命週期和外掛下,玩多模組才是最有意思的,這篇大概講一下生命週期和外掛,下篇講多模組依賴。 Maven的宣告週期有三套,這裡只說平時用到最核心的一套,也就是預設
『高級篇』docker容器來說微服務優勢和不足(四)
it人 交付 規劃 鏈接地址 變更 靈活 upload 模型 個數 >原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!>原文鏈接地址:『高級篇』docker容器來說微服務優勢和不足(四) 來看看微服務有哪些優勢和不足。 優勢 獨立性 從構建部署
kafka原理和實踐(四)spring-kafka消費者原始碼
正文系列目錄 ==============正文分割線===================== 回到頂部一、kafkaConsumer消費者模型 如上圖所示,spring-kafka消費者模型主要流程: 1.容器啟動,輪詢執行消費。 2.kafkaConsumer拉取訊息流程: 1)Fetc