一、xml的介绍
XML(eXtensible Markup Language)是一种标记语言,用于表示结构化的数据,并且可以和各种编程语言进行交互。它的主要用途是存储和传输数据,特别是在互联网上的数据交换。XML语言被广泛应用于Web开发、企业应用、移动应用、文档管理等领域。
XML的设计初衷是为了弥补HTML在数据交换方面的不足,它可以用标记来描述数据的结构和语义,使得其更容易被计算机处理。与HTML不同的是,XML标签和元素是自定义的,这使得XML在复杂数据的表示和交互方面具有更大的灵活性和可扩展性。
在XML中,数据存储在元素(element)和属性(attribute)中,元素包含了数据的结构和内容,而属性则用于描述元素的特征。XML还支持DTD(Document Type Definition)和XML Schema等文档类型定义方式,用于约束XML文档中元素和属性的使用,以保证数据的正确性和规范性。
1.为什么学xml
- 数据交互:XML作为一种标记语言,被广泛用于数据的描述和交换。与其他数据格式相比,XML具有更好的可读性、可扩展性和语义明确的特点。因此,学习XML可以帮助程序员更好地理解和处理不同格式的数据。
- Web开发:许多Web应用程序使用XML来存储和传输数据,例如RSS Feeds和SOAP(Simple Object Access Protocol)通信协议。了解XML的概念和用法有助于开发者快速建立Web服务。
- 数据库:许多数据库软件都支持将数据以XML格式存储和检索。学习XML可以使程序员更好地管理和使用数据库中存储的XML数据。
- 数据处理和转换:在处理和转换数据时,特别是在与不同系统和应用程序之间进行数据交换时,XML往往是最好的选择之一。了解XML的概念和技术可以让程序员更好地处理、转换和集成数据。
- 可扩展性:XML是一种开放的标准,可以使用DTD(Document Type Definition)或XML Schema来定义标记。这就意味着程序员可以创建自己的标记,以满足特定应用程序的需求。
2.xml的作用是什么
- 数据储存:XML可以把各种不同类型的数据,如文本、图像、音频、视频等,以标准化的格式储存到一个XML文档中,便于后续的读取、流转和使用。
- 数据表述:XML中的数据和信息采用标签方式进行表述和组织,具有良好的层次结构和可读性,以此来表达数据的结构和语义,从而很好地支持文档和数据的处理。
- 数据交换:XML可以实现高效、可靠的数据交换,能够通过网络将数据传输到不同的设备和系统中,因此它被广泛应用于互联网上的数据交换。
- 数据转换:在实际应用中,数据格式的差异性和不同系统之间的不兼容性是很常见的。XML的结构灵活,容易与其他数据格式进行转换,同时支持定义数据和文档的类型,因此XML是数据转换的好选择。
- 数据管理:XML文件在存储时可以共享DTD(Document Type Definition)或XML schema,从而能够更好地定义、共享数据结构和文档类型,更好地管理和维护文件和数据。
3.xml的标准格式
1. 是一种基于文本的标记语言,使用标签来描述数据的结构和语义。
2. XML文档必须包含一个被称为根元素的最外层元素。
3. 所有 XML 标签必须被正确地嵌套,即关闭标签的顺序必须与打开标签的顺序相反。
4. XML 语言是大小写敏感的,因此标签名和属性名的大小写必须与原始标签和属性名匹配。
5. XML 语言支持任何自定义标签和属性,但为了避免与其他 XML 文档冲突,应该根据某些规范来命名。
6. 文本和属性中的尖括号、引号和特殊字符必须使用实体引用进行转义,如<表示<,>表示>,&表示&。
7. XML 文档必须符合文档类型定义(Document Type Definition, DTD)或 XML 模式(XML Schema)的规范,以确保XML数据的有效性和结构的一致性。
二、元素定义
1.DTD声明
要在XML文档中加入DTD声明,可以在XML文档的开头添加类似如下的代码:
<!DOCTYPE 根元素名 SYSTEM "DTD文件路径">
其中:
<!DOCTYPE>
:表示DTD(Document Type Definition)声明的开始标签;根元素名
:是XML文档中的最外层元素,在DTD文件中应该有对应的根元素定义;SYSTEM
:表示DTD文件的类型为外部引用,即该DTD文件位于当前系统中;DTD文件路径
:指定DTD文件的路径,可以是相对路径或绝对路径。
一个完整的XML文件示例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 根元素名 SYSTEM "DTD文件路径"> <根元素名> <子元素名 属性名="属性值">元素值</子元素名> </根元素名>
在DTD文件中,可以定义XML文档的元素、属性和内容,以及它们之间的规则和限制。在XML文档中加入DTD声明有以下优点:
- 可以验证XML文档的正确性:通过DTD声明,可以定义XML文档元素和属性的类型、出现次数及其它限制规则,从而能够合法性验证XML文档,进而保证数据的完整性和正确性。
- 可以约定XML文档的结构和语义:DTD声明可以用来阐述XML文档元素之间的关系、属性的意义等,从而让XML文档具有良好的结构性和语义性。
- 可以提高XML文档的可重用性:DTD声明中可以定义一些常用的元素和属性,从而使得定义这些元素和属性的工作被重复使用、减少开发时间。
注意,在DTD文件指定的路径中,需要提供有效的DTD文件。如果文件路径与DTD文件不匹配,则 XML 解析器将会解析失败并报错
2.元素分类及使用
1.<!ELEMENT>:定义元素的结构,指定具有哪些子元素和子元素的顺序。示例:
<!ELEMENT 元素名 子元素1, 子元素2, ...>
2.<!ATTLIST>:定义元素的属性,指定每个属性的名称、数据类型和默认值。示例:
<!ATTLIST 元素名 属性1 数据类型1 默认值1 属性2 数据类型2 默认值2 ...>
3.<!ENTITY>:定义实体(Entity),用于表示特殊字符、字符串或其他文本片段,然后在文档中通过实体引用使用。示例:
<!ENTITY 实体名称 "实体内容">
4.<!NOTATION>:定义文档类型定义中使用的符号、音频文件和其他非XML数据的格式。示例:
<!NOTATION 符号名称 SYSTEM "符号系统标识符">
5.<!DOCTYPE>:定义文档的类型,通常用于DTD文件的开头。示例:
<!DOCTYPE 根元素名 [ <!ELEMENT 元素名 子元素1, 子元素2, ...> <!ATTLIST 元素名 属性1 数据类型1 默认值1 属性2 数据类型2 默认值2 ...> ]>
关键字用于定义元素、属性、实体、符号和文档类型,这些元素可以通过它们包含的子元素和属性的特定规则进行分组和分类。DTD文件通过关键字定义了一个XML文档的类型结构,从而使XML解析器能够验证并确保该文档结构和语法的正确性。
3.元素限制及使用
在DTD(Document Type Definition)文件中,可以通过元素限制关键字指定元素的内容。以下是DTD中可用的元素限制关键字:
1. #PCDATA:表示元素可以包含字符数据,即文本或CDATA块,但不能包含其他元素。例如:
<!ELEMENT 元素名 (#PCDATA)>
2. EMPTY:表示元素没有内容,即不能包含字符数据或其他元素。例如:
<!ELEMENT 元素名 EMPTY>
3. ANY:表示元素可以包含任何内容,包括字符数据和其他元素。例如:
<!ELEMENT 元素名 ANY>
4. 子元素名称+(加号):表示元素必须包含至少一个指定的子元素。例如:
<!ELEMENT 元素名 (子元素1, 子元素2+, 子元素3)>
5. 子元素名称*(星号):表示元素可以包含零个或多个指定的子元素。例如:
<!ELEMENT 元素名 (子元素1*, 子元素2, 子元素3*)>
6. 子元素名称?(问号):表示元素可以包含零个或一个指定的子元素。例如:
<!ELEMENT 元素名 (子元素1?, 子元素2?, 子元素3?)>
7. (子元素名称1|子元素名称2):表示元素可以包含指定的两个子元素中的任何一个。例如:
<!ELEMENT 元素名 (子元素1|子元素2)>
8.#REQUIRED:表示元素必须包含此属性并具有值。例如:
<!ATTLIST 元素名 属性名 CDATA #REQUIRED>
9.#IMPLIED:表示元素可以有或没有属性,并且不必指定默认值。例如:
<!ATTLIST 元素名 属性名 CDATA #IMPLIED>
使用元素限制关键字可以帮助限制元素的内容,避免出现非法的元素内容。此外,还可以在元素内容中包含注释,或者引用外部实体或其他文件,以实现更加复杂和多样的XML文档结构。
三、属性定义
1.语法
属性定义通常出现在DTD(Document Type Definition)中的 <!ATTLIST>
关键字声明中,用于定义元素的属性和属性值。
当该属性未被明确指定时,该属性使用的默认值,可以是任何类型的值。
以下代码定义元素 <book>
中的属性:
<!ATTLIST book id ID #IMPLIED isbn CDATA #REQUIRED language NMTOKEN "English" price CDATA #IMPLIED }>
其中,id
和 price
属性是可选的(#IMPLIED
),isbn
属性是必需的(#REQUIRED
),并且 language
属性指定默认值为 English
。
2.属性类型
XML中DTD的属性值可以使用以下数据类型:
1. CDATA(字符数据):表示可以包含任意字符数据,除了XML保留字符(例如<、>和&)外,其他字符将原封不动地输出。
2. ID/IDREF/IDREFS:ID属性值必须是唯一的,IDREF属性值必须对应于一个在XML文档中出现过的ID值,而IDREFS属性值则是IDREF的复数形式。
3. ENUMERATION:通过简单的枚举列表来指定属性值的取值范围,例如true/false、male/female等。
4. NMTOKEN:指定属性值只能使用NCName表中定义的字符集,也就是A-Z、a-z、0-9和下划线。
5. NMTOKENS:NMTOKEN的复数形式,指定的属性值可以使用多个由空格分隔的NMTOKEN。
6. ENTITY/ENTITIES:指定属性值为实体或实体集合,需要根据DTD文件中的定义进行替换。
7. NOTATION:指定属性值为非XML数据类型的名称,需要在DTD文件中进行定义。
8. INTEGER:指定整数类型的数据。
9. DECIMAL:指定小数类型的数据。
10. DATE/TIME:指定日期或时间类型的数据。
11. BOOLEAN:指定Boolean类型的数据。
12. QName:指定QName类型的数据,QName由一个命名空间URI和一个本地名称组成。
13. ANYURI:指定URI类型的数据。
14. BASE64Binary:指定Base64编码的二进制数据。
15. HEXBinary:指定十六进制编码的二进制数据。
16. NOTATION:指定XML文档中引用的符号类型。
总的来说,DTD中的属性值按照数据类型可分成以下几类:字符串,ID/IDREF/IDREFS,枚举,NMTOKEN/NMTOKENS,实体/实体集,整数/小数,日期/时间,布尔,QName,URI,二进制数据和符号(NOTATION)。
例如,以下代码定义了一个名为<person>
的元素,具有name
和age
两个属性:
<!ELEMENT person (name, age)> <!ATTLIST person name CDATA #REQUIRED age CDATA #IMPLIED >
其中,name
属性会通过 #REQUIRED
规定使用者必须对此属性进行定义,而 age
属性通过 #IMPLIED
规定使用者可选定义此属性。
以下是一个综合的XML DTD属性值数据类型的示例:
<!DOCTYPE bookstore [ <!ELEMENT bookstore (book+)> <!ELEMENT book (title, author, price)> <!ATTLIST book id ID #REQUIRED> <!ATTLIST book isbn NMTOKEN #REQUIRED> <!ATTLIST book weight NMTOKEN #IMPLIED> <!ATTLIST book category (fiction | non-fiction) "non-fiction"> <!ATTLIST price currency CDATA #FIXED "USD"> <!ATTLIST author gender (male | female) "male"> <!ATTLIST author nationality NMTOKENS #IMPLIED> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <bookstore> <book id="b001" isbn="978-0141439563" weight="2.5"> <title>1984</title> <author gender="male">George Orwell</author> <price>8.99</price> </book> <book id="b002" isbn="978-0451524935" weight="3.2" category="fiction"> <title>To Kill a Mockingbird</title> <author gender="female" nationality="American">Harper Lee</author> <price>12.99</price> </book> </bookstore>
在这个示例中,定义了书籍(book)和书店(bookstore)的结构和限制。在book元素中,有各种不同类型的属性,如ID,NMTOKEN,DECIMAL,枚举和CDATA。在author元素中,还有gender属性,它是一个枚举类型,而nationality属性则是NMTOKENS类型。最后,price元素的currency属性值为FIXED类型的“USD”,即其值在XML文档中被固定为“USD”。
最后,属性定义可以帮助使用者在DTD中定义XML元素的各种属性信息,并为文档提供验证以及规范性证据。