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文件的改变而迅速改变。

  • 相关阅读:
    Python学习日志(三)
    Python学习日志(二)
    软件测试入门随笔——软件测试基础知识(八)
    软件测试入门随笔——软件测试基础知识(七)
    软件测试入门随笔——软件测试基础知识(六)
    fastcgi 性能初配 504 gateway time-out
    php 文件锁
    php sleep()的实时输出打印,清除ob缓冲区
    php用simplexml来操作xml
    PHP防SQL注入不要再用addslashes和mysql_real_escape_string
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/5374824.html
Copyright © 2011-2022 走看看