java xml 一之DTD总结

2024-05-27 10:32
文章标签 java xml 总结 dtd 一之

本文主要是介绍java xml 一之DTD总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

<!-- 这里的xml是处理的指令名称。standalone="yes"表示这个xml文档是一个单独的文档,不涉及到其他的,没有对它验证的这样一个文档存在,也就是说我的这个xml文档现在不需要dtd进行验证,只要语法正确就没问题。(对于有dtd验证存在的文档,不仅语法上要正确,而且语义结构上也要符合dtd的要求,否则这个xml就有问题。) -->
<!-- 这里面的version和standalone="yes"的值可以用双引号括起来,也可以用单引号括起来,都可以,但是单引号和双引号不能混合使用,要用哪种就都用哪种 -->
<?xml version="1.0" standalone="yes"?>
<students>
<student>
<id>100</id>
<name>lisi</name>
<address>beijing</address>
</student>

<student>
<id>200</id>
<name>zhangsan</name>
<address>shanghai</address>
</student>
</students>


为什么要学习XML:
---数据交换的需要
---电子商务的基础
---可扩展的开放的标记语言

XML重点知识体系:
1、XML语法规则
2、XML核心技术:
a)文档描述、验证、约束技术---DTD/Schema
b)DOM/SAX


XML是一种元标记语言。用户可以定义自己需要的标记。这些标记必须根据某些通用的原理来创建,但是在标记的意义上,也具有相当的灵活性。例如,假如用户正在处理与家谱有关的事情,需要描述人的出生、死亡、埋葬地、家庭、结婚、离婚等,这就必须创建用于每项的标记。新创建的标记可在[color=red]文档类型定义[/color](Document Type Definition,在以后的篇幅中常简称为DTD)中加以描述。在后面将会学到有关DTD的更多的知识。现在,只需把DTD看作是一本词汇表和某类文档的句法。


有了XML就意味着不必等待浏览器的开发商来满足用户的需要了。用户可以创建自己需要的标记,当需要时,告诉浏览器如何显示这些标记就可以了(现在所有浏览器都支持XML)。


XML描述的是结构和语义,而不是格式化:
关于XML要了解的第二件事是,XML标记描述的是文档的[color=red]结构和意义[/color]。
[color=red]它不描述页面元素的格式化[/color]。可用样式单位文档增加格式化信息。文档本身只说明文档包括什么标记,而不是说明文档看起来是什么样的。

[color=red]XML描述的是结构和语义,而不是结构化[/color]:
作为对照,HTML文档包括了格式化、结构和语义的标记。<B>就是一种格式化标记,它使其中的内容变为粗体。<STRONG>是一种语义标记,意味着其中的内容特别重要。<TD>是结构标记,指明内容是表中的一个单元。事实上,某些标记可能具有所有这三种意义。<H1>标记可同时表示20磅的Helvetica字体的粗体、第一级标题和页面标题。


什么是标记语言(XML就是一种标记语言):
当我们需要通过标记将有用的信息告知一组用户时:
(1)、我们必须有一个标准,用它来描述什么事有效的标记。
HTML中,标记就是所谓的“标签”(tag)
(2)、我们还有有一个标准描述每个标记的具体含义。


现在XML的版本只有1.0,没有其他的。


下面是一些XML的优越性:
1、XML是使信息[color=red]自描述[/color]的新语言。
2、信息共享:自定义数据格式,而且很容易使用工具读写。
3、数据传递:支持各种通道的数据传输。
4、数据重用
5、分离数据和显示
6、可扩展
7、[color=red]文档包含语义[/color]
8、其他:容易阅读/工具/树形结构面向对象编程。


XML和HTML一个对比:
[img]http://dl2.iteye.com/upload/attachment/0091/7768/5970eda8-4aaf-31e7-bad2-19e08e7876f1.jpg[/img]

XML与HTML在各方面的性能对比:
[img]http://dl2.iteye.com/upload/attachment/0091/7770/25e3310a-55c9-36ab-825c-8ac3a6f912a5.jpg[/img]


---什么是XML解析器:
读取XML文档并提供对文档内容的访问的软件模块。
类型:[color=red]无验证的解释器和验证的解释器[/color]。
----解析器:
MSXML IE
IBM XML4J
Apache Xerces
Oracel XML Parser


以下是XML的[color=red]声明[/color]相关的讲解(重点):
A、第一行是XML声明
--- <?xml version=”1.0” standalone=”yes”?>
--- 这是XML处理指令的例子。处理指令以<?开始,而以?>结束。在<?后的第一个单词是处理指令名,在本例中是xml
B、XML声明有version和standalone两个特性。特性是由等号分开的名称-数值对。位于等号左边的是特性名,而其值位于等号的右边,并用[color=red]双引号或单引号[/color]括起来。每一个XML文档都以一个XML声明开始,用以指明所用的XML的版本。在上例中,version特性表明这个文档符合XML 1.0规范。XML声明还可以有standalone特性,这告诉我们文档是否在这一个文件里还是需要从外部导入文件。在本例中,所有的文档都在一个文件里完成,因而standalone特性的值要设置为yes。


考察简单的XML文档:
<GREETING>Hello World!</GREETING>
总体上说,这三行组成了GREETING元素。分开说,< GREETING >是开始标记,而</ GREETING >是结束标记,Hello World是Hello World元素的内容。

大家可能要问,<GREETING>标记的意义是什么?回答是“你要让它是什么就是什么”。除了预定义的标记之外,XML还允许用户创建所需的标记。因而<GREETING>标记可以具有用户赋于的任何意义。同一个XML文档可以用不同的标记名编写。

现在主要有两种语言可以用来编写样式:CSS和XSL


在编写好XML文档和用于该文档的CSS样式单之后,还需要告诉浏览器将样式单作用到该文档上。方法是在XML文档中包括另一个[color=red]处理指令[/color],以便指定所要使用的样式单:
<?xml-stylesheet type=”text/css” href=”hello.css”?>


下面是一个XML文档实例分析:
[img]http://dl2.iteye.com/upload/attachment/0091/7766/0e1dfddb-3368-32a2-96ce-14411b34149a.jpg[/img]

XML声明:
<?xml version=”1.0” encoding=”UTF-8” standalone=”yes”?>
XML声明一般是XML文档的第一行
XML声明由以下几个部分组成:
version --- 文档符合XML1.0规范,现在只有1.0
encoding – 文档字符编码,默认为“UTF-8”
standalone – 文档定义是佛在一个文件内
standalone=”yes”
standalone=”no”


XML文档---根元素:
1、每个XML文档必须有且只有一个根元素。
2、根元素是一个完全包括文档中其他所有元素的元素。
3、根元素的其实标记要放在所有其他元素的其实标记之前。
4、根元素的结束标记要房子所有其他元素的结束标记之后。

元素之间的关系:子元素/父元素、祖先/后代
元素内容的类型:嵌套元素/字符元素/实体引用/CDATA节/处理指令/注释


XML文档---属性:
<Student ID=”100”><Name>TOM</Name></Student>
1、[color=red]属性值用双引号(”)或单引号(’)分隔(如果属性值中有’,用”分割;有”,用’分隔)[/color]
2、一个元素可以有多个属性,它的基本格式为:<元素名 属性名=”属性值”>
3、特定的属性名称在同一个元素标记中只能出现一次
4、属性值不能包括<,>,&


实体:
[img]http://dl2.iteye.com/upload/attachment/0091/7776/3ee16afc-6218-3742-829a-c698389ee351.jpg[/img]


XML专用标记---注释:
<!—这是一个注释-->
1、注释内容中不要出现--;
2、不要把注释放在标记中间;例如不能这样:<Name<!—注释-->>TOM</Name>
3、注释不能嵌套
4、可以在除标记以外的任何地方放注释。


XML处理指令:
[img]http://dl2.iteye.com/upload/attachment/0091/7772/4b87be0c-21c6-3e0b-bade-79e1cb3c05bc.jpg[/img]

XML专用标记(3)---CDATA节:
1、用于把整段文本解释为纯字符数据而不是标记的情况。包含大量<、>、?或者”字符。CDATA节中的所有字符都会被当做元素字符数据的常量部分,而不是XML标记。
2、语法:<![CDATA[。。。。。。]]>
3、可以输入任意字符(除]]>外)
4、不能嵌套


文档类型定义---DOCTYPE
1、文档类型声明,紧跟XML声明之后,[color=red]包含所有实体声明[/color]。
2、语法:<?xml version=”1.0”?>
<!DOCTYPE 根元素标记名[
<!—实体声明-->
]>


格式正规的XML文档:
遵循如下规则的XML文档称为格式正规的XML文档:
语法规范:
1、必须有XML声明语句<?xml version=”1.0” encoding=”gb2312” ?>
2、必须有且仅有一个根元素
3、标记大小写敏感
4、属性值用引号
5、标记成对
6、空标记关闭
7、元素正确嵌套
元素语法:
1、名称中可以包含字母、数字或者其他字符
2、名称不能以数字开头
3、不能以XML/xml/Xml/…开头
4、名称中不能含空格
5、名称中不能含冒号(注:冒号留个命名空间使用)

格式正规的XML文档语法总结:
1、XML文档结构:文档、XML声明、根元素
2、XML文档专用标记:注释、处理指令PI、CDATA节
3、元素和属性:元素、属性的表示
4、字符和实体引用


[color=cyan]xml_1.pdf和xml_2.pdf在笔记里面找不到,上面自己手动做了笔记,后面的xml_3.pdf、xml_4.pdf等等上传作为附件。下面的xml_2.pdf没讲完的内容也要自己手动做笔记。[/color]

讲解这里的时候总结出了关于编码格式的常用形式:
在进行web开发的时候编码方式最好使用utf-8,而不要使用gbk或是gb2312等,因为比如在开发一个支持多语言的项目,如果使用gbk的话,中文没问题,比如日文肯定显示不出来。只有utf-8是国标语言,所有语言都能显示。所以在xml开发的时候也都最好使用utf-8编码,这种编码方式也是xml的默认编码方式。


XML里面的元素严格区分大小写,大写的和小写的是代表不同的含义。


自己下载一个vi编辑器,学着使用里面的各种功能,这个和linux系统里面的vi编辑器用法是一样的。这个会了那个也就会了。


下面两个是为XML增加样式处理指令的示例(第一个是css代码,第二个是xml代码):
GREETING {
display: block;
font-size: 24pt;
font-weight: bold
}

<?xml version="1.0"?>
<!-- 增加一个处理指令,处理指令都是在上面写的,先是处理执行,后面是元素。这个处理指令是让浏览器知道与这个xml文件关联的那个css文件是在当前目录下,这样的话浏览器在加载这个文档的时候就会到hello.css里面去找,用这个css文件规定的样式来显示这个文件里面的内容 -->
<!-- 这样当浏览器访问这个xml文件的时候就不会把结构化的xml全部显示在网页上,而是只显示一个经过样式化的Hello World -->
<!-- 这里主要是为了说明xml文档的内容和展现形式的分离。 -->
<?xml-sylesheet type="text/css" href="hello.css"?>

<GEEETING>Hello World</GEEETING>


自己下载xmlspy并安装学习使用。

Xml文件注释方式<!-- -->

Xml里面的实体:就像是比如说java里面定义了一个变量int a = 3;那么后面所有使用a的地方的值都是3,就是这么个意思。参见Xml_1.pdf里面实体的讲解,列举了在xml里面<、>、&、”、’等的表示方式。也可以自定义实体。


下面是一个自定义实体的示例:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 自定义实体 -->
<!-- 实体要定义在DOCTYPE里面,后面跟的第一个元素company表示文档的根元素 -->
<!DOCTYPE company[
<!ENTITY shengsiyuan "圣思园">
<!ENTITY address "北京上地">

]>

<!-- xml里面自定义实体以及使用示例 -->
<company>
<name>&shengsiyuan;</name>
<address>&address;</address>
</company>


下面是CDATA节的使用示例:
<?xml version="1.0" encoding="UTF-8"?>

<!-- xml里面CDATA节使用示例,CDATA块里面无论写什么都不会被xml所处理,都会整体当做文本来对待 -->
<root>

<![CDATA[
<HELLO>
<WORLD>

]]>

<subRoot>

</subRoot>

</root>



Xml也可以当做小型的数据库来使用。


由于笔记里面找不到xml_1.pdf和xml_2.pdf两个文件了,所有没法上传附件,自己手工做笔记。
下面进入到DTD的讲解:
首先DTD里面会规定比如你的xml文件里面的根元素必须叫什么,根元素里面必须要有什么或必须要有哪几个元素,这个元素是可以出现一次还是可以出现多次,这个元素里面必须要有什么属性,哪个属性必须出现等等。这样的话我们就有了一套规则,我们定义的xml文档就必须要符合这种规则,我们把符合这种规则的xml文档叫做有效的xml文档,有效是建立在格式正规(符合xml语法要求,语法上没有错误)的基础之上的。


什么是DTD、为什么要用DTD:
1、文档类型定义—Document Type Definition
2、DTD用来描述XML文档的结构,一个DTD文档包含:
---元素(ELEMENT)的定义规则
---元素之间的关系规则
---属性(ATTLIST)的定义规则
---可使用的实体(ENTITY)或符号(NOTATION)规则


DTD文档与XML文档实例的关系:
--- [color=red]类与对象[/color]
--- 数据库表结构与数据记录

1、有了DTD,每个XML文件可以携带一个自身格式的描述。
2、有了DTD,不同组织的人可以使用一个通用DTD用来交换数据。
3、应用程序可以使用一个标准DTD校验从外部世界接收来的XML数据是否有效。
4、可以使用DTD校验自己的XML数据。


如何生成一个DTD文档:
DTD文档的声明及引用:
1、内部DTD文档(DTD内容和xml内容放在一个文件里面):<!DOCTYPE 根元素[定义内容]>
2、外部DTD文档(DTD文档和xml文件是分开的):<!DOCTYPE 根元素 SYSTEM “DTD文件路径”>
3、内外部DTD文档结合(用的很少):<!DOCTYPE 根元素 SYSTEM “DTD文件路径”[定义内容]>


下面是一个内部DTD示例:
[img]http://dl2.iteye.com/upload/attachment/0091/7774/b3af633b-bece-3953-b2c7-3f39cefaac7f.jpg[/img]


这里就用到了Altova XMLSpy那个xml相关的软件,需要安装在机器上。业界最强大的xml开发工具,可以处理xml的一切。Altova XMLSpy安装软件可以到百度网盘下载。
下面是它的一些基本设置以及用法:
比如改字体:Tools---Options---Text fonts---在这里面改字体
新建一个xml文件:File---New---XML Document---ok---然后会出一个弹窗New file(如果你当前编写的xml文件需要用到DTD或Schema的话,在这里可以选择,如果用不上就直接点击Cancel)---然后就进入到了新建的xml文件的编辑开发界面了

注意:在此工具里面xml的编辑开发界面上下面有几个页签,Text是写代码开发的界面,Grid是把你在Text里面写的代码以网格的形式呈现出来,它会自动寻找代码里面各标签元素的嵌套关系,把元素一一的呈现出来,方便你的查看,特别的XML代码量比较多的时候这个功能很管用。还有一个是Browser是浏览器的方式,直接的在这个环境里面就可以以浏览器的方式浏览当前的的文档结构(以前我们都是通过浏览器访问XML文件来查看文档结构),在这里多方便,直接在这里面就能浏览。

如果你的xml代码书写有错误的话,点击Browser的时候就会报错,给出相应提示,在开发界面的上方也有两个对勾式的按钮,一个是黄色的对勾Ceck well-formedness,是检查是否是格式良好的,另一个是绿色的对勾Validate file,是检查是否是有效的。
并且在开发界面的右方提供了一些常用的实体,双击直接就放到了你光标的位置处。

定义没有DTD的XML或内部DTD的XML,是File---new---xml XML Document
定义外部DTD的XML,是File---new---dtd Document Type Definition
新建Schema文件:File---new---xsd W3C XML Schema
XMLSpy里面建立Schema验证的xml文件,首先建立好Schema文件(xsd结尾的文件),然后:File---new---xml XML Document---选择刚才建立好的Schema文件然后点击ok即可。


内部DTD使用实例代码:
<?xml version="1.0" encoding="UTF-8"?>
<!--
内部DTD使用示例
定义DTD内容。定义了名字叫poem的元素,它里面有三个子元素,而且这三个子元素的顺序必须要按这个顺序来。
author类型为PCDATA(也就是常说的字符串),title类型为PCDATA,content类型为PCDATA。
接下来的ATTLIST是属性的定义,属性描述为REQUIRED,就表示在title这个元素里面必须要有name属性的定义,
name属性的类型为CDATA。
-->
<!DOCTYPE poem [
<!ELEMENT poem (author, title, content)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT content (#PCDATA)>
<!ATTLIST title name CDATA #REQUIRED>
]>
<poem>
<author>王维</author>
<title name="zhangsan">鹿柴</title>
<content>空山不见人,但闻人语声</content>
</poem>


下面这两个结合起来是外部DTD的使用方式:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 外部DTD使用示例 -->
<!ELEMENT poem (author, title, content)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT content (#PCDATA)>

<?xml version="1.0" encoding="UTF-8"?>
<!-- 外部DTD使用示例。引用外部的dtd_1.dtd -->
<!DOCTYPE poem SYSTEM "dtd_1.dtd">
<poem>
<author>王维</author>
<title>鹿柴</title>
<content>空山不见人,但闻人语声</content>
</poem>



下面是一个外部DTD示例:
[img]http://dl2.iteye.com/upload/attachment/0091/7760/2502677d-30b7-38c0-8684-c05abde1846b.jpg[/img]


下面是一个内部外部混合DTD使用示例(了解下即可,不重要,不常用):
[img]http://dl2.iteye.com/upload/attachment/0091/7754/edb11410-029a-33a7-a3d5-483c67d542e8.jpg[/img]

下面是DTD里面元素可选的类型:
[img]http://dl2.iteye.com/upload/attachment/0091/7762/2658d080-3183-3111-ac7e-f240e9e7cd1a.jpg[/img]
注:将根元素设为ANY类型后,元素出现的次数和顺序不受限制。


DTD验证元素组合类型示例:
<!ELEMENT 家庭(人+,家电*)>

<家庭>
<人 名字=”郭大路” 性别=”男” 年龄=”25”/>
<人 名字=”李寻欢” 性别=”男” 年龄=”38” 爱好=”做个教育家和伟人”/>
<家电 名称=”彩电” 数量=”3”/>
</家庭>


XML元素修饰符号如下:
[img]http://dl2.iteye.com/upload/attachment/0091/7752/44445adc-4da3-3a14-8ad0-88f266e0fd5b.jpg[/img]


下面是DTD里面规定属性定义的方式(属性一定是归属于某个元素的):
[img]http://dl2.iteye.com/upload/attachment/0091/7749/f3fcb522-8562-364e-85b1-4dfb0f6bcadf.jpg[/img]


这里需要注意一下CDATA节和CDATA的区别:CDATA用于定义属性,而CDATA节表示里面东西全都被当做字符串处理,xml不会解析它。
以及#PCDATA与CDATA的区别:CDATA用于定义属性,#PCDATA用于定义元素。
属性类型:
1、CDATA:表示属性值可以是任何字符
2、NMTONKEN/NMTONKENS:它是CDATA的一个子集,表示属性值必须是英文字母、数字、句号、破折号、下划线或冒号,属性值不能含有空格。
3、ID:表示该属性的取值必须是唯一的。
4、IDREF/IDREFS:IDREF属性的值指向文档中其他地方声明的ID类型的值。IDREFS同IDREF,但是可以具有由空格分开的多个引用。
例如:<!ELEMENT 家庭(人+)>
<!ELEMENT 人 EMPTY>
<!ATTLIST 人
relID ID #REQUIRED
parented [color=red]IDREFS[/color] #IMPLIED
name CDATA #REQUIRED
>
<家庭>
<人 relID=”P_1” name=”爸爸”>
<人 relID=”P_2” name=”妈妈”>
<人 relID=”P_3” parented=”P_1 P_2” name=”儿子”>
</家庭>
5、 Enumerated:事先定义好一些值,属性的值必须在所列出的值的范围内。
例如:<!ATTLIST person 性别(男|女) #REQUIRED>


下面是属性特点:
1、REQUIRED:元素的所有实例都必须有该属性的值(NOT NULL).
2、IMPLIED:元素的实例中可以忽略该属性(NULL)
3、FIXED value:元素实例中该属性的值必须为指定的固定值。
例如:<!ATTLIST sender company CDATA #FIXED(“Microsoft”)>
Xml示例:<sender company=” Microsoft”>
4、 Default value:为属性提供一个默认值。
语法:<!ATTLIST 元素名 属性名 类型 “value”>
DTD示例:<!ATTLIST hello payment type CDATA “check”>
Xml示例:<hello payment type=”check”>


下面是XML以及DTD总涉及到的实体分类(参数实体用的非常少,只做了解):
[img]http://dl2.iteye.com/upload/attachment/0091/7758/337600bc-187b-3dd2-813e-e705a63ac4d2.jpg[/img]

内部实体的意思就是可以用实体名代替”文本内容”,但是如果”文本内容”很大很复杂的时候,我们可以用一个外部文件来保存这部分的内容,然后把这个外部文件的链接放到”文本内容”那里,然后前面加上一个SYSTEM。这就是外部实体的用法。


参数实体在教学课件里面有,这里就不做详细笔记了。

下面是老师课堂做的一些笔记:
1. eXtensible Markup Language (可扩展的标记语言)。
2. Document Type Definition (DTD,文档类型定义)【比如给你一个xml文件,想要看它是不是一个有效的文件,可以通过DTD来验证。就相当于比如你写一个java程序,但是你这个程序是否符合java的语法,DTD就像这种语法规则一样。】。
3. XML中的每个元素都是成对出现的(有开始,有结束),<student> </student>,
XML中的元素嵌套关系要保持正确性,即先开始的标记要先结束,后开始的
标记要后结束。
4. 每一个XML文档都有且只有一个根元素(Root Element)。所谓根元素,就是
唯一一个包含了其他所有元素的元素。
5. [color=red]XML描述的是文档的内容与语义[/color],而不是文档应当如何显示【比如说它描述的是students包含了student,而不描述student里面的namge或address是以加粗体、红色或是粗体显示。】。
6. 使用XML可以实现异构语言、异构平台之间的交互【例如用.net写的一个程序将一个写好的xml文件传递给用java写的程序,然后java解析这个xml,知道.net写的程序想要调用我的java代码里面的Add类里面的add方法,并且传递了参数1和2,然后java代码里面的add方法被调用,并将结果3返回给.net的调用端。webservice大体也是这么一个概念。】。
7. 对于XML文档来说,<?处理指令必须要顶格写,前面不能有任何的空白【不能有例如空格或tab格等,否则浏览器解析会报错。注意在?的前面以及?与xml之间也不能有空格,在xml与version之间只能有一个空格,不能有多个等等,这些都是xml语法规定的,不能写错。除了处理指令外,下面的元素对于空格空白什么的没有那么严的要求,可以随便写。】。
8. XML元素可以具有属性,属性的形式为:
属性名=”属性值”,比如gender=”male”
属性值需要使用单引号或双引号括起来。多个属性之间使用空格分开。
9. 通过样式,我们可以实现XML内容与展现形式的分离【这个样式也是通过一个处理指令来指定的,这个指令叫做xml-stylesheet】。
10. XML的注释:<!-- comments --> ,注释不允许嵌套
11. 在一个元素上,相同的属性只能出现一次。
12. 如何定义和使用实体
<?xml version="1.0"?>
<!DOCTYPE company[
<!ENTITY shengsiyuan "圣思园">
<!ENTITY address "北京上地">
]>
<company>
<name>&shengsiyuan;</name>
<address>&address;</address>
</company>
13. 格式正规(well formed)的XML文档。[color=red]符合XML语法要求的XML文档就是
格式正规的XML文档[/color]。
14. 有效的(valid)XML文档。[color=red]首先XML文档是个格式正规的XML文档,然后
又需要满足DTD的要求,这样的XML文档称为有效的XML文档[/color]
15. #PCDATA (Parsed Character Data),可解析的字符数据【也就是字符串】。
16. 关于普通实体与参数实体
1) 普通实体是在dtd中定义,xml中使用,使用的时候格式为:&address;
2) 参数实体是在dtd中定义,dtd中使用,定义的时候使用%,使用的时候也
需要使用%, %address;
3) 外部普通实体的定义方式是:
<!ENTITY address SYSTEM “http://www.shengsiyuan.com/xml.xml”>
表示使用http://www.shengsiyuan.com/xml.xml 网址的内容来替换掉
address,而不是使用http://www.shengsiyuan.com/xml.xml字符串本身来
替换掉address
4)外部参数实体:
<!ENTITY % address SYSTEM “http://www.shengsiyuan.com/xml.xml”>,使用
的时候:%address;

下面是命名空间的笔记:
1、为什么要使用命名空间:[color=red]为了避免元素名冲突[/color]。
2、什么是命名空间。
3、使用URL作为XML的Namespaces
4、命名空间的语法定义:
Xmlns:[prefix] = “URL”【URL可以随便写,或者胡乱写都行,它存在不存在都没关系,只是用来和其他的命名空间区分,只要和其他的不相同就行】
5、 元素和属性都可以应用命名空间。

命名冲突:XML的元素名是不固定的,当两个不同文档使用同样的名称描述两个不同类型的元素的时候,就会发生冲突。命名空间就是用来解决这种冲突的。

例如下面两个就冲突了(只有使用命名空间才能把下面两个区分开):


<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>

<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>

只有使用命名空间才能把他们两个区分开:
<h:table>
< h:tr>
< h:td>Apples</ h:td>
< h:td>Bananas</ h:td>
</ h:tr>
</ h:table>

<f:table>
< f:name>African Coffee Table</ f:name>
< f:width>80</ f:width>
< f:length>120</ f:length>
</ f:table>


[color=red]使用URL作为XML的Namespaces[/color]:

<h:table xmlns:h=”http://www.w3.org/TR/html4”>
< h:tr>
< h:td>Apples</ h:td>
< h:td>Bananas</ h:td>
</ h:tr>
</ h:table>

<f:table xmlns:h=”http://www.w3schools.com/furniture”>
< f:name>African Coffee Table</ f:name>
< f:width>80</ f:width>
< f:length>120</ f:length>
</ f:table>


下面是对XML中DTD之前的内容作一个小总结:
1、一个有效的XML文档必然是结构正规的,结构正规的XML文档不一定是有效的。
2、DTD包含一套用来描述并限制XML文档结构的语法规则。
a)元素的定义规则
b)元素之间的关系规则
c)属性的定义规则
d)可使用的实体或符号规则
3、命名空间用于避免命名冲突
4、在XML中,使用全球唯一的URL作为Namespaces。

这篇关于java xml 一之DTD总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007224

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;