XML中的DOCTYPE属性
一.先来两个小例子
内部dtd将standalone设为真。
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE root [
<!ELEMENT root EMPTY>
]>
外部dtd将standalone设置为假
<?xml version="1.0" standalone="no"?>
<!DOCTYPE root SYSTEM "http://www.test.org/test.dtd">
二.概论
DTD声明始终以!DOCTYPE开头,空一格后跟着文档根元素的名称。
如果是内部DTD(私有DTD),则再空一格出现[],在中括号中是文档类型定义的内容.
而对于外部DTD,则又分为私有DTD与公共DTD,
私有DTD使用SYSTEM表示,接着是外部DTD的URL.
公共DTD则使用PUBLIC,接着是DTD公共名称,接着是DTD的URL.
三.外部DTD之公共DTD
公共DTD,DTD名称格式为"注册//组织//类型 标签//语言",
"注册"指示组织是否由国际标准化组织(ISO)注册,+表示是,-表示不是.
"组织"即组织名称,如:W3C; "类型"一般是DTD,
"标签"是指定公开文本描述,即对所引用的公开文本的唯一描述性名称,后面可附带版本号。
最后"语言"是DTD语言的ISO 639语言标识符,如:EN表示英文,ZH表示中文,在下面的地址有完整的ISO 639语言标识符列表http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt
举例:<!DOCTYPE root SYSTEM "http://www.test.org/test.dtd">
举例xhtml的doctype(xhtml是html的xml化,现在html中写法非常简单,不需要写doctype了):
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml/DTD/xhtml1-transitional.dtd">
表明根元素为html标签,为公共DTD,非注册,w3c组织,类型为DTD,标签为transitional,语言为英语。
四.外部DTD之私有DTD
<!DOCTYPE root SYSTEM "http://www.test.org/test.dtd" >
五.内部DTD
<!DOCTYPE rootElement [
declarations
]>
六.内部DTD和外部DTD可以混合使用
<!DOCTYPE rootElement SYSTEM "URIreference"[
declarations
]>
或者
<!DOCTYPE rootElement PUBLIC "PublicIdentifier" "URIreference"[
declarations
]>
七.在eclipse中使用DTD
Window>preference>XML>XML Catalog添加User Specified Entries,下面以mybatis的DTD文件为例说明。
打开mybatis.xml,在各个标签下尝试使用alt+/代码提示,可以看到可用标签。
将DOCTYPE标签删掉,会产生一个警告。此时会发现代码提示功能没了。
去此处下载dtd文件:http://mybatis.org/dtd/mybatis-3-config.dtd,保存为c:\mybatis.dtd
在eclipse中添加User Specified Entries,localtion就写:c:\mybatis.dtd,key写mybatis
在mybatis.xml中添加doctype:
<!DOCTYPE configuration PUBLIC "mybatis" "C:\Users\weidiao\Documents\my-java-lib\XML-DTD\mybatis-3-config.dtd">
这时又可以使用代码提示了。
这样做的缺点是,dtd文件位于本机,移植性较差;优点是dtd文件都在本机上,即使电脑从来没有连网,也可以正常使用。实际上,现在你断开网络,依旧可以自动提示,因为eclipse已经缓存好了。在这里:windows->preference->network connections->cache,好多的dtd文件有没有,一旦清空缓存,你就没有代码提示功能了!当然也不必多虑,现在有几个电脑不经常联网。
八.Log4j 2.0使用DTD文件
log4j 2.0的配置支持多种方式,json,xml,properties等。其中xml配置方式又分为严格版和简易版,严格版写起来比较麻烦。json版也没有代码提示功能。解压log4j2.0的core包,可以看见几个xsd文件和dtd文件,他们就是定义XML配置格式的。要想使用代码提示,也不用捣鼓这些xsd和dtd,直接使用log4j的严格版就可以。一旦导入log4j包,就已经可以使用了!
如下所示,通过package属性引入了命名空间。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" strict="true" name="XMLConfigTest"
packages="org.apache.logging.log4j.test">
<Properties>
<Property name="filename">target/test.log</Property>
</Properties>
<Filter type="ThresholdFilter" level="trace" />
<Appenders>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%m MDC%X%n" />
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY"
onMismatch="NEUTRAL" />
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY"
onMismatch="ACCEPT" />
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n" /><!--
class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT"
onMismatch="NEUTRAL" />
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT"
onMismatch="DENY" />
</Filters>
</Appender>
<Appender type="File" name="File" fileName="${filename}">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
<Appender type="List" name="List">
</Appender>
</Appenders>
<Loggers>
<Logger name="org.apache.logging.log4j.test1" level="debug"
additivity="false">
<Filter type="ThreadContextMapFilter">
<KeyValuePair key="test" value="123" />
</Filter>
<AppenderRef ref="STDOUT" />
</Logger>
<Logger name="org.apache.logging.log4j.test2" level="debug"
additivity="false">
<AppenderRef ref="File" />
</Logger>
<Root level="trace">
<AppenderRef ref="List" />
</Root>
</Loggers>
</Configuration>
九.XSD:DTD的终结者
对于这些细节问题,知道就可以了。然而知道100个,在应用的时候能灵活使用的只有1个,所以还是应该对这些知识点有清晰的印象,技不压身。
XSD是指XML结构定义 ( XML Schemas Definition )
XML Schema 是DTD的替代品。XML Schema语言也就是XSD。
XML Schema描述了XML文档的结构。可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其要求。文档设计者可以通过XML Schema指定一个XML文档所允许的结构和内容,并可据此检查一个XML文档是否是有效的。XML Schema本身是一个XML文档,它符合XML语法结构。可以用通用的XML解析器解析它。
一个XML Schema会定义:文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值。
XSD是DTD替代者的原因,一是据将来的条件可扩展,二是比DTD丰富和有用,三是用XML书写,四是支持数据类型,五是支持命名空间。
XSD文件的后缀名为.xsd。
Xml Schema的用途
1. 定义一个Xml文档中都有什么元素
2. 定义一个Xml文档中都会有什么属性
3. 定义某个节点的都有什么样的子节点,可以有多少个子节点,子节点出现的顺序
4. 定义元素或者属性的数据类型
5. 定义元素或者属性的默认值或者固定值
XML Schema的优点:
1) XML Schema基于XML,没有专门的语法
2) XML可以象其他XML文件一样解析和处理
3) XML Schema支持一系列的数据类型(int、float、Boolean、date等)
4) XML Schema提供可扩充的数据模型。
5) XML Schema支持综合命名空间
6) XML Schema支持属性组。
十.XSD小例子
在eclipse中新建java工程,在src目录下新建haha.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xsd:element name="animals">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="dog" type="xsd:string" maxOccurs="10" />
<xsd:element name="cat" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
然后在新建一个xml文件,命名空间引用haha.xsd
<?xml version="1.0" encoding="UTF-8" standalone='no'?> <animals xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="haha.xsd"> <dog>wyf</dog> <cat>weidiao</cat> </animals>
写完animal并引入命名空间之后,就这样一写‘<’就会看到可选标签:dog和cat。如果不能看到,那就把这两个文件关闭,重新打开一下就可以了,这是因为eclipse的代码自动提示功能不可能动态的随着xsd文件的改变而迅速改变。
XML中的DOCTYPE属性的更多相关文章
- jboss:在standalone.xml中设置系统属性(system-properties)
就象在.net的web应用中,可以在web.config中设置appSettings一样,jboss的standalone.xml中也可以由开发人员自行添加系统属性,用法如下: </extens ...
- Android自己定义控件而且使其能够在xml中自己定义属性
为什么要自己定义View android开发中自己定义View的优点是显而易见的.比方说以下的这个顶部导航,它被设计出如今应用的每一个界面,但每次的内容却不尽同样.我们不能在每一个layout资源中都 ...
- xml中该使用属性还是元素
XML 中没有规定哪些必须放在属性或者子元素,因此使用哪种方式都是可以实现的.这取决于个人的经验和喜好.在可以使用元素也可以使用属性的两选一的情况下,个人更倾向于使用子元素.主要理由如下: 1. 属性 ...
- 使用dom4j工具:获取xml中的标签属性(三)
package dom4j_read; import java.io.File; import java.util.List; import org.dom4j.Attribute; import o ...
- SqlMapConfig.xml中的setting属性设置
<settings cacheModelsEnabled="true" lazyLoadingEnabled="false" en ...
- SqlMapConfig.xml中的setting属性 Ibatis mybatis
<settingscacheModelsEnabled="true"lazyLoadingEnabled="false"enhancementEnable ...
- Struts2.xml中result type属性说明
在struts2配置XML里,result中type属性有以下几种: 1.dispatcher:服务器跳转到前台,后面跟着可以是JSP.htm等等前台页面,默认是这种. 2.redirect:客户端跳 ...
- 【XML】-- C#读取XML中元素和属性的值
Xml是扩展标记语言的简写,是一种开发的文本格式. 啰嗦几句儿:老师布置的一个小作业却让我的脑细胞死了一堆,难的不是代码,是n多嵌套的if.foreach,做完这个,我使劲儿想:我一女孩,没有更多女孩 ...
- struts2.xml 中result type属性说明
chain 用来处理Action链,被跳转的action中仍能获取上个页面的值,如request信息. com.opensymphony.xwork2.Acti ...
随机推荐
- Mac下开启FTPserver
开启命令 sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist 关闭命令 sudo -s launchctl unlo ...
- 猜拳游戏GuessGame源码
该游戏是一款比较不错的猜拳游戏GuessGame源码案例,GuessGame——猜拳游戏,这也是我自己的第一款休闲类的游戏案例,游戏实现也比较简单的,希望这个能够帮大家的学习和使用,更多安卓源码尽在源 ...
- linux线程同步(1)-互斥量
一.概述 互斥量是线程同步的一种机制,用来保护多线程的共享资源.同一时刻,只允许一个线程对临界区进行 ...
- Linux 下从头再走 GTK+-3.0 (五)
实践中表明,纯粹利用 gtk 函数来创建 UI 是很繁琐的事,需要编写很多代码.怎样才能快速统一的建立 UI 布局呢? 可喜的是 GTK 提供了一个 GtkBuilder 用于快速创建界面.它读取一个 ...
- html特殊字符的html,js,css写法汇总
⇠ 箭头类 符号 UNICODE 符号 UNICODE HTML JS CSS HTML JS CSS ⇠ ⇠ \u21E0 \21E0 ⇢ ⇢ \u21E2 \ ...
- vi/vim实用命令
查找 n是下一个,N是上一个 撤销和重做 u:撤销上一步的操作 ctrl+r:恢复上一步被撤销的操作 替换 :1,$ s/aaa/bbb/g
- [转]ASP.NET 成员资格 Part.1(API)
本文转自:http://www.cnblogs.com/SkySoot/archive/2013/04/08/3008418.html 表单验证解决了 ASP.NET 应用程序页面验证的问题,但另一方 ...
- Java 三大特性——封装、继承、多态
一.封装 封装,实际就是把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用. 概念:在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节 ...
- C#语言数据总结
整数类型 sbyte -128~127之间 byte 0~255 short(Int16) -32768~32768 ushort(UInt16) 0~65535 Int (Int32) ...
- HDU2929 Bigger is Better[DP 打印方案 !]
Bigger is Better Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...