关于xml的约束DTD and Schema

来源:互联网 发布:网络布线工程合同 编辑:程序博客网 时间:2024/04/29 18:07

首先是对XML的理论(不想看的直接跳过)

XML是一种标记语言

XML设计宗旨是用于传输数据,而非显示数据,在软件系统中常作为配置文件使用

XML采用的是层次结构

示例:

    property file:                                 title.name =tom                                                     title.font = 12                                     XML file:       <title>        <name>tom</name>               <font> 12 </font>           </title>

通过和property文件的对象发现

property采取的是平面结构

XML采用的是层次结构,更为灵活。


使用XML需要注意的:

1、对大小写敏感   <h1>和<H1> 是不同的XML标签

2、XML中的属性值必须有值,且必须使用“”号引起来

3、不要出现混合式内容  - - 示例如下,一个元素中,要么只包含子元素,要么只包含文本,这样是可以简化解析过程的

<font>test <name>tom</name></font>

4、不能以xml(或XML)开头

5、不能包含空格

6、名称中间不能包含冒号( : )   ---与Schema约束有关。




XML文档的组成 :

  <!--1、标准XML文档应当以文档头开始-->

      <?xmlversion="1.0" encoding="UTF-8" ?>

  <!-- 2、文档头之后,便是文档类型定义(Document Type Definition,DTD) -->

示例:

<!DOCTYPE web-appPUBLIC  

                "-//Sun Microsystems, Inc.//DTD WebApplication 2.3//EN"

                "http://java.sun.com/dtd/web-app_2_3.dtd">



CDATA区

         在编写XML文件时,若想要某些内容不被解析引擎解析执行,当作文本内容处理

         将这些数据放入CDATA区中  示例如下:

  <![CDATA[ 内容 ]]>

  <![CDATA[

        <itcast>

            <br/>

        </itcast>

    ]]>


转义字符

对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。





什么是XML约束   ---DTD andSchema

     1XML约束用于验证和规范XML中可以写什么,不可以写什么,规定每个元素中可以写什么,不可以写什么。

    常用于XML约束技术有XML DTD和XML Schema


关于XML DTD

         以DTD为文件扩展名的文档,使用DOCTYPE引入

又分为内嵌式的约束引用外部文件式的约束

1、引入外部文件的方式:

a)本地DTD导入:

外部导入的dtd文件

 

导入格式:

<!DOCTYPEbooksSYSTEM"books.dtd">

<!—

        books   当前文档根元素

        SYSTEM  导入本地文件

        books.dtd  导入的约束文件名,需要""号引号来

 -->

b)导入公共DTD导入:--可以将DTD约束发布到网上,通过网络url地址导入网络DTD约束文件

导入格式:

<!DOCTYPE 文档根结点 PUBLIC"DTD名称""DTD文件的URL">

例如<!DOCTYPE web-app PUBLIC  

                "-//Sun Microsystems, Inc.//DTD WebApplication 2.3//EN"

                "http://java.sun.com/dtd/web-app_2_3.dtd">

 

2、内部导入DTD文件的方式:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 内部导入dtd -->
<!DOCTYPE  books[
<!ELEMENT books (book+) >
<!ELEMENT book (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA) >
<!ELEMENT price (#PCDATA) >
]>

<books>
<book>
<name>thinking in java</name>
<author>tom</author>
<price>99</price>
</book>


<book>
<name>thinking in c++</name>
<author>james</author>
<price>88</price>
</book>
</books>


DTD约束语法





ENTITY(实体引用)用法 :

a)用于xml引用的参数实体:

1、在dtd中定义属性:

<!ENTITY addr "itcast" >

2、在xml中可以通过引用获取值:

<address>&addr;</address>

显示结果:

相当于引用dtd中的实体值,为的是方便利用,直接使用引用便可获取值。

内部定义DTD是无法使用引用实体的。

 

b)用于DTD文件引用的参数实体

    1、dtd中定义属性:

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT address (#PCDATA)>

<! ENTITY % info "name,age,address" >  <!--用于dtd内部实体-->

<! ELEMENT user (%info;) >  <!--引用了上面的实体,为了简写,复用-->


关于XML Schema

                    在现今开发中,大量引用了Schema约束,相对于DTD约束,Schema约束更加严谨的约束了XML中

                的属性定义。

            Schema文件的后缀名为xsd:

        Schema文件格式

              <?xmlversion="1.0"encoding="UTF-8"?>

                <schemaxmlns="http://www.w3.org/2001/XMLSchema" 

                targetNamespace="http://www.example.org/demo1" 

                elementFormDefault="qualified">

            </schema>

<!--

xmlns :规定了当前xml文件中可以写什么

targetNamespace  :为此schema约束文件起名,用于引入此schema文件。

elementFormDefault:未知

-->

        在xml中引入Schema文件:

           <booksxmlns="http://www.itcast.cn/books"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.itcast.cn/booksbooks.xsd">

        <!--

            xmlns:xsi="....."  表示当前的xml是被schema约束的。

            xsi:schemaLocation=".... *.xsd"

                由俩部分组成:

                        1、命名空间

                        2、真正的将命名空间导入进来,填写的是真实的schema文件的url地址。

        -->

    一个XML是可以有多个schema约束文件的,在xml中要区分  每个Schema分别约束的元素必须使用前缀来区分。

        <booksxmlns:itcast ="http://www.itcast.cn/books"

xmlns ="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.itcast.cn/booksbooks.xsd">

        这样我们在使用时,只需要给元素添加前缀便可以区分此元素使用的是哪一个schema约束文件。:

     <itcast:书架 xmlns:itcast=“http://www.itcast.cn”>

         <itcast:书>……</itcast:书>

     </itcast:书架>