XML(DTD,SCHEMA约束)

XML配置原理


           XML 指可扩展标记语言(EXtensible Markup Language)。
           XML 是一种很像HTML的标记语言。
           XML 的设计宗旨是传输数据,而不是显示数据。
           XML 标签没有被预定义。您需要自行定义标签。
           XML 被设计为具有自我描述性。
           XML 是 W3C 的推荐标准。

xml用于做配置文件!

xml编写语法


             语法类似HTML!
            只是标签自定义!

            1.创建一个xml文件!后缀名 .xml
            2.xml文件中的第一行应该添加版本号
              <?xml version="1.0" encoding="UTF-8" ?>
            3.标签名严格区分大小写
            4.<开始标签> 文本内容/子标签 </结束标签>
            5.xml只能有一个根标签!
            6.标签内部可以有文本内容和子标签!但是要求包裹了子标签
              那么就应该包裹子标签的开始和结束标签!
            7.开始标签内部也可以编写属性
              <标签名 属性名="属性值" 属性名="属性值"  注意属性名自定义!
            8.可以编写空标签  <br /> 
            9.注释写法 <!-- -->
            10.支持转移符   &gt; &lt;    
               特殊符号容易被识别成xml的标签! 影响整个xml显示!
            11. <![CDATA[ 内容不编译 ]]>  

XML约束

XML 的设计宗旨是传输数据,为了方便解析,给xml添加约束!

约束 的细节:

标签名称 标签出现的次数!标签出现的位置!标签的属性名称!标签属性名出现的情况

html = xml + 约束;

xml的约束两种:

​ 1.DTD 约束:优点:DTD语法极其简单! 缺点:约束不够详细!不能约束文本内容!

​ 约束标签的名称!出现的位置!标签出现的次数!属性名称!属性出现的情况

​ 2.SCHEMA 约束 :约束的能力非常强大,可以对XML实例文档作出细致的语义限制

​ 比 DTD支持更多的数据类型,并支持用户自定义新的数据类型

​ 名称空间支持得非常好

dtd约束文件

被引入的dtd约束文件stu.dtd

声明一个XML元素——<!ELEMENT 元素名称 元素类型>

符号表示元素出现的次数:

+: 一次或多次

?: 0次或一次

*: 0次或多次

通过ATTLIST为其设置属性

<!ATTLIST element-name attribute-name attribute-type attribute-value>

attribute-type: CDATA (表示属性值为普通文本字符串

<!ATTLIST author period CDATA> 它表示在author这个标签中,period属性应该是字符类型。

attribute-value:

​ #REQUIRED:必须设置该属性

​ #FIXED:说明该属性的取值固定为一个值

​ # IMPLIED:可以设置也可以不设置

​ 直接使用默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值


<!ELEMENT students (student)* >
<!ELEMENT student (name|age)* >
<!ELEMENT name (#PCDATA) >            //#PCDATA表示在<name>和</name>标签之间可以插入字符或者子标签
<!ELEMENT age (#PCDATA) >
<!ATTLIST name id ID #REQUIRED >
<!ATTLIST age type (老年|中年|青年|骚年) "骚年">

引入dtd文件的xml的文件:stu.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "stu.dtd">                      引入dtd文件
<students>
    <student>
       <age type="中年"></age>
       <name id="aa"></name>
       <name id="ccc"></name>
    </student>

</students>
SCHEMA约束

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE student [
   <!ELEMENT student (name+,age?,xx?)>
   <!ELEMENT name (#PCDATA|a)* >
   <!ELEMENT a (#PCDATA)>
   <!ELEMENT age (#PCDATA)>
   <!ELEMENT xx (#PCDATA)>
   <!ATTLIST name class ID  #REQUIRED >
   <!ATTLIST age xx CDATA #FIXED "xxxx">
]>

<student>
    <name class="aaa"></name>
    <name class="cccc"></name>
    <age xx="xxxx"></age>
    
</student>

​ XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束

​ Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd。扩展名:后缀名 (来自URI即网络或本地)

Schema 为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档(上面是约束文档下面是实例文档)

​ 以后XML文件就可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束。在XML Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间用一个唯一的URI(Uniform Resource Identifier,统一资源标识符)表示。


Schema约束文档:book.xsd文件:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  
            targetNamespace="http://www. itcast.cn" 
            elementFormDefault="qualified">
  
引入Schema约束文档的book.xml文件:
 <itcast:书架 xmlns:itcast="http://www.itcast.cn"      // 只是分配一个名字无实意
              
            
            //固定写法
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
// 第一个值是需要使用的名称空间。第二个值是供命名空间使用的XML Schema的位置 使用空格分开(cn book)
            xsi:schemaLocation=“http://www.itcast.cn book.xsd">  //约束的具体位置
 </itcast:书架>             
  

​ URI:http://www.itcast.cn根本没有指向任何文件,只是一个分配的名字

xmlns:xsi:声明XML Schema实例名称空间并将xsi前缀与该名称空间绑定,这样模式处理器就可以识别xsi:schemaLocation属性。XML Schema实例名称空间的前缀通常使用xsi。

如果没有那句话,下边的xsi:schemaLocation这个属性不起作用

框架中的schema

我们在使用框架写XML的时候,使用的就是schema。说下我理解最深的一点,为什么框架这里要使用schema,框架要放好多不同的包进来,那么这个是就会有一个命名冲突的问题。为了解决这个问题,那么我们写XML标签的时候就要声明不同的命名空间,比如说这个标签是那个命名空间下的。schema很好的解决了这个问题,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值