学习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野马菌
学习DTD和Schema的几个例子的更多相关文章
- XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax
本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...
- XML&DTD&XML Schema学习
XML(eXtensible Markup Language)可扩展的标记语言.xml在web service编程中尤为重要.在网络传输中可以作为传输数据的载体.xml作为元语言,它可以用来标记数据. ...
- DTD 和 Schema简介
什么是DTD? DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块. 它使用一系列的合法元素来定义文档结构. DTD例子 <?xml version="1.0"? ...
- 16.XML语法、CDATA、约束(DTD、Schema)讲解
xml主要用来描述数据,比如配置文件,网络之间传输数据等,并且在android中也经常用xml来布局,,接下来便来学习xml常用的东西 1.XML语法 xml语法分为: 1.1 文档声明 必须位于文档 ...
- spring源码学习之:xml标签扩展配置例子
在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的 时候,会显得非常笨拙.一般的做法会用原生态的方式去解析定义好 ...
- SharpGL学习笔记(十一) 光源创建的综合例子:光源参数可调节的测试场景
灯光的测试例子:光源参数可以调节的测试场景 先看一下测试场景和效果. 场景中可以切换视图, 以方便观察三维体和灯光的位置.环境光,漫射光,镜面反射光都可以在四种颜色间切换. 灯光位置和摄像机位置(Lo ...
- MyBatis学习(一)一个简单的例子
mybatis入门例子 开发步骤: 1.创建java工程 2.加入jar包(依赖包.驱动包) 3.创建sqlMapConfig.xml 4.创建数据库,数据库表USER_C,插入测试记录 5.创建PO ...
- log4j学习(一)最简单的例子
前言: 之前笔者一直是在System.out中打日志的,由于笔者大部分时候是编写在tomcat容器里运行的一些个小web应用,所以这么做似乎没什么问题:打印出来的日志都可以在tomcat自己的log目 ...
- 在myeclipse等IDE中添加本地的dtd与schema约束文件
*针对没有网络无法正确引入dtd而使用不了提示的问题 (配置完后重启IDE) window->perferences- > 搜索xml c 找到xml catalog 右边点击 a ...
随机推荐
- DevC++ 工程没有调试信息的解决办法
DevC++4.9.9.2中,按 F8 开始调试.提示信息为:工程没有调试信息,您想打开工程的调试选项并重新生成吗?选择是后,再按F8,仍旧是这个信息.什么原因呢? 按照帮助,Frequently A ...
- 数组中出现次数超过一半的数字 -java
数组中出现次数超过一半的数字 -java 方法一: 数组排序,然后中间值肯定是要查找的值. 排序最小的时间复杂度(快速排序)O(NlogN),加上遍历. 方法二: 使用散列表的方式,也就是统计每个数组 ...
- RHEL 6.3使用CentOS yum源 (redhat yum安装失败)
由于Redhat的yum在线更新是收费的,如果没有注册的话是不能使用的,即不能在线安装软件.所以yum install 命令每次都安装失败 下面介绍一种更改yum源的方式: 系统说明: 系统:Red ...
- source insight 下看不了utf-8中文字符
utf-8中文在source insight中显示为乱码,写了一个简单脚本,在linux下将代码转换为GBK格式,然后在source insight下正常查看. #!/bin/sh function ...
- git 之别名配置
在git操作中有很多命令我们自己可以起别名,以提高操作效率. 1. 配置方式 1)项目级别的配置,仅对当前项目生效(将写入到.git/config文件中) $ git config --glob ...
- #include <boost/function.hpp>
为atoi取别名fun,fun实质上是函数指针 #include <iostream> #include <boost/function.hpp> void main() { ...
- Redmine backlogs 安装
之前我们一直用IceScrum的免费版本来运作Scrum项目,用GitLab来做做Issue管理,但是出现了一些问题.GitLab的issue不够好用,不能满足我们的需求,同时issue没有办法放在S ...
- andengine游戏引擎总结基础篇
其他的游戏引擎知道的不是很对,不过相对于学java的童鞋们来说,那是个不错的选择啦,这个发动机咋样,google去吧.基础篇包括图片,字体,音效,数据读取,会了这点,就会做简单的小游戏啦 对于游戏 ...
- C#识别图片上的数字
通过Emgu实现对图片上的数字进行识别. 前期步骤: 1.下载Emgu安装文件,我的版本是2.4.2.1777.3.0版本则实现对中文的支持. 2.安装后需填写环境变量,环境变量Path值后加入Emg ...
- EXT属性
Extjs & Ext.Net 弹出整个浏览器对话框的方法 top.Ext.Msg.alert("值"); top.Ext.Msg.confirm("值" ...