• 2015-12-27

文件名    student.xml

 <?xml version="1.0" encoding="GB2312" standalone="no"?>
<!--大家好,我是注释-->
<!--2015.12.27-->
<!DOCTYPE students SYSTEM "student.dtd">
<!--这里没写盘符,及表示当前目录下,也就是说两个文件(student.xml和student.dtd)要放一起--> <students>
<student number="ITCAST_1001">
<name>张三</name>
<age>23</age>
<sex>male</sex>
</student> <student number="ITCAST_1002">
<name>李四</name>
<age>25</age>
<sex>female</sex>
</student>
</students>
  1. DTD是什么:XML文档的类型定义,XML的约束。
  2. 如果a.xml文件受b.dtd的约束,那在a.xml文件中只能出现在b.dtd中定义的元素和属性。
  3. html就是一个被DTD约束的文件,所以在html文件中不可能随意给出元素和属性
  4. 当然,dtd的扩展名字就叫    .dtd

文件名    student.dtd

 <!--大家好,我是注释-->
<!--2015.12.27--> <!--“#PCDATA”表示元素中嵌套的是普通的文本字符串--> <!ELEMENT students (student+)> <!--“student+”中“+”加号表示拥有一到多个student元素--> <!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
  1. DTD分为两类内部DTD:

    • 内部DTD和外部DTD。
    • 外部DTD又分为:SYSTEM(本地的)和PUBLIC(网上的)。
    • 文件名    student1.xml
    •  <?xml version="1.0" encoding="GB2312" standalone="yes"?>
      
       <!--大家好,我是注释-->
      <!--2015.12.27--> <!--“#PCDATA”表示元素中嵌套的是普通的文本字符串-->
      <!--“student+”中“+”加号表示拥有一到多个student元素-->
      <!DOCTYPE students[
      <!ELEMENT students (student+)>
      <!ELEMENT student (name,age,sex)>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
      <!ELEMENT sex (#PCDATA)>
      ]> <students>
      <student number="ITCAST_1001">
      <name>张三</name>
      <age>23</age>
      <sex>male</sex>
      </student> <student number="ITCAST_1002">
      <name>李四</name>
      <age>25</age>
      <sex>female</sex>
      </student>
      </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.xml和student.dtd组合一起。
    • 语法: <!DOCTYPE 根元素 SYSTEM "dtd文件路径">
  3. 外部DTD的网上DTD
    • 语法: <!DOCTYPE 根元素 PUBLIC "dtd名称" "dtd网址">
    • 文件名    student2.xm
    •  <?xml version="1.0" encoding="GB2312" standalone="no"?>
      <!--大家好,我是注释-->
      <!--2015.12.27--> <!DOCTYPE students PUBLIC ".//qdmmy6//DTD ST 1.0//ZH" "http://www.qdmmy6.com/xml/dtds/st.dtd"> <students>
      <student number="ITCAST_1001">
      <name>张三</name>
      <age>23</age>
      <sex>male</sex>
      </student> <student number="ITCAST_1002">
      <name>李四</name>
      <age>25</age>
      <sex>female</sex>
      </student>
      </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。

【代码笔记】XML深入学习:DTD约束与DTD语法(1)的更多相关文章

  1. 【代码笔记】XML深入学习:DTD约束与DTD语法(2)

    DTD语法之定义实体(了解即可) 实体分为一般实体和参数实体. 定义实体:定义变量 引用实体:使用变量 一般实体:定义实体在DTD中,实体引用在xml中. 参数实体:定义实体在DTD中,实体引用在DT ...

  2. 【代码笔记】Java学习一阶段总结

    写笔记需要打开eclipse写 哈哈哈哈,不然写什么都屡不清了 ……还需要打开API说明文档. JFrame 窗体组件. JFrame里面常用的函数: setSize 设置窗体大小 setDefaul ...

  3. XML的DTD约束

    DTD约束:DTD的声明和引用 1.内部DTD文档 <!DOCTYPE 根元素 [定义内容]> 2.外部DTD文档 <!DOCTYPE 根元素 SYSTEM "DTD文件路 ...

  4. Struts2配置dtd约束

    Struts2和Struts1的区别: 一.elclipse-ee开发 搭建环境eclipse-ee 1.加入jar包  apps/struts2-blank.war解压 2.在web.xml文件中配 ...

  5. XML的学习

    XML是可扩展标记语言德意思,它和HTML一样都是标记语言(标签语言),不同之处在于XML可拓展,何为可拓展?在HTML中每个标签都有其特定的含义,我们不可以随便写一个标签并赋予其意义,而XML中就可 ...

  6. .net学习笔记---xml基础知识

    一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...

  7. XML&DTD&XML Schema学习

    XML(eXtensible Markup Language)可扩展的标记语言.xml在web service编程中尤为重要.在网络传输中可以作为传输数据的载体.xml作为元语言,它可以用来标记数据. ...

  8. XML约束之DTD

    XML文件的约束:什么叫约束呢?顾名思义,就是对xml文件的内容进行按照既定规则的限制.我们知道,因为xml文件的标签是可以自定义的,而往往我们用xml文件都是为了表达一定的数据集合(即小型的数据库) ...

  9. xml语法、DTD约束xml、Schema约束xml、DOM解析xml

    今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...

随机推荐

  1. iframe里面的元素触发父窗口元素事件的jquery代码 转

    例如父窗口定义了一个事件. top: $(dom1).bind('topEvent', function(){}); 那么iframe里面的元素怎样触发父窗口dom1的事件呢?这样吗? $(dom1, ...

  2. 安装GCC-8.3.0及其依赖

    目录 目录 1 1. 前言 1 2. 安装日期 1 3. GCC国内镜像下载地址 2 4. GCC的依赖库 2 4.1. gmp库 2 4.2. mpfr库 2 4.3. mpc库 2 4.4. m4 ...

  3. Qt 学习之路 2(44):QFileSystemModel

    Home / Qt 学习之路 2 / Qt 学习之路 2(44):QFileSystemModel Qt 学习之路 2(44):QFileSystemModel  豆子  2013年2月21日  Qt ...

  4. P4331 [BOI2004]Sequence 数字序列 (左偏树)

    [题目链接] https://www.luogu.org/problemnew/show/P4331 题目描述 给定一个整数序列\(a_1, a_2, ··· , a_n,\)求出一个递增序列\(b_ ...

  5. HDU 3783

    读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出. MY:(OUTPUT LIMIT EXCEED) #include& ...

  6. POJ_1733 Parity game 【并查集+离散化】

    一.题面 POJ1733 二.分析 该题与之前做过的带权并查集的唯一区别就是数组开不下.所以需要用离散化的思想,只取那些有用的点来解决该问题. 离散化其实就是把这些所有用到的点收集后,去重,再排一下序 ...

  7. 联想g400怎么进bios设置u盘启动图文教程

    联想g400怎么进bios设置u盘启动图文教程 转自http://www.kqidong.com/bios/3940.html 虽然成功学会u盘装系统的人很多,但是设置u盘启动在小白们的眼中却没有那么 ...

  8. sql常用格式化函数及字符串函数

    一.常用格式化函数 1.日期转字符串 select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS') YYYY:年份 MM:月份号(01-12) ...

  9. Epplus导出Excel(DataTable)

    1.先将dataTable转换成流 public Stream DataTableToExcel(DataTable dataTable, string[] columns, string sheet ...

  10. SSH Intro - Remove entry

    ssh-keygen -f "/home/frank/.ssh/known_hosts" -R ec2-54-222-218-195.cn-north-1.compute.amaz ...