xml dtd schema

xml

xml就是一個標記語言,主要用途就是數據傳輸和配置文件。


eg:

<?xml version="1.0" encoding="utf-8"?>
<home name="dpdj">
  <mother>mm</mother>
  <father>bb</father>
  <son>dp</son>
</home>
  • xml總是以<?xml version=" " encoding=" "?>開始的
    • version 代表的是這個xml文件使用的xml的版本,目前xml的版本有1.0,1.1版本,但是使用的比較廣泛的是1.0版本
    • encoding 表示的是這個xml文件的編碼形式
  • <home> ... </home>這就是這個xml描述的信息了,具體是什么含義就要看具體的業務需求了
    • xml中僅僅只能有一個根元素,例子中的根元素是home
    • <home name="dpdj"> 這里的name標識的是屬性
    • 對于沒有子元素的節點,我們稱為簡單節點,對于包含子元素的節點稱為復雜節點(后面會用到

dtd

DTD(文檔類型定義)的作用就是定義xml文檔的合法構建模塊。其實就是規定了xml應該有哪些節點,節點有哪些屬性。(dtd現在用的不多,大多數都被schema取代了,schema的功能和dtd類似,但是可以描述更多的信息


eg:

  <!ELEMENT home (mother,father,son)>
  <!ELEMENT mother (#PCDATA)>
  <!ELEMENT father (#PCDATA)>
  <!ELEMENT son (#PCDATA)>
  <!ATTLIST home name CDATA #REQUIRED>
  • 上面的dtd描述了一個xml,里面包含的元素有home,mother,father,son。home元素包含子元素 mother,father,son。home 元素還有一個屬性 name 類型是字符串,必須填寫。
  • dtd定義元素的語法是: <!ELEMENT 元素名 類別> 或者 <!ELEMENT 元素名 (元素內容)>
    • <!ELEMENT 元素名 類別>
      • 元素名就是你需要在xml寫的名字,比如 home ,son
      • 類別 就是元素里面輸入內容的類型,可選的類型有 (#CPDATA),EMPTY,ANY
        • (#CPDATA) 指的就是字符串,比如:<mother>mm</mother>
        • EMPTY 指的就是不能有內容, 比如 :
        • ANY 可以包含任何可以解析的數據
    • <!ELEMENT 元素名 (元素內容)>
      • 這個就是表示帶有子元素的元素,比如 home帶有子元素,<!ELEMENT home (mother,father,son)>
      • 指定子元素的時候還可以指定子元素出現的次數
        • <!ELEMENT home (son*)> 表示son出現0次或者多次
        • <!ELEMENT home (son?)> 表示son出現0次或者1次
        • <!ELEMENT home (son+)> 表示son至少出現一次
  • 對應元素使用到的屬性定義,使用到的是<!ATTLIST 元素名 屬性名 屬性類型 默認值>的方式來定義的
    • 元素名和屬性名就沒什么好說的了。關于屬性類型和默認值
      • 屬性類型
        • CDATA 字符串類型
        • (value1|value2|value3..) 枚舉列表中的一個
        • ID 唯一的id
        • IDREF 另外一個元素的id
        • IDREFS 其他id的列表
        • NMTOKEN 合法的 XML 名稱
        • 還有一些屬性類型具體的可以查看 http://www.w3school.com.cn/
    • 默認值
      • #REQUIRED 屬性值是必需的
      • #IMPLIED 屬性不是必需的
      • #FIXED value 屬性值是固定的 比如:<!ATTLIST home name CDATA #FIXED "dpdj">

怎么在xml中使用dtd

eg:

  <?xml version="1.0" encoding="utf-8"?>
  //第一種方式   直接在xml里面定義dtd描述   
   <!DOCTYPE home [
     <!ELEMENT home (mother,father,son)>
     <!ELEMENT mother (#PCDATA)>
     <!ELEMENT father (#PCDATA)>
     <!ELEMENT son (#PCDATA)>
     <!ATTLIST home name CDATA #REQUIRED>
   ]>
  //第二種方式    引用本地的dtd文件  這里的home指的是 跟元素
  <!DOCTYPE home SYSTEM "dtd文件">
  //第三種方式    引用網絡上的dtd定義
  <!DOCTYPE home PUBLIC "dtdname" "url">
  <home name="">
    ....
  </home>

note:dtd文件僅僅是定義了xml的結構,并不進行語法的檢查


schema

這個和dtd類似的,基于xml的dtd的替代者
eg:

  <?xml version="1.0"?>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
             targetNamespace="http://www.suse.edu.cn"
             xmlns="http://www.suse.edu.cn"
             elementFormDefault="qualified">
    <xs:element name="home">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="mother" type="xs:string"/>
          <xs:element name="father" type="xs:string"/>
          <xs:element name="son" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" use="required"/>
      </xs:complexType>
    </xs:element>
  </xs:schema>

這里需要提一下,xml的規范是由w3這個組織制定的

  • 每個schema都是以<schema>節點開始。
    •   <?xml version="1.0"?>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
          targetNamespace="http://www.suse.edu.cn"
          xmlns="http://www.suse.edu.cn"
          elementFormDefault="qualified">
            ...
            ...
        </xs:schema>
      
      • 這里 xmlns:xs="http://www.w3.org/2001/XMLSchema" 表示schema中用到的元素和數據類型都是來自這個命名空間下面,同時還規定了來自這個命名空間的元素和數據類型應該使用前綴xs:
      • targetNamespace="http://www.suse.edu.cn" 表示schema定義的元素來自該命名空間
      • xmlns="http://www.suse.edu.cn" 設置了默認的命名空間
      • **elementFormDefault="qualified" ** 指出任何 XML 實例文檔所使用的且在此 schema 中聲明過的元素必須被命名空間限定
      • 在xml中使用的時候是
          <?xml version="1.0"?>
          <home xmlns="http://www.suse.edu.cn"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://www.suse.edu.cn home.xsd">
            <mother>mm</mother>
            <father>bb</father>
            <son>dp</son>
          </home>
        
  • 簡單元素(僅僅是包含文本的元素)
    • <xs:element name="名字" type="類型"/>

      • 名字就是元素的名字
      • 類型就是包含內容的類型(Schema有很多類型下面給出常見的)
        • xs:string
        • xs:decimal
        • xs:integer
        • xs:boolean
        • xs:date
        • xs:time
    • 簡單元素的默認值和固定值<xs:element name="home" type="xs:string" default="j" fixed="j"/>

    • 簡單元素的屬性值<xs:attribute name="name" type="xs:string" use="required"/>

  • 復合元素 (空元素 包含其他元素)
    • 空元素
        <xs:element name="son">
            <xs:complexContent>
               <xs:attribute name="name" type="xs:string"/>
           </xs:complexType>
        </xs:element>
      
    • 包含其他元素
        <xs:element name="home">
          <xs:complexType>
            <xs:element name="mother" type="xs:string"/>
            <xs:element name="father" type="xs:string"/>
            <xs:element name="son" type="xs:string"/>
          </xs:complexType>
        </xs:element>
      

關于Schema其實還有很多其他的東西,有興趣的可以 to http://www.w3school.com.cn/


Nothing is certain in this life. The only thing i know for sure is that. I love you and my life. That is the only thing i know. have a good day

:)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. XML簡介 以下內容來自于http://www.w3school.com.cn/xml 基本知識 XML 和...
    WebSSO閱讀 1,956評論 1 7
  • Xml Schema的用途 1. 定義一個Xml文檔中都有什么元素 2. 定義一個Xml文檔中都會有什么屬性 ...
    _東邪_閱讀 2,364評論 2 4
  • Schema與DTD XML Schema符合XML語法結構。 DOM、SAX等XML API很容易解析出XML ...
    扒塊腹肌閱讀 2,163評論 0 4
  • xml (extensible markup language)1.xml 是可擴展標記語言2.xml是一種標記語...
    帥哥_刷哥閱讀 668評論 0 1
  • 簡單類型(simpleType) 1,簡單元素:指只能包含文本內容,不能夠包含子元素,也沒有屬性的元素。 2,屬性...
    持續進步者閱讀 960評論 0 2