xml dtd schema

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

:)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容

  • 1. XML简介 以下内容来自于http://www.w3school.com.cn/xml 基本知识 XML 和...
    WebSSO阅读 1,704评论 1 7
  • Xml Schema的用途 1. 定义一个Xml文档中都有什么元素 2. 定义一个Xml文档中都会有什么属性 ...
    _东邪_阅读 2,195评论 2 4
  • Schema与DTD XML Schema符合XML语法结构。 DOM、SAX等XML API很容易解析出XML ...
    扒块腹肌阅读 2,065评论 0 4
  • xml (extensible markup language)1.xml 是可扩展标记语言2.xml是一种标记语...
    帅哥_刷哥阅读 610评论 0 1
  • 简单类型(simpleType) 1,简单元素:指只能包含文本内容,不能够包含子元素,也没有属性的元素。 2,属性...
    持续进步者阅读 887评论 0 2