zoukankan      html  css  js  c++  java
  • 【代码笔记】XML深入学习:DTD约束与DTD语法(1)

    •  2015-12-27

    文件名    student.xml

     1 <?xml version="1.0" encoding="GB2312" standalone="no"?>
     2 <!--大家好,我是注释-->
     3 <!--2015.12.27-->
     4 <!DOCTYPE students SYSTEM "student.dtd">
     5 <!--这里没写盘符,及表示当前目录下,也就是说两个文件(student.xml和student.dtd)要放一起-->
     6 
     7 <students>
     8     <student number="ITCAST_1001">
     9         <name>张三</name>
    10         <age>23</age>
    11         <sex>male</sex>
    12     </student>
    13 
    14     <student number="ITCAST_1002">
    15         <name>李四</name>
    16         <age>25</age>
    17         <sex>female</sex>
    18     </student>
    19 </students>

     

    1. DTD是什么:XML文档的类型定义,XML的约束。
    2. 如果a.xml文件受b.dtd的约束,那在a.xml文件中只能出现在b.dtd中定义的元素和属性。
    3. html就是一个被DTD约束的文件,所以在html文件中不可能随意给出元素和属性
    4. 当然,dtd的扩展名字就叫    .dtd

    文件名    student.dtd

     1 <!--大家好,我是注释-->
     2 <!--2015.12.27-->
     3 
     4 <!--“#PCDATA”表示元素中嵌套的是普通的文本字符串-->
     5 
     6 <!ELEMENT students (student+)>
     7 
     8 <!--“student+”中“+”加号表示拥有一到多个student元素-->
     9 
    10 <!ELEMENT student (name,age,sex)>
    11 <!ELEMENT name (#PCDATA)>
    12 <!ELEMENT age (#PCDATA)>
    13 <!ELEMENT sex (#PCDATA)>

     

    1. DTD分为两类内部DTD:
      • 内部DTD和外部DTD。
      • 外部DTD又分为:SYSTEM(本地的)和PUBLIC(网上的)。
      • 文件名    student1.xml
      •  1 <?xml version="1.0" encoding="GB2312" standalone="yes"?>
         2 
         3 <!--大家好,我是注释-->
         4 <!--2015.12.27-->
         5 
         6 <!--“#PCDATA”表示元素中嵌套的是普通的文本字符串-->
         7 <!--“student+”中“+”加号表示拥有一到多个student元素-->
         8 <!DOCTYPE students[
         9 <!ELEMENT students (student+)>
        10 <!ELEMENT student (name,age,sex)>
        11 <!ELEMENT name (#PCDATA)>
        12 <!ELEMENT age (#PCDATA)>
        13 <!ELEMENT sex (#PCDATA)>
        14 ]>
        15 
        16 
        17 <students>
        18     <student number="ITCAST_1001">
        19         <name>张三</name>
        20         <age>23</age>
        21         <sex>male</sex>
        22     </student>
        23 
        24     <student number="ITCAST_1002">
        25         <name>李四</name>
        26         <age>25</age>
        27         <sex>female</sex>
        28     </student>
        29 </students>


        这里说明一下,刚开始编辑好代码后,运行发现提示好几行错误:

      • 后来发现错误是 没有打空格,百度的优秀解答说得很有道理,这里引用一下:内部DTD放在xml中,文档声明下,根元素上,以“ <!DOCTYPE 根元素名称 [ ”开头,以“ ] ”结束。
        • 1. 为什么文件在IE里不显示?
          因为语法有错。DTD element的定义里,元素名和后面的括号间必须有空格,像book(bookname,author,price),bookname(#PCDATA)等都要有空格。
          把语法错误改了以后就可以显示。
        • 2. 为什么错的DTD单独拿出来,xml可以显示?为什么DTD不能限制xml的显示顺序?
          因为IE不根据DTD去验证XML的合法性。。。所以DTD是什么样的,在IE里都对XML没影响。
        • 以上两个问题以及回答解答了我在学习中的疑惑,运行效果如下:
      • 内部DTD只对当前xml文件有效。
    2. 外部DTD中的本地DTD
      • 就是上面student.xmlstudent.dtd组合一起。
      • 语法: <!DOCTYPE 根元素 SYSTEM "dtd文件路径">
    3. 外部DTD的网上DTD
      • 语法: <!DOCTYPE 根元素 PUBLIC "dtd名称" "dtd网址">
      • 文件名    student2.xm
      •  1 <?xml version="1.0" encoding="GB2312" standalone="no"?>
         2 <!--大家好,我是注释-->
         3 <!--2015.12.27-->
         4 
         5 <!DOCTYPE students PUBLIC ".//qdmmy6//DTD ST 1.0//ZH" "http://www.qdmmy6.com/xml/dtds/st.dtd">
         6 
         7 
         8 <students>
         9     <student number="ITCAST_1001">
        10         <name>张三</name>
        11         <age>23</age>
        12         <sex>male</sex>
        13     </student>
        14 
        15     <student number="ITCAST_1002">
        16         <name>李四</name>
        17         <age>25</age>
        18         <sex>female</sex>
        19     </student>
        20 </students>

         

    4. DTD语法之定义元素
      1. 定义元素的语法:    <!ELEMENT 元素名 元素描述>
        • 举例1:    <!ELEMENT 学生 (#PCDATA)>    ,定义了一个"学生"元素,内容为文本类型 (“ #PCDATA ”)。
        • 举例2:    <!ELEMENT 学生 (姓名,年龄,性别)>    ,定义了一个"学生"元素,内容依次为“姓名”、“年龄”、“性别”元素。
        • 举例3:    <!ELEMENT 学生 ANY>    ,定义了一个"学生"元素,内容随意不受限。
        • 举例4:    <!ELEMENT 学生 EMPTY>    ,定义了一个"学生"元素,不能有内容,即空元素,空元素可以有属性。
      2. 子元素出现次数可以使用  *、+、? 来指定子元素出现的次数。
        • *:可以出现0~N次;
        • +:可以出现1~N次;
        • :可以出现0~1次。
        • 举例: <!ELEMENT 学生 (姓名,年龄?,业余爱好*,成绩+,性别)>    ,定义一个“学生”元素,第一个子元素为“姓名”,必须且仅能出现一次,“年龄”是可有可无的,“业余爱好”可以出现0~N次,grade可以出现1~N次,“性别”必须且仅能出现一次。
      3. 枚举类型子元素
        • 举例:  <!ELEMENT 学生 (姓名|年龄|性别)> ,表示“学生”子元素为“姓名”、“年龄”、“性别”其中之一,必须仅且能选择其一。  
    5. DTD语法之定义属性
      1. <!ATTLIST>      就是  ATTRIBUTE LIST 的意思。(属性列表)
      2. <!ATTLIST 元素名 属性名 属性类型 设置说明>  定义属性的语法结构
      3. 举例: <!ATTLIST 学生 学号 CDATA #REQUIRED> ,给“学生”元素定义属性“学号”,类型为文本,这个默认是必须的。
      4. 属性设置说明:
        • #REQUIRED :说明属性是必须的。
        • #IMPLIED :说明属性是可选的。
        • 默认值 :在不给出属性值时,使用默认值。
      5. 属性类型
        • CDATA :文本类型
        • Enumerated :枚举类型
        • ID :ID类型,ID类型属性用于标记元素的唯一性,即元素的ID属性值不能与其他元素的ID值相同。
        • IDREF :ID引用类型,用于指定另一个元素,与另一个元素建立关联关系,IDREF类型的属性值必须是另一个元素的ID。
  • 相关阅读:
    《架构之美》读后感(一)
    《架构即未来》读后感(三)
    《架构即未来》读后感(二)
    《架构即未来》读后感(一)
    《架构漫谈》读后感(三)
    《架构漫谈》读后感(二)
    SOA
    软件杯-视频全量目标分析和建模需求分析说明
    阅读笔记一线架构师实践指南03
    阅读笔记一线架构师实践指南02
  • 原文地址:https://www.cnblogs.com/xiaofu007/p/5079428.html
Copyright © 2011-2022 走看看