xml dtd schema

作者: 大批 | 来源:发表于2017-01-02 11:44 被阅读55次

    xml

    xml就是一个标记语言,主要用途就是数据传输和配置文件。


    eg:

    <?xml version="1.0" encoding="utf-8"?>
    <home name="dpdj">
      <mother>mm</mother>
      <father>bb</father>
      <son>dp</son>
    </home>
    
    • xml总是以<?xml version=" " encoding=" "?>开始的
      • version 代表的是这个xml文件使用的xml的版本,目前xml的版本有1.0,1.1版本,但是使用的比较广泛的是1.0版本
      • encoding 表示的是这个xml文件的编码形式
    • <home> ... </home>这就是这个xml描述的信息了,具体是什么含义就要看具体的业务需求了
      • xml中仅仅只能有一个根元素,例子中的根元素是home
      • <home name="dpdj"> 这里的name标识的是属性
      • 对于没有子元素的节点,我们称为简单节点,对于包含子元素的节点称为复杂节点(后面会用到

    dtd

    DTD(文档类型定义)的作用就是定义xml文档的合法构建模块。其实就是规定了xml应该有哪些节点,节点有哪些属性。(dtd现在用的不多,大多数都被schema取代了,schema的功能和dtd类似,但是可以描述更多的信息


    eg:

      <!ELEMENT home (mother,father,son)>
      <!ELEMENT mother (#PCDATA)>
      <!ELEMENT father (#PCDATA)>
      <!ELEMENT son (#PCDATA)>
      <!ATTLIST home name CDATA #REQUIRED>
    
    • 上面的dtd描述了一个xml,里面包含的元素有home,mother,father,son。home元素包含子元素 mother,father,son。home 元素还有一个属性 name 类型是字符串,必须填写。
    • dtd定义元素的语法是: <!ELEMENT 元素名 类别> 或者 <!ELEMENT 元素名 (元素内容)>
      • <!ELEMENT 元素名 类别>
        • 元素名就是你需要在xml写的名字,比如 home ,son
        • 类别 就是元素里面输入内容的类型,可选的类型有 (#CPDATA),EMPTY,ANY
          • (#CPDATA) 指的就是字符串,比如:<mother>mm</mother>
          • EMPTY 指的就是不能有内容, 比如 :
          • ANY 可以包含任何可以解析的数据
      • <!ELEMENT 元素名 (元素内容)>
        • 这个就是表示带有子元素的元素,比如 home带有子元素,<!ELEMENT home (mother,father,son)>
        • 指定子元素的时候还可以指定子元素出现的次数
          • <!ELEMENT home (son*)> 表示son出现0次或者多次
          • <!ELEMENT home (son?)> 表示son出现0次或者1次
          • <!ELEMENT home (son+)> 表示son至少出现一次
    • 对应元素使用到的属性定义,使用到的是<!ATTLIST 元素名 属性名 属性类型 默认值>的方式来定义的
      • 元素名和属性名就没什么好说的了。关于属性类型和默认值
        • 属性类型
          • CDATA 字符串类型
          • (value1|value2|value3..) 枚举列表中的一个
          • ID 唯一的id
          • IDREF 另外一个元素的id
          • IDREFS 其他id的列表
          • NMTOKEN 合法的 XML 名称
          • 还有一些属性类型具体的可以查看 http://www.w3school.com.cn/
      • 默认值
        • #REQUIRED 属性值是必需的
        • #IMPLIED 属性不是必需的
        • #FIXED value 属性值是固定的 比如:<!ATTLIST home name CDATA #FIXED "dpdj">

    怎么在xml中使用dtd

    eg:

      <?xml version="1.0" encoding="utf-8"?>
      //第一种方式   直接在xml里面定义dtd描述   
       <!DOCTYPE home [
         <!ELEMENT home (mother,father,son)>
         <!ELEMENT mother (#PCDATA)>
         <!ELEMENT father (#PCDATA)>
         <!ELEMENT son (#PCDATA)>
         <!ATTLIST home name CDATA #REQUIRED>
       ]>
      //第二种方式    引用本地的dtd文件  这里的home指的是 跟元素
      <!DOCTYPE home SYSTEM "dtd文件">
      //第三种方式    引用网络上的dtd定义
      <!DOCTYPE home PUBLIC "dtdname" "url">
      <home name="">
        ....
      </home>
    

    note:dtd文件仅仅是定义了xml的结构,并不进行语法的检查


    schema

    这个和dtd类似的,基于xml的dtd的替代者
    eg:

      <?xml version="1.0"?>
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                 targetNamespace="http://www.suse.edu.cn"
                 xmlns="http://www.suse.edu.cn"
                 elementFormDefault="qualified">
        <xs:element name="home">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="mother" type="xs:string"/>
              <xs:element name="father" type="xs:string"/>
              <xs:element name="son" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="name" type="xs:string" use="required"/>
          </xs:complexType>
        </xs:element>
      </xs:schema>
    

    这里需要提一下,xml的规范是由w3这个组织制定的

    • 每个schema都是以<schema>节点开始。
      •   <?xml version="1.0"?>
          <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.suse.edu.cn"
            xmlns="http://www.suse.edu.cn"
            elementFormDefault="qualified">
              ...
              ...
          </xs:schema>
        
        • 这里 xmlns:xs="http://www.w3.org/2001/XMLSchema" 表示schema中用到的元素和数据类型都是来自这个命名空间下面,同时还规定了来自这个命名空间的元素和数据类型应该使用前缀xs:
        • targetNamespace="http://www.suse.edu.cn" 表示schema定义的元素来自该命名空间
        • xmlns="http://www.suse.edu.cn" 设置了默认的命名空间
        • **elementFormDefault="qualified" ** 指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定
        • 在xml中使用的时候是
            <?xml version="1.0"?>
            <home xmlns="http://www.suse.edu.cn"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://www.suse.edu.cn home.xsd">
              <mother>mm</mother>
              <father>bb</father>
              <son>dp</son>
            </home>
          
    • 简单元素(仅仅是包含文本的元素)
      • <xs:element name="名字" type="类型"/>

        • 名字就是元素的名字
        • 类型就是包含内容的类型(Schema有很多类型下面给出常见的)
          • xs:string
          • xs:decimal
          • xs:integer
          • xs:boolean
          • xs:date
          • xs:time
      • 简单元素的默认值和固定值<xs:element name="home" type="xs:string" default="j" fixed="j"/>

      • 简单元素的属性值<xs:attribute name="name" type="xs:string" use="required"/>

    • 复合元素 (空元素 包含其他元素)
      • 空元素
          <xs:element name="son">
              <xs:complexContent>
                 <xs:attribute name="name" type="xs:string"/>
             </xs:complexType>
          </xs:element>
        
      • 包含其他元素
          <xs:element name="home">
            <xs:complexType>
              <xs:element name="mother" type="xs:string"/>
              <xs:element name="father" type="xs:string"/>
              <xs:element name="son" type="xs:string"/>
            </xs:complexType>
          </xs:element>
        

    关于Schema其实还有很多其他的东西,有兴趣的可以 to http://www.w3school.com.cn/


    Nothing is certain in this life. The only thing i know for sure is that. I love you and my life. That is the only thing i know. have a good day

    :)

    相关文章

      网友评论

        本文标题:xml dtd schema

        本文链接:https://www.haomeiwen.com/subject/fqxivttx.html