XML笔记
2019-03-09
标记语言:Markup Language,标记语言主要用于制作电子文档和存储数据。
HTML(超文本标记语言)属于一种专门用途的标记语言,作用是将文档数据显示在【浏览器】这个【应用软件】之中。
SGML属于一般通用的标记语言,语法严谨复杂,增加了学习的难度。
SGML(Standard Generalized Markup Language)最初源自IBM的项目,是一种基于文档标记语言的元语言(类似于拉丁文的地位),扩展性,移植性强。
SGML文档由语法定义、文档类型定义和文档实例组成,其中文档类型定义(DTD)是其核心所在。
HTML和XML都是SGML的子集。
XML(Extensible Markup Language),可扩展标记语言,正如其名,扩展性是其最大的优点。
作用是标记任何一种能想见的食物,数学公式、化学分子结构等等将其结构化表示。
在XML的基础上,出现了MathML,数学标记语言;CML化学标记语言;BSML生物序列标记语言;其他。
XML开发工具 Altova XMLSpy。
XML语法
语法组成:序言(可选)、主体(文档树)、尾部(可选)。
序言包括声明和注释。
XML声明中包含三个属性:version(标准版本)、encoding(字符编码)和standalone。
Standalone属性定义是否为独立文件,是否不需读取任何其他文件。属性值为yes或no,默认为no。
实例:
<? xml version=”1.0” encoding=”GB2312” standalone=”yes”?>
注意;XML语言大小写敏感。
注释
<!-- 这样来注释 -->
标记分为空标记和非空标记,类似于HTML,特色是XML标记自定义,HTML的标记为给定。
一个XML元素由一个起始标记、一个结束标记以及标记之间的数据内容所组成。
标记名称也就是元素的名称。
XML元素以树形结构(层次结构)的嵌套形式存在,顶层元素称为根元素。
元素的属性是在元素的起始标记中定义的一些内容,可有可无,各属性由空格隔开,属性以属性名称和属性值的形式成对出现,中间用等号”=“连接。
理解:一般将不需要显示的资料或者元素的不同特性数据放在属性中,而将大量数据放在数据内容中。
使用层叠样式表CSS显示XML时,浏览器不会显示元素的属性或属性值。
如果为XML文档建立了DTD,并将元素的属性定义于DTD声明内,就能够限制可以被指定为属性值的数据类型和具体值。
特殊字符有其代替符号可以使用。
CDATA区段内的文本不会被解析,会被忽略。CDATA区段的使用格式:
<![CDATA[
字符数据内容
]]>
CDATA区段可以放在字符数据内容中,但不可以出现在XML起始标记和终止标记内。
XML命名空间
XML命名空间(name space)用于解决元素标记命名重复问题。重名标记的区别在属性和属性值上,所以要对属性做标识。
命名空间通过给标记名称加一个网址(URL)定位的方法来区别名称相同的标记。
语法格式如下:
<标记名 xmlns: 标识符=”URL”>
URL即统一资源标识符,仅其标识作用,其甚至可以不存在。
默认命名空间的定义不使用标识符,语法格式如下:
<标记名 xmlns=”URL”>
正确的XML文档分为格式良好的和有效的。
有效的XML文档=格式良好恶XML文档+DTD验证。
DTD(Document Type Definition)
DTD制定了种种规则,使XML数据的编写建立在已经自定义的规则下进行。
DTD是对XML可扩展性的约束。
XML的可扩展性和DTD是一对辩证因素。
XML可扩展性给数据展示以自由,DTD给数据展示以自律。
HTML定义好的固定的标记和语法属于强权下的自由。
XML属于自律自治下的自由。
DTD有各种声明语句:DTD声明开始语句、元素类型声明、属性列表声明、实体声明。
DTD可以分为内部DTD和外部引用DTD.
DTD定义了XML文档中所有元素,包括元素的名称、出现顺序、出现次数、子元素、包含关系和内容。
<!ELEMENT 元素名 元素内容>
元素内容可分为EMPTY 、子元素型、混合型(一般不用)、ANY(常用)和#PCDATA 五种类型。
元素限定符的作用很强大,可以规定元素出现的顺序和次数。
用#PCDATA表示元素的内容是可解析文本,即非标记文本,不含子元素,注意定义啊,元素一定由起始标记、数据内容和终止标记组成。所以不含子元素。
DTD的属性声明,用于声明元素属性的数据类型如CDATA字符数据,并且还有属性的附加声明。
属性附加声明有”默认值“。
属性默认值类型有四种:#REQUIRED #IMPLIED #FIXED AttValue Default_Value
属性类型是对属性取值内容的规定,常见的有十种:CDATA\ ENTITY ID NOTATION.
DTD实体比较难于理解,先做个记号。
实体是一种替代物,用于内容转义。在XML中可以直接用实体名来代替实体值使用。
实体可以定义在文档的序言部分,也可以定义在DTD内。
在DTD文件中定义的实体,可以在于该DTD文件关联的XML文档中被引用,当解析实体引用时,将使用实体内容来替换实体引用。
按照实体的内容可分为可解析实体和不可解析实体。
可解析实体的具体内容为简单的字符数字文本块,不可解析实体的具体内容为图片声音等二进制文件。
按逻辑存储位置,实体可分为内部实体和外部实体,外部实体即是独立的外部物理存储对象,如某个外部文件。理解:内外部之分使用方式和CSS相同(内部引用和外部引用而已)。
如何区分一般实体和参数实体呢?
一般实体都是用来构成文档的具体内容,而参数实体的内容则复杂的多,不仅可以包含文本,还可以包含元素类型声明,属性列表声明,普通实体声明,标签声明,处理指令或注释等。
也由此原因造成普通实体既可以在XML元素中引用,也可以在DTD中引用,而参数实体只能在DTD中引用。
内部实体的使用分为两部分:实体声明 “实体”和实体引用。
外部实体的使用分为三部分:实体、实体声明SYSTEM“URI”和实体引用。
五种类型语法格式对照:
内部普通实体:
实体声明<!ENTITY Entity_Name Entity_Value> 实体引用&Entity_Name;
外部普通实体:
实体声明<!ENTITY Entity_Name SYSTEM Entity_URL> 实体引用&Entity_Name;
内部参数实体:
实体声明<!ENTITY % Entity_Name Entity_Value> 实体引用%Entity_Name;
外部参数实体
实体声明<!ENTITY % Entity_Name SYSTEM Entity_URL> 实体引用%Entity_Name;
不可解析实体:
实体声明分两种情况:当内容为XML文档时 <!ENTITY Name SYSTEM “URI”> 当为 图像或声音等非XML文档时<!ENTITY Name SYSTEM “URI”NDATA type>
在XML中唯一可以出现不可解析实体的地方就是属性值。在XML文档的任何地方都不能对不可解析实体进行实体引用,即实体引用方式和常规不同。
对不可解析实体的引用需要特别定义一个空元素。