xml再认识

虽然已经用了这么多年的xml了,因为很简单,所以从来没有系统学习过,有一些关键点不需要知道也可以使用,
因此一直没有重视,好吧,前面的是废话。重点是求知欲不够强。面试也基本不会问这个,所以就逃避了,但内心是拒绝的。
本文不会从0开始认识xml,而是在使用了n年后再完整学习后发现的知识盲区。

学习地址:

  1. xml-runoob
  2. xml-w3c

下面是再学习到的知识点:

  1. xml必须有一个根结点,结构是树;
  2. 大小写敏感,标签必须关闭
  3. 特殊实体引用(特殊符号): >(&gt;),<(&lt;),&(&amp;),'(&apos;),"(&quot;)
  4. 对扩展开放: 就是增加标签不影响解析
  5. 什么时候使用属性: 属性不是数据,而是元数据,可以对比HTML标签的属性

上面的是只关乎XML的知识,下面的涉及更广,更难一点:

首先明确一点: 形式良好和合法。
拥有正确语法的 XML 被称为”形式良好”的 XML。
通过 DTD 验证的XML是”合法”的 XML。

  1. 什么是DTD?
    DTD(Document Type Define),作用是定义 XML 文档的合法构建模块,可以验证xml是否合法。具体参考DTD教程
    DTD语法很简单,表示2个东西: 有哪些标签(ELEMENT,ATTLIST,ENTITY),标签的类型(#PCDATA, CDATA等)和结构:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version="1.0"?>
    <!-- Edited by XMLSpy® -->
    <!DOCTYPE note [
    <!ELEMENT note (to,from,heading,body)>
    <!ELEMENT to (#PCDATA)>
    <!ELEMENT from (#PCDATA)>
    <!ELEMENT heading (#PCDATA)>
    <!ELEMENT body (#PCDATA)>
    ]>
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
    </note>
  2. 当然,验证合法性不只一种,Schema被开发出来代替DTD:
  3. Schema: 描述了XML文档的结构,比DTD更强大,所以复杂一点。具体教程
  4. 我只希望花5分钟学习schema,没啥,因为我时间宝贵,那么我只会用一个例子+几句话。
    1. schema基本上已经取代DTD,2001年发布, 文件格式: *.xsd
    2. schema是由XML来书写的,好处很多, 比DTD强大的地方就在于丰富的数据类型(boolean,string,decimal,integer,date,time)
    3. 下面是如何引用schema:
    1. 声明当前域名空间: xmlns="http://java.sun.com/xml/ns/javaee"
    2. 声明XML Schema 命名空间实例: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. 使用schemaLocation引用xsd文件: xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    4. 这个例子就是 web.xml:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      <?xml version="1.0" encoding="UTF-8"?>
      <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://java.sun.com/xml/ns/javaee"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      version="3.0">
      <servlet>
      <servlet-name>JimoMvc</servlet-name>
      <servlet-class>com.jimo.mvc.servlet.DispatcherServlet</servlet-class>
      <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>application.properties</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
      </servlet>

      <servlet-mapping>
      <servlet-name>JimoMvc</servlet-name>
      <url-pattern>/*</url-pattern>
      </servlet-mapping>
      </web-app>

当然,现在我心里不慌了,后面还有一些更高级的东西,直到需要的时候再研究把,为啥? 因为我时间宝贵呀!