Xml-DTD和Schema

定义:XML是一种数据传输和存储格式,用标签保存数据内容,利用标签嵌套关系保存数据之间关系
应用场景:不同平台间数据传输、程序配置文件
存在形式:XML文件、也存在内存或网络中,不要把XML狭隘理解为XML文件
校验:浏览器内置Html和XML解析器,可以校验xml是否正确

一、XML语法

  
1、声明或处理指令PI(processing instruction),指定解析器如何解析显示XML文档
    ①声明前不能有任何内容(如注释)
        <?xml version="1.0" encoding="utf-8" standalone="yes"?>  
        version必须存在,当前xml所遵循规范版本1.0     
        encoding指定xml解析编码,必须和xml文件保存编码一致,默认值iso8859-1(欧美拉丁字母符号,没有中文)   
        standalone指明xml是否独立,默认值yes表明不依赖其他文档,no表明依赖其他文档(很多解析器都会忽略此属性)  
    
    ②处理指令PI
        <?xml-stylesheet type="text/css" href="xxx.css"?>为XML指定样式css显示

2、元素(xml标签)
    只能包含一个根标签   
    一个元素分为开始和结束标签<a>xxx</a>,其间有文本内容(标签体)  
    一个元素不含任何内容为自闭标签<a/>  
    区分大小写如<A>和<a>是不同标记  
    命名不能以数字、标点符号、"_"、"xml"开头,不能包含空格、冒号  

3、一个元素可以有多个属性,属性值用单引号或双引号<a size="xxx" color="xxx"/>,属性名遵循元素命名规则

4、<!-- 注释内容 -->,除了声明前外可在任意位置、不能嵌套注释  

5、转义字符/CDATA,可以使解析器将转义内容当作普通文本来处理
    ①转义字符  
        &: &amp;  
        <: &lt;  
        >: &gt;  
        ": &quot;  
        ': &apos;
    ②<![CDATA[内容]]>
        被括起来的内容,会被浏览器当作普通文本来处理
    
    区别:  
        CDATA可以成段的进行转义,而转义字符一次只能转义一个字符  
        CDATA可以保存原始数据,只通知解析器按普通文本去处理  
        转义字符改变了原始数据,用其他字符替代
        

二、XML约束

1、DTD是XML约束文件(.dtd),约束xml写法,并对xml校验

    
①外部引入,在外部文件中写DTD,必须用utf-8编码保存
    <!DOCTYPE 根元素名称 SYSTEM 文件位置>
        SYSTEM表明dtd在当前文件系统中,后面文件位置是当前硬盘中的位置     
    <!DOCTYPE 根元素名称 PUBLIC "DTD名称" "DTD文件URL">
        PUBLIC表明dtd在网络公共位置中,后面指明dtd名字和所在网络URL地址
    
②内部引入,在xml中直接写<!DOCTYPE 根元素名称 [dtd约束的内容]>

③约束元素 <!ELEMENT 元素名称 元素约束>  
    元素约束:
        ANY表示包含任意子元素
        EMPTY表示不含子元素
        ()表示子元素
        ,表示子元素必须按顺序并列出现
        |表示子元素出现其中之一
        #PCDATA表示包含标签体
        +表示一次或多次
        *表示0次或多次
        ?表示0次或一次
        组合:<!ELEMENT 元素名称 ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
    
④约束属性 <!ATTLIST 元素名 属性名 属性类型 属性约束>  
    属性类型:
        CDATA表明普通字符串
        ENUMERATED表明取指定枚举列表值
        ID表明属性值在文档中唯一,只能以字母或下划线开头
    属性约束:
        #REQUIRED表明当前属性必须存在
        #IMPLIED表明当前属性可选
        #FIXED表明当前属性具有固定值
        '默认值'表明当前属性具有默认值

⑤实体ENTITY,对一段重复使用的内容引用、复用
    引用实体,在xml中引用的实体
        定义实体:<!ENTITY 实体名称 “实体内容” >
        使用实体:&实体名称;     
    参数实体,在dtd中引用的实体
        定义实体:<!ENTITY %实体名称 "实体内容">
        使用实体:%实体名称;
    
实例:
<?xml version = "1.0" encoding="utf-8" ?>
<!DOCTYPE 联系人列表[
    <!ELEMENT 联系人列表 ANY>
    <!ELEMENT 联系人 (姓名,EMAIL)>
    <!ELEMENT 姓名 (#PCDATA)>
    <!ELEMENT EMAIL (#PCDATA)>
    <!ATTLIST 联系人 编号 ID #REQUIRED>
]>
<联系人列表>
    <联系人 编号="a1">
        <姓名>张三</姓名>
        <EMAIL>zhang@it315.org</EMAIL>
    </联系人>
    <联系人 编号="a2">
        <姓名>李四</姓名>
        <EMAIL>li@it315.org</EMAIL>
    </联系人>
</联系人列表>

2、Schema也是xml约束文件(.xsd),目的是为了克服DTD缺陷


1)Schema本身符合xml语法,方便解析
2)对名称空间支持有非常好
3)比DTD更多数据类型,并且自定义数据类型
4)语义约束更精确,强于DTD
5)比DTD复杂多,学习成本高

Schema文档必须有一个根结点(称为Schema)  
名称空间xmlns:全世界唯一标识某个资源(通常是公司域名),仅是名称,不是真实的资源地址

实例: 
XSD文件(book.xsd)
<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="www.xxx.com"
        elementFormDefault="qualified">
    <xs:element name='书架' >
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded' >
                <xs:element name='书' >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='书名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售价' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

XML文件(.xml)
xmlns:w3指定名称空间(http://www.w3.org/2001/XMLSchema-instance)别名为w3
w3:schemaLocation指定名称空间(www.xxx.com)来源于book.xsd文件(可以是网络地址)
xmlns:my指定名称空间(www.xxx.com)别名为my
<my:书架 xmlns:w3="http://www.w3.org/2001/XMLSchema-instance"
        w3:schemaLocation="www.xxx.com book.xsd"
        xmlns:my="www.xxx.com">
    <my:书>
        <my:书名>JavaScript网页开发</my:书名>
        <my:作者>张孝祥</my:作者>
        <my:售价>28.00元</my:售价>
    </my:书>
</my:书架>

XML文件(.xml)
xmlns="www.xxx.com"可以忽略my 没有前缀默认使用这个空间
<书架 xmlns:w3="http://www.w3.org/2001/XMLSchema-instance"
     w3:schemaLocation="www.xxx.com book.xsd"
     xmlns="www.xxx.com">
    <书>
        <书名>JavaScript网页开发</书名>
        <作者>张孝祥</作者>
        <售价>28.00元</售价>
    </书>
</书架>

简书: http://www.jianshu.com/p/a0aaef0900f9
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/54355152
GitHub博客:http://lioil.win/2017/01/11/Xml-DTD-Schema.html
Coding博客:http://c.lioil.win/2017/01/11/Xml-DTD-Schema.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 1. XML简介 以下内容来自于http://www.w3school.com.cn/xml 基本知识 XML 和...
    WebSSO阅读 1,902评论 1 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,464评论 25 707
  • 虽然是红灯,他还是很自然地加入了前面过马路的人群。嘿,电视台来偷拍也无所谓,到时候不可能罚我一个,反正大家都……“...
    洞庭府君阅读 560评论 0 5
  • 这次南京之行 回来后 想写点东西给闺蜜给好友 致我们的友谊 【1】...
    Hocx阅读 403评论 0 0