XML
xml值可扩展标记语言(eXtensible Markup Language)
xml被设计用来传输和存储数据
xml可以是有效的
- 符合其文档类型定义(DTD)的文档
- xml标签没有被预定义,需要自行定义标签。
- 如果一个文档符合一个模式(schema)的规定,那么这个文档是模式有效的(schema valid)##
XML和HTML的区别
-
其实HTML与XML之间没有非常必然的联系,XML不是要替换HTML,实际上XML可以视作对HTML的补充
-
XML和HTML 的目标不同:HTML 的设计目标是显示数据并集中于数据外观,而XML的设计目标是描述数据并集中于数据的内容
-
与HTML相似,XML不进行任何操作
-
与 HTML 不同,XML 标记由架构或文档的作者定义,并且是无限制的。HTML 标记则是预定义的;HTML 作者只能使用当前 HTML 标准所支持的标记
XML是被设计用来描述数据的,HTML是被设计用来显示数据的。
XML语法
XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶",第一行是 XML 声明。它定义 XML 的版本(1.0)和所使用的编码(encoding="utf-8"),一个XML有且只有一个根,所有的元素都可以有子元素,父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹),所有的元素都可以有文本内容和属性。
示例:
<!--描述一个书的信息-->
<?xml version="1.0" encoding="utf-8"?>
<books>
<title>XML</title>
<author>钟文涛</author>
<price>12.6</price>
</books>
XML格式
-
所有的 XML 元素都必须有一个关闭标签
-
XML 标签对大小写敏感
-
必须正确嵌套
-
文档必须有根元素
-
属性值必须加引号
-
实体引用
<!--< < > > & & &apos ' " " --> 因为xml在浏览器解析器解析的时候,向< >这些都是会被解析的 所以你就想单纯输出一段文本 你就用以上实体代替 示例: 你想输出 <div>XML</div> 你就改成 < div > xml < /div &g
-
XML 中的注释
<!-- This is a comment -->
-
在 XML 中,空格会被保留
-
PCDATA
parsed character data:是会被解析器解析的文本
-
CDATA
character data:是不会被解析器解析的文本,CDATA是在XML文档里面使用的关键字,用来告诉浏览器,这部分内容不用解 析,是给其他程序用的,比如js代码等。CDATA 部分由 "" 结束:
XML验证器
拥有正确的语法的XML被称为“格式良好的xml文件”
符合模式定义的XMl文件是有效的xml文件(同时它也是格式良好的xml文件)
为什么要使用验证器?
- 每一个 XML 文件均可携带一个有关其自身格式的描述
- 独立的团体可一致地使用某个标准的 DTD 来交换数据
- 应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据
- 还可以使用 DTD 来验证自身的数据
1.1 DTD
DTD 的目的是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
DTD定义的两种类型 注意:区别大小写!
-
内部的DOCTYPE声明
<!DOCTYPE root-element [element-declarations]>
示例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE books [ <!ELEMENT books (book*)> <!ELEMENT book (title, price, (publisher | author))> <!ELEMENT title (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ELEMENT publisher (#PCDATA)> <!ELEMENT author (#PCDATA)> ]> <books> <book> <title>XML</title> <price>99</price> <publisher>dddddd</publisher> </book> </books>
-
外部文档声明
<!DOCTYPE root-element SYSTEM "filename">
示例:
<!--a.dtd--> <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT books (book*)> <!ELEMENT book (title, price)> <!ELEMENT title (#PCDATA)> <!ELEMENT price (#PCDATA)> <!--a.xml--> <!DOCTYPE books SYSTEM 'a.dtd'> <books> <book> <title/> <price/> </book> </books>
DTD语法规则—元素
<!ELEMENT element-name category> category 空元素: EMPTY PCDATA: (#PCDATA) 任何内容: ANY 带有子元素的元素: (child1,child2,...) 出现一次的子元素: (child-name) 至少出现一次的子元素: (child-name+) 出现零次或多次的元素: (child-name*) 出现零次或一次的元素: (child-name?) 或: (child1 | child2 | ...)
DTD语法规则—属性
<!ATTLIST element-name attribute-name attribute-type attribute-value> element-name 元素名 attribute-name 属性名 attribute-type 属性类型 attribute-value 属性默认值
-
属性类型
类型 描述 CDATA 值为字符数据 (character data) (en1|en2|..) 此值是枚举列表中的一个值 ID 值为唯一的 id IDREF 值为另外一个元素的 id IDREFS 值为其他 id 的列表 NMTOKEN 值为合法的 XML 名称 NMTOKENS 值为合法的 XML 名称的列表 ENTITY 值是一个实体 ENTITIES 值是一个实体列表 NOTATION 此值是符号的名称 xml: 值是一个预定义的 XML 值 -
属性值
值 解释 值 属性的默认值 #REQUIRED 属性值是必需的 #IMPLIED 属性不是必需的 #FIXED value 属性值是固定的
示例:
<?xml version="1.0" encoding="UTF-8"?> <!ELEMENT books (book*)> <!ELEMENT book (title, price, (publisher | author))> <!ATTLIST book id ID #REQUIRED> <!ELEMENT title (#PCDATA)> <!ATTLIST title subtitle CDATA #IMPLIED> <!ELEMENT price (#PCDATA)> <!ATTLIST price unit (人民币|美元) "人民币"> <!ELEMENT publisher (#PCDATA)> <!ELEMENT author (#PCDATA)>
-
1.2 Schema
XML Schema是DTD的升级版
优点:
- 可更容易地描述允许的文档内容
- 可更容易地验证数据的正确性
- 可更容易地与来自数据库的数据一并工作
- 可更容易地定义数据约束(data facets)
- 可更容易地定义数据模型(或称数据格式)
- 可更容易地在不同的数据类型间转换数据
1. schema基本结构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.trkj.com"
xmlns="http://www.trkj.com"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
</xs:schema>
qualified: 使用命名空间
unqualified: 不使用命名空间
2. 语法规则—元素
<xs:element name=“元素名” type=“元素类型“ default=”默认值” fixed=“固定值" />
常用类型:
xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
**3. 语法规则—属性 **
<!--默认没有use属性,表示可有可无,”required”表示属性一定要有-->
<xs:attribute name=“属性名” type=“类型““default=”默认值” fixed=“固定值“ use=“required|optional” />
常用属性类型:
xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
4. Schema语法规则 – complexType 复杂类型
complexType 元素用于定义复杂元素,复杂元素是指包含其他元素及/或属性的 XML 元素。
四种类型的复杂元素:
- 空元素
- 包含其他元素的元素
- 仅包含文本的元素
- 包含元素和文本的元素
注意: 上述元素均可包含属性!
-
复杂类型元素--空元素
空元素,空元素不能包含内容,只能含有属性。
示例:
<xs:element name="address"> <xs:complexType/> 或 <xs:complexType></xs:complexType> </xs:element> 或 <xs:element name="product"> <xs:complexType> <xs:attribute name="prodid" type="xs:positiveInteger"/> </xs:complexType> </xs:element>
-
复杂类型元素--仅包含子元素
仅包含子元素的复杂类型元素是只能包含其他元素的元素
示例:
<xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> </xs:complexType> xs:sequence 表示书写必须按顺序
-
复杂类型元素--仅包含文本
仅包含文本,仅含文本的复杂元素可包含文本和属性,并且必须在 simpleContent 元素内定义扩展或限定
示例:
<xs:element name="phone"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:integer"> <xs:attribute name="area" type="xs:integer"></xs:attribute> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>
-
复杂类型元素--混合元素(mixed)
如果元素即有标签体文本,又有属性,则称之为mixed元素
示例:
<xs:element name="letter"> <xs:complexType mixed="true"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="orderid" type="xs:positiveInteger"/> </xs:sequence> </xs:complexType> </xs:element> 为了使字符数据可以出现在 "letter" 的子元素之间,mixed 属性必须被设置为 "true"。<xs:sequence> 标签 (name、orderid ) 意味着被定义的元素必须依次出现在 "letter" 元素内部。 <letter> Dear Mr.<name>John Smith</name>. Your order <orderid>1032</orderid> will be shipped on <shipdate>2001-07-13</shipdate>. </letter>
5. Schema语法规则 – simpleType 简单类型
规定与约束具有纯文本内容的元素(不含子元素)或属性的值,事实上schema中所有的内置类型都是simpleType
restriction 元素定义对 simpleType、simpleContent 或 complexContent元素可接受的值。
<xs:element name="level">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="A"></xs:enumeration>
<xs:enumeration value="B"></xs:enumeration>
<xs:enumeration value="C"></xs:enumeration>
<xs:enumeration value="D"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
6. simpleType数据类型的限定类型
限定 | 描述 |
---|---|
enumeration | 定义可接受值的一个列表 |
fractionDigits | 定义所允许的最大的小数位数。必须大于等于0。 |
length | 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。 |
maxExclusive | 定义数值的上限。所允许的值必须小于此值。 |
maxInclusive | 定义数值的上限。所允许的值必须小于或等于此值。 |
maxLength | 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。 |
minExclusive | 定义数值的下限。所允许的值必需大于此值。 |
minInclusive | 定义数值的下限。所允许的值必需大于或等于此值。 |
minLength | 定义所允许的字符或者列表项目的最小数目。必须大于或等于0。 |
pattern | 定义可接受的字符的精确序列。 |
totalDigits | 定义所允许的阿拉伯数字的精确位数。必须大于0。 |
whiteSpace | 定义空白字符(换行、回车、空格以及制表符)的处理方式。 |
7. schema 指示器
- sequence 规定子元素必须按照特定的顺序出现
- choice 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼)
- All 指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次
- maxOccurs 指示器可规定某个元素可出现的最大次数
- minOccurs 指示器可规定某个元素可出现的最小次数
如需使某个元素的出现次数不受限制,必须使用xs:sequence或xs:choice,并且使用 maxOccurs="unbounded" 这个声明