zoukankan      html  css  js  c++  java
  • 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了):

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"       
    2. "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:UsersweidiaoDocumentsmy-java-libXML-DTDmybatis-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文件的改变而迅速改变。

  • 相关阅读:
    HDU 3572 Task Schedule(拆点+最大流dinic)
    POJ 1236 Network of Schools(Tarjan缩点)
    HDU 3605 Escape(状压+最大流)
    HDU 1166 敌兵布阵(分块)
    Leetcode 223 Rectangle Area
    Leetcode 219 Contains Duplicate II STL
    Leetcode 36 Valid Sudoku
    Leetcode 88 Merge Sorted Array STL
    Leetcode 160 Intersection of Two Linked Lists 单向链表
    Leetcode 111 Minimum Depth of Binary Tree 二叉树
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/5374824.html
Copyright © 2011-2022 走看看