XML与DTD(够用)
1: 概述
1.1 什么是XML
XML指可扩展标记语言。它是从标准通用标记语言派生的基于文本的标记语言(SGML).
1.2 三个重点
XML是可扩展的: XML允许你创建自己的自描述性的标签,或语言,适合您的应用程序.
XML进行数据 : 不存在它:XML允许你无论存储将如何呈现这些数据.
XML是一个公共标准 : XML是由一个组织开发的名为万维网联盟(W3C),并可以作为一个开放的标准.
1.3规则
基本语法:
1. xml文档的后缀名 .xml
2. xml第一行必须定义为文档声明
3. xml文档中有且仅有一个根标签
4. 属性值必须使用引号(单双都可)引起来
5. 标签必须正确关闭
6. xml标签名称区分大小写 (标签 属性)
7. xml只允许只有一个根(Root)标签
8. xml标签的属性也是区分大小写的
1.4 常用转义
2: Xml声明
xml分为两个部分, xml声明 xml标签
版本:
编码
是否依赖于信息从外部源,诸如外部的文档类型定义(DTD)的语法分析程序,其内容。默认值被设置为无。将其设置为yes告诉处理器有需要解析的文件没有外部声明
yes no
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
xml注释:
<!-- -->
XML 中,空格会被保留
Hello Tove ====>转换为 Hello Tove
XML 以 LF 存储换行
在 Windows 应用程序中,换行通常以一对字符来存储:回车符(CR)和换行符(LF)。
在 Unix 和 Mac OSX 中,使用 LF 来存储新行。
3:Xml标签
完整闭合标签
<address>这是正确的句法</address>
空标签
<hr></hr> #或者 <hr/>
4:Xml元素
可以包含一个或者多个元素,这些元素允许两种不同的赋值方法
<?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
5:XML 属性
属性必须加引号
<person sex="female"> 或者这样也可以: <person sex='female'>
多个属性
<person name="tom" sex="female">
尽量使用元素代替属性
属性不能包含多个值(元素可以)
属性不能包含树结构(元素可以)
属性不容易扩展(为未来的变化)
数据库中用于标识某个元组
使用id表示某一组数据
<?xml version="1.0" encoding="utf-8"?> <messages> <note id="501"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> </messages>
6:验证XML
DTD验证
本地验证: <!DOCTYPE note SYSTEM "Note.dtd">
网络验证:<!DOCTYPE note PUBLIC "URL">
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE note SYSTEM "Note.dtd"> // 指定验证的文件 <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
schema验证
XSD:描述
7:最佳命名习惯
使名称具有描述性。使用下划线的名称也很不错:<first_name>、<last_name>。
名称应简短和简单,比如:<book_title>,而不是:<the_title_of_the_book>。
避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为您想要从 first 里边减去 name。
避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。
避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。
显示XML
使用CSS
使用XLAT
8:XML进阶
XML命名空间
xmlns:f="http://www.w3cschool.cc/furniture" f就是指定的命名空间
Android中 布局标签就是使用的这种命名空间
CDATA数据
对于某些数据需要直接按照文本形式处理的 如@lt @gt 就不会处理
<![CDATA[ if (a < b && a < 0) then 具体数据 ]]>
XML 数据岛
XML 数据岛是嵌入到 HTML 页面中的 XML 数据。
XML 数据岛只在 Internet Explorer 浏览器中有效。
定义: 文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
PCDATA:
PCDATA 的意思是被解析的字符数据(parsed character data)。
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
CDATA:
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
XML外部 内部:
<!DOCTYPE tglib SYSTEM "URL|本地路径">
<!DOCTYOE tglib PUBLICK "URL"> // 声明为公共的DTD文件
1: 基本使用
声明DTD开始部分
<!DOCTYPE DTDNAME [ <!-- 具体的元素 属性 实体--> ]>
2:声明元素
空元素
<! ELEMENT name EMPTY> # 实例 <!ELEMENT br EMPTY> <by/>
多个元素
含有多个元素的元素,子元素必须连续声明
<!ELEMENT name (att1,att2) # 实例 <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
PCDATA元素(可以被解析为元素的)
<!ELEMENT name (#PCDATA)> # 实例 <!ELEMENT body (#PCDATA)>
带有任何内容的元素
<!ELEMENT name ANY> # 实例 <!ELEMENT body ANY>
声明只出现一次的元素
<!ELEMENT element-name (child-name)> # 实例: <!ELEMENT note (message)>
声明最少出现一次的元素 +
<!ELEMENT element-name (child-name+)> # 实例: <!ELEMENT note (message+)>
声明出现零次或多次的元素 *
<!ELEMENT element-name (child-name*)> # 实例: <!ELEMENT note (message*)>
声明出现零次或一次的元素 ?
<!ELEMENT element-name (child-name?)> # 实例: <!ELEMENT note (message?)>
声明 |可选内容
实例: <!ELEMENT note (message|body)>
声明混合型的内容
实例: <!ELEMENT note (#PCDATA|to|from|header|message)*>
3 xml属性
格式
<!ATTLIST elename attname type value> # 元素名 属性名 类型 属性值 # 实例 <!ATTLIST User name CDATA " "> # 这个" " 可以不给 可以给限定值 #REQUIRED #FIXED #IMPLIED
提供的类型
类型 |
描述 |
CDATA |
值为字符数据 (character data) |
(en1|en2|..) |
此值是枚举列表中的一个值 |
ID |
值为唯一的 id |
IDREF |
值为另外一个元素的 id |
IDREFS |
值为其他 id 的列表 |
NMTOKEN |
值为合法的 XML 名称 |
NMTOKENS |
值为合法的 XML 名称的列表 |
ENTITY |
值是一个实体 |
ENTITIES |
值是一个实体列表 |
NOTATION |
此值是符号的名称 |
xml: |
值是一个预定义的 XML 值 |
提供的属性
值 |
解释 |
值 |
属性的默认值 |
#REQUIRED |
属性值是必需的 |
#IMPLIED |
属性不是必需的 |
#FIXED value |
属性值是固定的 |
完整例子
<!ELEMENT Address EMPTY> <!ATTLIST Address street CDATA "" > # 应用 <Address street="幸福大街" />
强制要求值 可选 固定值
<!ELEMENT Address EMPTY> <!ATTLIST Address street CDATA #REQUIRED > //那street 这个属性必须给出 # 实例 <Address street='xxx'/> <!ATTLIST Address street CDATA #FIXED "必须给出固定的值"> // <!ATTLIST Address street CDATA #IMPLIED > //可选
列举属性值
DTD: <!ATTLIST payment type (check|cash) "cash"> # XML 例子: <payment type="check" /> 或 <payment type="cash" />
指定ID IDREF
<!ATTLIST User id ID #REQUIRED > // # <User id="101"/> <!ATTLIST User2 id IDREF #REQUIRED> <User2 id="101"> // 引用别人的ID值 <User2 id="101 102 103"> // 表示引用多个ID值
4:xml实体
定义
<!ENTITY entity-name value> # 实例 <!ENTITY name1 "tom"> <!ENTITY name2 "gory"> # 应用 <author>@name1;@name2</author>
5 一些题目
根据上面的内容写出DTD约束文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE Teams {
<!ELEMENT Teams (Team+)>
<!ELEMENT Team (#PCDATA)>
<!ELEMENT Team (Teamname,Country,Member+)>
<!ELEMENT Teamname (#PCDATA)>
<!ELEMENT Country (#PCDATA)>
<!ELEMENT Member (#PCDATA)>
<!ATTLIST Member Name CDATA #REQUIRED>
<!ATTLIST Member Age CDATA #REQUIRED >
<!ATTLIST Member Sex CDATA (Female|Male) "Male">
]>
<Teams>
<Team>
<Teamname>Roma</Teamname>
<Country>Italy</Country>
<Member Name=”AAA ”Age="36" Sex="Male" />
<Member Name=”BBB ”Age="26" Sex="Female" />
</Team>
</Teams>
XSD Schema 描述
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/NewXMLSchema"
xmlns:tns="http://www.example.org/NewXMLSchema"
elementFormDefault="qualified">
<xs:element name="Teams">
<xs:complexType>
<xs:sequence>
<xs:element name="Team" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Teamname" type="xs:string"></xs:element>
<xs:element name="Country" type="xs:string"></xs:element>
<xs:element name="Member" maxOccurs="100">
<xs:complexType>
<xs:attribute name="Name" type="xs:string"></xs:attribute>
<xs:attribute name="Age" type="xs:integer"></xs:attribute>
<xs:attribute name="Sex" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML文档
<?xml version="1.0" encoding="UTF-8"?>
<Teams xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="NewXMLSchema.xsd"
<Team>
<Teamname>Roma</Teamname>
<Country>Italy</Country>
<Member Name="AAA" Age="34" Sex="Male"/>
<Member Name="AAA" Age="34" Sex="Male"/>
</Team>
</Teams>
XML与DTD(够用)的更多相关文章
- 【PHP XML与dtd概述【完整版】】
一.XML文件简介 关于XML的大多数人都知道一些,HTML->xhtml->xml,这个顺序本来应当是HTML发展的顺序. XML可以当做配置文件使用,还可以充当小型的数据库. vers ...
- XML约束——DTD约束
参考: 方立勋老师的讲课视频. 什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ...
- xml约束DTD演示
此演示xml和DTD在一个文件中 book.xml <?xml version="1.0" encoding="utf-8"?> <!DOCT ...
- jdom dom4j解析xml不对dtd doctype进行验证(转)
一.写在所有之前:因为dom4j和jdom在这个问题上处理的方法是一模一样的,只是一个是SAXBuilder 一个SAXReader,这里以jdom距离,至于dom4j只需要同理替换一下就可以了.二. ...
- XML 和 DTD
1.XML 1.1xml简介 a)xml,eXtensible Markup Language,可扩展标记语言,是一种标记语言: b)xml是一种非常灵活的语言,没有固定的标签,所有的额标签都可以自定 ...
- 【JAVA与XML、dtd约束、Schema约束】
一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...
- 【php基础】XML,DTD实例
要求一:能看懂别人写的DTD文件,自己能写更好.例如products.dtd: <!ENTITY AUTHOR "John Doe"> <!ENTITY COMP ...
- javaweb学习总结八(xml约束DTD)
一:XML约束概念 xml约束:可以编写一个文档来约束xml文件的书写规范. xml语言格式比较严谨,不可能让程序员随意编写,所以必须要有约束. 二:常用的xml约束技术 1:DTD,document ...
- 关于XML的DTD概述
1 DTD概述 1.1 什么是DTD DTD(Document Type Definition),文档类型定义,用来约束XML文档.或者可以把DTD理解为创建XML文档的结构!例如可以用DTD要求XM ...
随机推荐
- Java8_map新增方法
参考博客 https://irusist.github.io/2016/01/04/Java-8%E4%B9%8BMap%E6%96%B0%E5%A2%9E%E6%96%B9%E6%B3%95/#ge ...
- Red Hat Enterprise Linux 官方正式版镜像下载
Red Hat Enterprise Linux是美国红帽公司开发的商业市场导向的Linux发行版,为方便大家学习研究,整理分享历代红帽官方正式版镜像给有需要的朋友们. 下载地址:https://ww ...
- 第十六届浙江大学宁波理工学院程序设计大赛 E 雷顿女士与平衡树(并查集)
题意 链接:https://ac.nowcoder.com/acm/contest/2995/E来源:牛客网 卡特莉正在爬树,此时她又在树梢发现了一个谜题,为了不令她分心以至于发生意外,请你帮她解决这 ...
- day98_12_2 数据分析工具包。
1.numpy 在python中,数据分析可以使用numpy. 首先可以安装ipython解释器,在终端,代码变得可视化,界面有高亮显示: pip Install ipython 除了可以在终端编程之 ...
- 使OrangePi Zero+支持U盘启动
以下步骤均在Armbian系统中完成 一.无内存卡启动 1.使用armbian-config启动SPI 输入sudo armbian-config→选中System并回车→选中Hardware并回车→ ...
- shell中字典的一个用法示例
1. shell中字典的用法示例, 数组用法同字典 2. 以上使用sell配合字典实现的功能, 使用awk能轻松搞定, 如下: awk '{print $2}' file.txt | sort | u ...
- APP自动化针对PO模式进行二次封装之basepage
APP自动化跟WEB自动化所使用的框架基本一样,都是采用的PO模式结合pytest框架编写自动化测试脚本,为了提高代码的复用性.稳定性和易维护性,我们针对PO模式进行了二次封装,将日志,等待以及异常截 ...
- 【分析工具】阿里巴巴Arthas--线上问题分析利器
目录 1. Arthas是什么 2. Arthas能解决什么问题 3. 快速安装 第一步:下载 第二步:运行 第三步:选择进程 4. 实战使用 5. 总结 本博客转载自阿里开源的 Java 诊断工具 ...
- ZooKeeper(三):请求处理链路的创建过程解析
我们知道,zk就是一个个处理链组成的. 但是,这些处理链是在什么创建的呢? ZooKeeper 中有三种角色的服务节点存在: Leader, Follower, Observer . 而每个服务节点的 ...
- Selenium(三):操控元素的基本方法
1. 操控元素的基本方法 选择到元素之后,我们的代码会返回元素对应的 WebElement对象,通过这个对象,我们就可以操控元素了. 操控元素通常包括: 点击元素 在元素中输入字符串,通常是对输入框这 ...