1. 程式人生 > >XML:Schema、三種編寫Schema的方式

XML:Schema、三種編寫Schema的方式

針對DTD檔案的不足之處:(不能出現相同名稱的元素,DTD的語法不是xml的語法)出現的Schema,需要使用什麼名稱空間的東西就先引入,使用xmlns,後面加字尾,不加就不用字尾

定義Schema檔案,字尾名為xsd

引入XMLSchema那個名稱空間,你就可以使用schema、targetNamespace等元素了,它的定義文件在eclipse工具中已經有了,肯定由dtd校驗,最初始的。

在xml中引入schema檔案校驗、提示


DTD和Schema其實可以看做解析XML的程式(比如框架)和書寫XML檔案之間的約定(比如我們程式設計師),DTD和Schema由框架提供,就約定了XML的書寫模式,你按照這個模式寫,那麼框架的程式在解析的時候就不會出錯。比如dtd中定義*,表示可以定義0到多個元素,那我框架的解析程式就會提供一個list來儲存;dtd中定義user?,表示可以出現0或1個User型別,那解析程式就會定義一個User變數來接收。否則你們之間就會出錯。

編寫Schema的三種方式:

1.      Russia Roll(俄羅斯玩偶)

<?xmlversion="1.0" encoding="UTF-8"?>

<schemaxmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.example.org/02"

xmlns:tns="http://www.example.org/02"elementFormDefault="qualified">

<element name="books">

           <complexType>

           <!-- maxOccurs表示最大出現次數-->

                    <sequencemaxOccurs="unbounded">

                             <elementname="book">

                                       <complexType>

                                                <sequenceminOccurs="1" maxOccurs="unbounded">

                                                         <elementname="title" type="string" />

                                                         <elementname="content" type="string" />

                                                         <choice>

                                                                   <elementname="author" type="string" />

                                                                   <elementname="authors">

                                                                            <complexType>

                                                                                     <all><!--每個元素只能出現一次 -->

                                                                                               <elementname="author" type="string"/>

                                                                                     </all>

                                                                            </complexType>

                                                                   </element>

                                                         </choice>

                                                </sequence>

                                                <attributename="id" type="int" use="required"/>

                                       </complexType>

                             </element>

                    </sequence>

           </complexType>

</element>

</schema>

優點:結構清晰;缺點:型別不能重用

根據它寫的xml檔案

<?xmlversion="1.0" encoding="UTF-8"?>

<book:booksxmlns:book="http://www.example.org/02"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xsi:noNamespaceSchemaLocation="02.xsd">

<book:book id="1">

           <book:title>Java inaction</book:title>

           <book:content>Java isgood</book:content>

           <book:author>Bruce</book:author>

</book:book>

<book:book id="2">

           <book:title>SOA inaction</book:title>

           <book:content>soa isdifficult</book:content>

           <book:authors>

                    <book:author>Jike</book:author>

           </book:authors>

</book:book>

</book:books>

2.      Salami Slice(臘肉切片)

<?xml version="1.0"encoding="UTF-8"?>

<schemaxmlns="http://www.w3.org/2001/XMLSchema"

                   targetNamespace="http://www.example.org/03"

                   xmlns:tns="http://www.example.org/03"

                   elementFormDefault="qualified">

         <elementname="book" type="tns:bookType"></element>

         <elementname="id" type="int"/>

         <elementname="title" type="string"/>

         <elementname="content" type="string"/>

         <complexTypename="bookType">

                   <sequence>

                            <elementref="tns:id"/>

                            <elementref="tns:title"/>

                            <elementref="tns:content"/>

                   </sequence>

         </complexType>

</schema>

優點:型別最大程度重用;缺點:結構不清晰,根節點都不好確定

<?xml version="1.0"encoding="UTF-8"?>

<titlexmlns="http://www.example.org/03"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

           xsi:schemaLocation="http://www.example.org/03">

         12asdasdasd

</title>

3.      Venetian Blind(百葉窗)

<?xml version="1.0"encoding="UTF-8"?>

<schemaxmlns="http://www.w3.org/2001/XMLSchema"

                   targetNamespace="http://www.example.org/04"

                   xmlns:tns="http://www.example.org/04"

                   elementFormDefault="qualified">

         <elementname="person" type="tns:personType"/>

         <complexTypename="personType">

                   <sequence>

                            <elementname="name" type="string"/>

                            <elementname="age" type="tns:ageType"/>

                            <elementname="email" type="tns:emailType"/>

                   </sequence>

                   <attributename="sex" type="tns:sexType"/>

         </complexType>

         <simpleTypename="emailType">

                   <restrictionbase="string">

                            <patternvalue="(\w+\.*)*\[email protected]\w+\.[A-Za-z]{2,6}"/>

                            <minLengthvalue="6"/>

                            <maxLengthvalue="255"/>

                   </restriction>

         </simpleType>

         <simpleTypename="ageType">

                   <restrictionbase="int">

                            <minInclusivevalue="1"/>

                            <maxExclusivevalue="150"/>

                   </restriction>

         </simpleType>

         <simpleTypename="sexType">

                   <restrictionbase="string">

                            <enumerationvalue="男"/>

                            <enumerationvalue="女"/>

                   </restriction>

         </simpleType>

</schema>

根據以上寫就的xml

<?xml version="1.0"encoding="UTF-8"?>

<personxmlns="http://www.example.org/04"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

           xsi:schemaLocation="http://www.example.org/04"sex="男">

          <name>搜尋</name>

          <age>149</age>

          <email>[email protected]</email>

</person>

最好的使用Schema的方式【一個Schema表示一個類,做到分離、模組化】

Student.xsd

<?xml version="1.0"encoding="UTF-8"?>

<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema"

                   targetNamespace="http://www.example.org/classroom"

                   xmlns:tns="http://www.example.org/classroom"

                   elementFormDefault="qualified">

         <xsd:elementname="student" type="tns:studentType"/>

         <xsd:complexTypename="studentType">

                   <xsd:sequence>

                            <xsd:elementname="name" type="xsd:string"/>

                            <xsd:elementname="sex" type="tns:sexType"/>

                   </xsd:sequence>

         </xsd:complexType>

         <xsd:simpleTypename="sexType">

                   <xsd:restrictionbase="xsd:string">

                            <xsd:enumerationvalue="男"/>

                            <xsd:enumerationvalue="女"/>

                   </xsd:restriction>

         </xsd:simpleType>

</xsd:schema>

classroom.xsd

<?xml version="1.0"encoding="UTF-8"?>

<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema"

                   targetNamespace="http://www.example.org/classroom"

                   xmlns:tns="http://www.example.org/classroom"

                   elementFormDefault="qualified">

         <xsd:includeschemaLocation="student.xsd"/>

         <xsd:elementname="classroom" type="tns:classroomType"/>

         <xsd:complexTypename="classroomType">

                  <xsd:sequence>

                            <xsd:elementname="grade" type="tns:gradeType"/>

                            <xsd:elementname="name" type="xsd:string"/>

                            <!--  <xsd:element name="stus">

                                     <xsd:complexType>

                                               <xsd:sequenceminOccurs="1" maxOccurs="unbounded">

                                                        <xsd:elementname="student" type="tns:studentType"/>

                                               </xsd:sequence>

                                     </xsd:complexType>

                            </xsd:element>

                            -->

                            <xsd:sequenceminOccurs="1" maxOccurs="unbounded">

                                     <xsd:elementname="student" type="tns:studentType"/>

                            </xsd:sequence>

                   </xsd:sequence>

         </xsd:complexType>

         <xsd:simpleTypename="gradeType">

                   <xsd:restrictionbase="xsd:int">

                            <xsd:minInclusivevalue="2000"/>

                            <xsd:maxInclusivevalue="3000"/>

                   </xsd:restriction>

         </xsd:simpleType>

</xsd:schema>


相關推薦

XMLSchema編寫Schema方式

針對DTD檔案的不足之處:(不能出現相同名稱的元素,DTD的語法不是xml的語法)出現的Schema,需要使用什麼名稱空間的東西就先引入,使用xmlns,後面加字尾,不加就不用字尾 定義Schema檔案,字尾名為xsd 引入XMLSchema那個名稱空間

框架源碼系列九依賴註入DIBean配置方式的註冊和實例化過程

ejb sed life ace nts 參數 找到 目標 不同 一、依賴註入DI 學習目標1)搞清楚構造參數依賴註入的過程及類2)搞清楚註解方式的屬性依賴註入在哪裏完成的。學習思路1)思考我們手寫時是如何做的2)讀 spring 源碼對比看它的實現3)Spring 源碼

Spring第一課基於XML裝配bean(四),例項化方式預設構造靜態工廠例項工廠

Spring中基於XML中的裝配bean有三種方式: 1.預設構造 2.靜態工廠 3.例項工廠 1.預設構造     在我們在Spring的xml檔案中直接通過:     <bean id="名字" class="全限定類名" ></bea

Spring之jdbcTemplate查詢的方式(單個值單個對象對象集合)

res finally 結構 execute date rep frame 參數 system JdbcTemplateDemo2.java 1 package helloworld.jdbcTemplate; 2 3 import org.springf

Kubernetes的外部訪問方式NodePortLoadBalancer和Ingress

ClusterIP ClusterIP 服務是 Kubernetes 的預設服務。它給你一個叢集內的服務,叢集內的其它應用都可以訪問該服務。叢集外部無法訪問它。 ClusterIP 服務的 YAML 檔案類似如下: apiVersion: v1  kind: Ser

Spring之jdbcTemplate查詢的方式(單個值單個物件物件集合)

1 package helloworld.jdbcTemplate; 2 3 import org.springframework.jdbc.core.JdbcTemplate; 4 5 import java.sql.*; 6 import j

01雲計算服務模式SaaSPaaS和IaaS

運行 並行 均衡 方案 統計 調度 軟件 strong 基礎設施 1.1 雲計算   1、什麽是雲計算       1. 雲計算服務是指將大量用網絡連接的計算資源統一管理和調度,構成一個計算資源池向用戶按需服務。       2. 用戶通過網絡以按需、易擴展的方式獲得

LVS負載均衡方式比較+另負載均衡方式

bytes com 方式 工作 domain rtu href 端口號 速度 轉:http://blog.csdn.net/u013256816/article/details/50705578 什麽是LVS? ??首先簡單介紹一下LVS (Linux Virtual

設計模式單例模式的創建方式及其各自的優缺點

singleton dmi 創建 檢查 public pos return style tin 單例模式: 確保一個類僅僅有一個實例,並提供全局訪問點。在Java中實現單例模式須要私有的構造器,一個靜態方法和一個靜態變量。確定在性能和資源上 的限制,怎樣選擇適當的方案來

LVS負載均衡方式比較

什麽是 redirect cti enter 通過 主服務器 ip隧道 一般來說 lvs 轉載於http://soft.chinabyte.com/25/13169025.shtml  1、什麽是LVS?   首先簡單介紹一下LVS (Linux Virtual Serve

常見存儲方式DASNASSAN的架構及比較

DAS NAS SAN存儲的分類 根據服務器類型分為: 封閉系統的存儲(封閉系統主要指大型機) 開放系統的存儲(開放系統指基於window Unix Linux等操作系統的服務器) 開放系統的存儲分為:內置存儲和外掛存儲 外掛存儲根據連接方式分為:直連式存儲(DAS)和網絡化存儲(FAS);網絡化存儲根

【RabbitMQ】4Exchange模式——訂閱路由通配符模式

message final 支持 sim 使用 完全 自己的 print ued 前兩篇博客介紹了兩種隊列模式,這篇博客介紹訂閱、路由和通配符模式,之所以放在一起介紹,是因為這三種模式都是用了Exchange交換機,消息沒有直接發送到隊列,而是發送到了交換機,經過隊列綁定交

Mybatis(五)Mybatis的使用方式

注意,這篇文章只介紹mybatis單獨使用時如何操作,是沒有用到spring的,如果需要了解mybatis和spring如何搭建,請移步這裡。 方式一:不使用mapper介面 步驟 1.pom檔案裡新增jar包 <dependency> <groupId&g

排序一冒泡以及優化

/** * 冒泡以及三種優化 * */ public class One { /** * 經典 * */ public static void one(int[] arr) { for(int i=0;i<arr.

Struts2 Action類的編寫方式

Action類的三種編寫方式     1,使用公共POJO類作為Action,提供公共無引數的Action方法(不推薦)               缺點:沒有一種方式約束Action方法

vue.js 方式安裝(vue-cli)

版權宣告:本文為博主原創文章,未經博主允許不得轉載。    https://blog.csdn.net/muzidigbig/article/details/80490884        Vue.j

思特奇筆試題Hadoop的執行模式

          1.獨立(本地)執行模式:無需任何守護程序,所有的程式都執行在同一個JVM上執行。在獨立模式下除錯MR程式非常高效方便。所以一般該模式主要是在學習或者開發階段除錯使用 。    &nb

javascript 變數申明方式varletconst

javascript 三種變數申明方式var、let、const var 申明瞭一個要麼是全域性,要麼是函式級的變數;這種是我們最常見也是最常用的。 描述: 變數宣告無論出現在程式碼的任何位置,都會在任何程式碼執行之前處理。 給一個非宣告變數賦值會隱式建立一個全

貓狗大戰融合了模型的Keras程式碼,準確率直升到99%

使用keras的resnet,inceptionV3,xception模型,首先載入預訓練模型的權重,通過預訓練權重生成對貓狗的訓練值和測試值的特徵向量 預訓練模型下載地址:http://pan.baidu.com/s/1geHmOpH from ker

javascript 變數宣告方式varletconst

var 語法格式: var a=2; var宣告的變數具有如下幾個特徵: 1.變數提升:變數宣告無論出現在程式碼的任何位置,都會在任何程式碼執行之前處理。即可以先呼叫再宣告。  (提升的是var  a而不是a=2) 2.函式提升:JavaScript會將全域性