XML学习笔记|第一章xml约束之dtd

引言:

XML的约束:
为什么要使用约束?
比如现在哟啊定义一个Person的文件,只想要这个文件里保存人的信息,比如name age 等,但是如果在XML文件中写了一个标签<猫>,发现这个可以正常显示,因为符合语法规范,但是猫肯定不是人的信息,xml的标签是自定义的,需要技术来规定xml中只能出现的元素,这个时候需要约束。
xml的约束的技术:dtd约束和schema约束

一:dtd的快速入门

准备:创建一个文件 后缀名 .dtd
步骤:

  1. 看xml中有多少个元素,有几个元素在dtd文件中写几个<!ELEMENT>
  2. 判断元素是简单元素还是复杂元素
    简单元素:没有子元素
    <!ELEMENT 元素名称 (#PCDATA)>
    复杂元素:有子元素
    <!ELEMENT 元素名称 (子元素)>
  3. 需要在xml文件中引入dtd文件

例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person SYSTEM "a.dtd">
<person>
	<name>张三</name>
	<age>20</age>
</person>
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>

but但是浏览器对这个没有约束,在Eclipse中编辑才会有效果

二:dtd的三种引入方式

1.引入外部的dtd文件

      <!DOCTYPE 根元素名称 SYSTEM"dtd文件的路径">

2.引入内部的dtd文件(直接在xml中引用)

<!DOCTYPE person [
  <!ELEMENT person (name,age)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT age (#PCDATA)>
  
]>

3.使用外部的额dtd文件(网络上的dtd文件)

<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的url">

三:使用dtd定义元素

语法: <!ELEMENT 元素名 约束>

  • 简单元素: 没有子元素的元素 <!ELEMENT name (#PCDATA)>
(#PCDATA):约束name时字符串类型
EMPTY:元素必须为空(没有内容)
ANY:元素可以为任意值
  • 复杂元素:
<!ELEMENT person (name,age,sex,school)>

子元素只能出现一次
表示子元素出现的次数:

+:表示一次或者多次
?:表示零次或者一次
*:表示零次或者多次
  • 子元素直接用逗号进行隔开,表示元素出现的次序
    -子元素直接用|隔开表示元素只能出现其中的任意一个
<!ELEMENT person (name+|age?|sex*|school)>

四:使用dtd定义属性

  • 语法:<!ELEMENT 元素名称 属性名称 属性类型 属性的约束 >

  • 属性类型:

  • CDATA:字符串

<!ATTLIST birthday 
     ID1 CDATA #REQUIRED
  >
  • 枚举:表示只能在 一定范围内出现值,但是只能每次出现其中的一个
<!ATTLIST age 
      ID2 (AA|BB|CC) #REQUIRED
      >
  • ID:值只能是字母或者下划线开头
<!ATTLIST name
    ID3 ID #REQUIRED
    >
  • 属性的约束:
  • #REQUIRED:属性必须存在
  • #IMPLIED:属性可有可无
  • #FIXED :表示一个固定值,属性的值必须是这个固定值
<!ATTLIST school 
     ID4 CDATA #FIXED "你好"
     >
  • 直接值:不写属性使用直接值,写了属性,使用设置值
 <!ATTLIST sex 
     ID5 CDATA "女"
     >

实体的定义:

<!ENTITY 实体名称 “实体的值”>
<!ENTITY TEST "你好啊陌生人">
	<name ID3="u">&TEST;</name>

定义实体需要写在内部dtd里面,如果写在外部dtd,某些页面会得不到

原创文章 114 获赞 84 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44867340/article/details/105668024