学习DTD和Schema的几个例子

  可以使用DTD(文档类型定义)来规定xml文档构建模块,可用起对xml文件进行验证。具体用法转:http://www.w3school.com.cn/dtd/dtd_intro.asp。同样也可以用Schema来实现DTD的功能,并且Schema因为其本身可以规定数据类型和其扩展性要优于DTD,并且将逐步取代DTD,具体用法转:http://www.w3school.com.cn/schema/index.asp

例子1:给xml文件编写对应的DTD文件

ex1.xml文件:

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE game SYSTEM "game.dtd">
<!--
    Date:2016/1/26
    Writer:Wayne Ng
    Theme:MapleStory hero briefInstruction
-->
<game>
    <warrior>
        <hero>
            <name>英雄</name>
            <weapons>剑、斧、钝器</weapons>
            <skill>终极打击</skill>
        </hero>
        <hero>
            <name>圣骑士</name>
            <weapons>剑、钝器</weapons>
            <skill>神圣冲击</skill>
        </hero>
        <hero>
            <name>黑骑士</name>
            <weapons>长枪、矛</weapons>
            <skill>黑暗穿刺</skill>
        </hero>
    </warrior>
    <magician>
        <hero>
            <name>主教</name>
            <weapons>长杖、短仗</weapons>
            <skill>圣光普照</skill>
        </hero>
        <hero>
            <name>火毒法师</name>
            <weapons>长杖、短仗</weapons>
            <skill>末日火焰</skill>
        </hero>
        <hero>
            <name>冰雷法师</name>
            <weapons>长杖、短仗</weapons>
            <skill>冰咆哮</skill>
        </hero>
    </magician>
    <archer>
        <hero>
            <name>神射手</name>
            <weapons>弓</weapons>
            <skill>暴风箭雨</skill>
        </hero>
        <hero>
            <name>箭神</name>
            <weapons>弩</weapons>
            <skill>终极扫射</skill>
        </hero>
    </archer>
    <ranger>
        <hero>
            <name>侠盗</name>
            <weapons>短剑、短刀</weapons>
            <skill>暗杀</skill>
        </hero>
        <hero>
            <name>隐士</name>
            <weapons>拳套</weapons>
            <skill>四连镖</skill>
        </hero>
        <hero>
            <name>暗影双刀</name>
            <weapons>短剑、短刀</weapons>
            <skill>终极斩</skill>
        </hero>
    </ranger>
</game>

game.dtd文件:

<!ELEMENT warrior  (#PCDATA)>
<!ELEMENT hero  (#PCDATA)>
<!ELEMENT name  (#PCDATA)>
<!ELEMENT weapons  (#PCDATA)>
<!ELEMENT skill  (#PCDATA)>
<!ELEMENT magician  (#PCDATA)>
<!ELEMENT archer  (#PCDATA)>
<!ELEMENT ranger  (#PCDATA)>

例子2:使用Schema实现例1的功能

ex2.xml文件:

<?xml version = "1.0" encoding = "UTF-8"?>
<!--
    Date:2016/1/26
    Writer:Wayne Ng
    Theme:MapleStory hero briefInstruction
-->
<game xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="game.xsd">
    <warrior>
        <hero>
            <name>英雄</name>
            <weapons>剑、斧、钝器</weapons>
            <skill>终极打击</skill>
        </hero>
        <hero>
            <name>圣骑士</name>
            <weapons>剑、钝器</weapons>
            <skill>神圣冲击</skill>
        </hero>
        <hero>
            <name>黑骑士</name>
            <weapons>长枪、矛</weapons>
            <skill>黑暗穿刺</skill>
        </hero>
    </warrior>
    <magician>
        <hero>
            <name>主教</name>
            <weapons>长杖、短仗</weapons>
            <skill>圣光普照</skill>
        </hero>
        <hero>
            <name>火毒法师</name>
            <weapons>长杖、短仗</weapons>
            <skill>末日火焰</skill>
        </hero>
        <hero>
            <name>冰雷法师</name>
            <weapons>长杖、短仗</weapons>
            <skill>冰咆哮</skill>
        </hero>
    </magician>
    <archer>
        <hero>
            <name>神射手</name>
            <weapons>弓</weapons>
            <skill>暴风箭雨</skill>
        </hero>
        <hero>
            <name>箭神</name>
            <weapons>弩</weapons>
            <skill>终极扫射</skill>
        </hero>
    </archer>
    <ranger>
        <hero>
            <name>侠盗</name>
            <weapons>短剑、短刀</weapons>
            <skill>暗杀</skill>
        </hero>
        <hero>
            <name>隐士</name>
            <weapons>拳套</weapons>
            <skill>四连镖</skill>
        </hero>
        <hero>
            <name>暗影双刀</name>
            <weapons>短剑、短刀</weapons>
            <skill>终极斩</skill>
        </hero>
    </ranger>
</game>

game.xsd文件:

<?xml version="1.0" encoding = "UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified" />
<!--简单元素的定义-->
<xs:element name = "name" type = "xs:string" />
<xs:element name = "weapons" type = "xs:string" />
<xs:element name = "skill" type = "xs:string" />

<!--复杂元素的定义-->
<xs:element name = "hero">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref = "name" />
            <xs:element ref = "weapons" />
            <xs:element ref = "skill" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name = "warrior">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref = "hero" maxOccurs = "unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name = "magician">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref = "hero" maxOccurs = "unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name = "archer">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref = "hero" maxOccurs = "unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name = "ranger">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref = "hero" maxOccurs = "unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name = "game">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref = "warrior" />
            <xs:element ref = "magician" />
            <xs:element ref = "archer" />
            <xs:element ref = "ranger" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

      2016/1/27修订  By野马菌

时间: 2024-12-13 16:55:02

学习DTD和Schema的几个例子的相关文章

dtd与schema的区别&amp;XML文件解析常用方式

Schema和DTD 都是用来定义各种文件中XML标记的使用规范.Schema是标准的XML文件,而DTD则使用自己的特殊语法,因此,只需要知道XML的语法规则就可以编写Schema了,不需要再学习其它语法规则.可以使用相同的处理器来解读,Schema利用命名空间将文件中特殊的节点与Schema说明相联系,一个XML文件可以有多个对应的Schema,若是DTD的话,一个XML文件只能有一个相对应的DTD文件.Schema的内容模型是开放的,可以随意扩充,而DTD则无法解读扩充的内容.DTD只能把

XML的DTD和Schema约束

为什么要使用约束? XML是自定义的标签,有时候标签太多,记不住,所以就需要有约束来告诉我能写哪些标签,哪些标签写错了不能识别 XML中有哪几种约束? 有很多约束,其中DTD和Schema约束最为常见. 约束本质上是什么? 约束本质上也是一种xml文件. DTD约束和Schema约束的区别 特点的区别: DTD约束较为古老,简单,一些老框架使用DTD作为约束:Struts2和Hibernate都使用DTD作为其XML配置文件的约束 Schema约束功能更为强大,用的更为广泛,Tomcat和Spr

(四)Openstack学习之WSGI:自己动手写例子

WSGI 是Web Services Gateway Interface的缩写. 如果想深入了解,可以阅读 PEP 333 文档,包含有任何你想要的:)community errata, .这篇文章将手把手教你写一个简单的WSGI例子. 注意:我用的Python版本是.2.7.x. 最经典,最简答的WSGI样当属 Hello World app. 咱们将要用到 virtualenv 去创建一个封闭的Python项目环境: $ virtualenv wsgi-example $ cd wsgi-e

WebService学习笔记-XML&Schema&HTTP

XML约束 在XML技术里,可以编写一个文档(文件)来约束一个XML文档的书写规范,这称之为XML约束 1.namespace 相当于schema文件的id 2.targetNamespace属性 用来指定schema文件的namespace的值 3.xmlns属性 引入一个约束, 它的值是一个schema文件的namespace值 4.schemaLocation属性 用来指定引入的schema文件的位置 schema规范中: 1. 所有标签和属性都需要有schema文件来定义 2. 所有的s

XML&amp;DTD&amp;XML Schema学习

XML(eXtensible Markup Language)可扩展的标记语言.xml在web service编程中尤为重要.在网络传输中可以作为传输数据的载体.xml作为元语言, 它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的元语言. 它非常适合网络传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据.可以实现异构语言.异构平台之间的交互.XML 文档定义方式有:文档类型定义(DTD)和XML Schema.DTD(Document Type Defi

javaweb学习总结八(xml约束&lt;DTD以及schema&gt;)

一:XML约束概念 xml约束:可以编写一个文档来约束xml文件的书写规范. xml语言格式比较严谨,不可能让程序员随意编写,所以必须要有约束. 二:常用的xml约束技术 1:DTD,document type definition 2:校验xml文件正当性 a:使用解析工具 b:使用ide工具,如:eclipse books.html 1 <?xml version="1.0" ?> 2 <!DOCTYPE bookstore SYSTEM "book.d

第1天 XML和DTD、schema约束

1.xml * 扩展名:*.xml * 作用:存储.配置 一个XML文件分为如下几部分内容:文档声明.元素.属性.注释  CDATA区.特殊字符.处理指令(processing instruction). 1.1文档声明 最简单的声明语法: <?xml version="1.0" ?> version:设置当前xml文档内容使用的版本 用encoding属性说明文档的字符编码: <?xml version="1.0" encoding="

二、XML的DTD和Schema

  1.DTD简单介绍   2.schema入门 schema出现的目的是通过一个更加合理的方式来编写xml的限制文件(基于xml语法的方式) schema可以使用命名空间来支持多个名称相同的元素 schema可以很好的完成对java或者所有对象的修饰并且提供了大量的数据类型     2.1.命名空间 在xml中引入schema 通过文件路径引入     2.2.元素和属性     2.3.相关约束   3.深入schema     3.1.数据模型的创建     3.2.相关的设计方案    

log4j学习(一)最简单的例子

前言: 之前笔者一直是在System.out中打日志的,由于笔者大部分时候是编写在tomcat容器里运行的一些个小web应用,所以这么做似乎没什么问题:打印出来的日志都可以在tomcat自己的log目录下的一些个日志文件里找到.但是,最近笔者接触到一个项目,需要编写一个不依赖于容器的能够直接在系统上运行的socket服务器程序,使得笔者急需一个能够打自己日志的地方,于是开始学习log4j.顺便,也逼迫笔者真正的好好学习关于流.比http更为底层TCP和其对应的socket通信.多线程等知识. 正