JavaWeb中XML学习总结笔记(2)

上接:JavaWeb学习总结笔记(1)
接着之前的开始写

dtd的三种引入方式:

  • 引入外部的dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd路径">
  • 使用内部dtd文件
<!DOCTYPE 根元素名称 [
	<!ELEMENT 根标签名称 (子标签,子标签)>
	<!ELEMENT 子标签 (#PCDATA)>	
]>
  • 使用外部的dtd文件(网络上的dtd文件)
<!DOCTYPE 根元素 PUBLIC "dtd名称" “dtd文档的URL">

dtd文件代码dtd文件代码
xml文件代码
xml文件代码
运行正常在这里插入图片描述
可以看到dtd文件里面只有person、name、age三个标签,当我添加了一个标签<aa></aa>,根标签那里会提示错误

The content of element type “person” must match “(name,age)”.(元素类型“人”的内容必须与“(姓名、年龄)”相匹配。)

表示xml里面只能使用规定好了的标签。
在这里插入图片描述

使用dtd定义约束元素

语法:<!ELEMENT 元素名 约束>
简单元素:没有子元素的元素

  • <!ELEMENT name (#PCDATA)>

  • (#PCDATA):约束name是字符串类型(这个一定要加括号,但是下面的几个不用)

  • EMPTY:元素为空(没有任何内容)
    <aa>中间没有任何内容 </aa>

  • ANY:表示元素中可以包含任何在dtd中定义的元素内容
    复杂元素:有子元素的元素

  • <!ELEMENT person (name,age)>(子元素名字只能出现一次,出现第二次报错)

格式:<!ELEMENT 元素名称 (子元素+/*/?)>
+/*/?表示子元素出现的次数:

  1. +:表示出现一次或多次
  2. *:表示出现零次或多次(任意次数)
  3. ?:表示出现零次或一次

子元素直接使用”,“号隔开(表示元素出现的顺序)
子元素直接使用”|"隔开(表示括号里的几个子元素只能出现一个)

使用dtd定义约束属性

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

属性类型:

  • CDATA:字符串
    <!ATTLISH name id1 CDATA #REQUIRED>

  • (a|b|c)枚举:表示只能在一定范围内出现的值,但是每次只能出现其中一个(和红绿灯很相似,红黄绿三种颜色,每次只能出现其中一种)
    格式:<!ATTLISH name id2 (a|b|c) #REQUIRED>
    a,b,c三个属性选择一种

  • ID :只能是字母或下划线开头
    <!ATTLISH name id3 ID #REQUIRED>

属性的约束

  1. #REQUIRED:表示属性必须出现
  2. #IMPLIED:表示属性可以出现也可以不出现
  3. #FIXED:表示一个固定值 #FIXED “aaa”(属性的值必须是你设置的那个值,否则报错)
  4. #直接值:如果不写属性,就默认使用直接值

如果使用,就是你定义的那个值
使用方法:<!ATTLISH name id4 CDATA “SSS”>

实体的定义
语法:<!ENTITY 实体名称 “实体的值”>
使用实体:&实体名称

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
 <!ELEMENT person (name,age)>
 <!ELEMENT name (#PCDATA)>
 <!ELEMENT age (#PCDATA)>
 
 // 定义实体,注意:定义实体需要写在内部dtd里面,如果写在外面在某些浏览器下面内容得不到
 <!ENTITY SS "啦啦啦啦啦">
]>
<person>
 
 <name>张飞</name>
 // 引用实体
 <age>&SS;</age>
 
</person>

做一个小实战,根据dtd代码写出xml代码(符合规则不报错)

dtd实例代码复制自w3c,感兴趣的朋友们可以去搜索练习一下,直接搜索DTD教程,里面有DTD实例(下面这个比较简单,采用的是第二个,第一个相对来说比较复杂,视频上讲解的就是第一个,看完后发现基本上都记住怎么回事了,然后就去练习了第二个)。

标签里的内容纯属瞎填的,不要较真哦。

<?xml version="1.0" encoding="UTF-8"?>
//dtd代码
<!DOCTYPE NEWSPAPER [
<!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEAD (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)>

<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>
<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>

<!ENTITY NEWSPAPER "Vervet Logic Times">
<!ENTITY PUBLISHER "Vervet Logic Press">
<!ENTITY COPYRIGHT "Copyright 1998 Vervet Logic Press">
]>

// xml代码
<NEWSPAPER>
	<ARTICLE AUTHOR="在家一点都不无聊" DATE="2020-2-28">
		<HEADLINE>NEWSPAPER</HEADLINE>
		<BYLINE>PUBLISHER</BYLINE>
		<LEAD>COPYRIGHT</LEAD>
		<BODY>LLA</BODY>
		<NOTES>LALA</NOTES>
	</ARTICLE>
</NEWSPAPER>

未完。。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值