1. 程式人生 > >Webservice-DTD和Schema(四)

Webservice-DTD和Schema(四)

SOAP之前,寫點XML的東西,為Soap打下一個比較好的基礎。XML中主要講DTDSchema以及對XML的解析與XMLJava物件的關係等,DTDSchema都不陌生,就蜻蜓點水,一帶而過,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)>

閱讀上面的dtdpersons為根節點,裡面包含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有三大種編寫方式的方式,RussianDollSalamiSlice和Venetian Blind。

RussianDoll:只有一個根元素,通過巢狀的方式完成編寫,結構清晰,但不能重用。編寫示例就是文章前面元素和屬性定義中講到的那種方式。

SalamiSlice:和上邊的玩偶相反,什麼節點都不包含,能夠最大化重用,根元素不清晰。


VenetianBlind:集成了以上兩種方式的優點。只有一個根結點,一般重用不是對元素的重用,更多是對型別的重用,因此,對於schema不僅有complexType還有simpleType


一般是一個schema對應一個java類,將兩個schema組合可以使用include標籤,將schema轉換成一個java物件可以使用xjc命令,用法可百度之。

相關推薦

Webservice-DTDSchema

寫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,先在

GoroutinesChannels

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 GuidelineBarrier

前面的文章 此博文主要講解: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全家桶之NodeJsWebpack

       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