主流数据存储方式Xml和Json

XML篇

以下内容总结自w3school

  1. 什么是xml?

    • XML 指可扩展标记语言Extensible MarkuP Language,被设计用来传输和存储数据。
    • XML 是独立于软件和硬件的信息传输工具。
  2. 与html的区别?

    • XML 被设计为传输和存储数据,其焦点是数据的内容
    • HTML 被设计用来显示数据,其焦点是数据的外观。
    • HTML 旨在显示信息,而 XML 旨在传输信息。
    • XML是没有预定于标签的,需要用户自己来定义。而不像HTML那样,存在预定义的标签,如<p><h1><table>等。
  3. 一个简单xml实例

    <?xml version="1.0" encoding="UTF-8"?>
    <bookstore>
        <book category="CHILDREN">
           <title lang="en">Harry Potter</title> 
           <author>J K. Rowling</author> 
           <year>2005</year> 
           <price>29.99</price> 
        </book>
        <book>
            ....
        </book>
    </bookstore>
    • 第一行定义了 XML 的版本 (1.0) 和所使用的编码UTF-8
    • 第二行是根结点开始
    • 中间部分是子元素,其中<book></book>一个子节点,中间有4个子节点,<title></title>结点包含属性lang
    • 最后一行是根结点结束
  4. xml一些重要的语法规则

    • 所有 XML 元素都须有关闭标签,也就是成对出现。
    • XML 标签大小写敏感
    • XML 文档必须有根元素
    • XML 的属性值须加引号,单引号或双引号。
    • 在XML当中的一个特殊字符的使用
    替换字符 原字符 说明
    &lt; < 小于
    &gt; > 大于
    &amp; &
    &apos; 单引号
    &quot; 双引号
  5. xml的命名规则

    • 名称可以含字母数字以及其他的字符。不能以数字或者标点符号开始。不能以字符 “xml”(或者 XML、Xml)开始。名称不能包含空格。

    • 最佳实践:

      • 采用单词和下划线结合的方式,但尽量保持名称的剪短。
      • 不要采用"-",":", "."等字符。
      • 如果xml是和数据库表对应的,可采用已有的字段名称
  6. xml属性和元素的使用

    • 示例

      <!--示例1-->
        <note date="08/08/2008">
           <to>George</to>
           <from>John</from>
           <heading>Reminder</heading>
           <body>Don't forget the meeting!</body>
         </note> 
         <!--示例2-->
         <note id="1">
           <date>
             <day>08</day>
             <month>08</month>
             <year>2008</year>
           </date>
           <to>George</to>
              ...
         </note>
    • 分析

      • 示例1中,date属于数据本身,不宜作为属性来表示。date=”08/08/2008”,不便于应用程序的访问和处理。需要分隔该字符串,来获得年月日的信息。
      • 示例2中,date属于元素,其中又包含了年月日三个子元素。将时间数据分开表示,应用程序可以任意获取年月日中的数值。而且如果我要精确到时间,只要在添加一个<time></time>。因此,扩展性非常好,不影响程序的访问。而对于属性id来说,是作为此元素的标识,相当于元数据,不是数据本身,可以考虑使用。
    • 最佳实践
      元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素

  7. xml验证

    • 拥有正确语法的 XML 被称为“形式良好”的 XML。
    • 验证方式

      • XML DTD
      • XML Schema:W3C 支持一种基于 XML 的 DTD 代替者。
    • XML DTD

      • 定义:DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块,它使用一系列的合法元素来定义文档结构。
      • 使用方式:

        • 可以在xml中直接定义

          <!DOCTYPE 根元素 [元素声明]>
          
                   <?xml version="1.0"?>
          
          <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
          
          <!--PCDATA 的意思是被解析的字符数据(parsed character data,-->
          <!--可把字符数据想象为 XML 元素的开始标签与结束标签间的文本-->
          <!--文本中的标签会被当作标记来处理,而实体会被展开-->
          
          <!-- CDATA 的意思是字符数据(character data)-->
          <!--是不会被解析器解析的文本-->
          <!--本中的标签不会被当作标记来对待,其中的实体也不会被展开-->
          
          <note>
              <to>George</to>
              <from>John</from>
              <heading>Reminder</heading>
              <body>Don't forget the meeting!</body>
          </note>
          
                   <!--!DOCTYPE note (第二行)定义此文档是 note 类型的文档。 -->
                   <!--!ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"-->
                   <!--!ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型-->
                   <!--from,body同上to-->
        • 通过外部引入(常用)

          <!DOCTYPE 根元素 SYstem "文件名">
                <?xml version="1.0"?>
          <!DOCTYPE note SYstem "note.dtd">
          <note>
              <to>George</to>
              <from>John</from>
              <heading>Reminder</heading>
              <body>Don't forget the meeting!</body>
          </note>
          
          <!--这是包含 DTD 的 "note.dtd" 文件 -->
          <!ELEMENT note (to,from,heading,body)>
          <!ELEMENT to (#PCDATA)>
          <!ELEMENT from (#PCDATA)>
          <!ELEMENT heading (#PCDATA)>
          <!ELEMENT body (#PCDATA)>
      • 为什么使用DTD?

        • 独立的团体可一致地使用某个标准的 DTD 来交换数据。就是可以保证大家使用的该xml标签结构是一致的。
        • DTD 来验证从外部接收到的数据。 采用DTD的话,来保证当前锁处理的xm确实是大家所统一使用的,如果出现其他异常标签在里面,验证不通过。
      • 实际应用

        • struts2的配置文件
          <?xml version="1.0" encoding="UTF-8" ?>
              <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
          
              <!--根元素为struts-->
              <struts>
                 <!--内部的标签都在struts-2.3dtd中定义-->
                 ...
              </struts>
           ``` 
          
               + mybaits3的mapper配置文件
          ```xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
          
          <!--根元素为mapper-->
          <mapper namespace="*Dao">
              <resultMap type="" id="">
                  ...
              </resultMap>
          </mapper>
    • XML Schema

      • 定义:基于 XML 的 DTD 替代者,描述 XML 文档的结构。XML Schema 语言也称作 XML Schema 定义(XML Schema DeFinition,XSD),比DTD更强大。

        • 定义可出现在文档中的元素属性
        • 定义哪个元素是子元素、子元素的次序和数目
        • 定义元素是否为空,或者是否可包含文本
        • 定义元素和属性数据类型
        • 定义元素和属性认值以及固定值
      • xml schema的优势

        • 可针对未来的需求进行扩展,更完善,功能更强大
        • 基于 XML 编写,支持数据类型命名空间
        • DTD的不足:通过DTD的验证,xml是形式良好的。但仅仅形式良好,还不能够保证xml不出错误
      • xml schema的使用

        • xml DTD章节中,我们给出了DTD的定义过程,根据同样的xml例子,给出schema的定义过程,下面文件的为note.xsd

          <?xml version="1.0"?>
          <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified">
          
              <xs:element name="note">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="to" type="xs:string"/>
                      <xs:element name="from" type="xs:string"/>
                      <xs:element name="heading" type="xs:string"/>
                      <xs:element name="body" type="xs:string"/>
                    </xs:sequence>
                  </xs:complexType>
              </xs:element>
          </xs:schema>
        • 分析上诉schema的定义

          • <schema> 元素是每一个 XML Schema 的根元素。
          • xmlns:xs="http://www.w3.org/2001/XMLSchema"显示 schema 中用到的元素和数据类型来自该命名空间,同时它还规定了来自该命名空间的元素和数据类型应该使用前缀 xs:
          • targetNamespace="http://www.w3school.com.cn"显示被此 schema 定义的元素 (note,to,body) 来自该命名空间。
          • xmlns="http://www.w3school.com.cn",指出认的命名空间,在xml中引入时要使用的
          • elementFormDefault="qualified" ,指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
          • 定义简易元素

            • <xs:element name="xxx" type="yyy"/>,如上诉的<xs:element name="to" type="xs:string"/>。此处 xxx 指元素的名称,yyy 指元素的数据类型。

            • XML Schema中的常用类型有:xs:string、xs:decimal、xs:integer、xs:boolean、xs:date、xs:time。如果element是一个复杂类型,则如上诉<xs:element name="note"><xs:complexType>...</xs:complexType></xs:element>

            • 简易元素的认值或固定值定义

              <xs:element name="color" type="xs:string" default="red"/>
               <xs:element name="color" type="xs:string" fixed="red"/>
          • 定义属性

            • 上诉的简易元素其实就是对应xml中的结点,属性就是结点里面的属性。定义的属性,可以用在同一命名空间下的任意元素中。
            • <xs:attribute name="xxx" type="yyy"/>,通过该方式进行定义,其他类似于<xs:element/>
            • 属性的赋值

              <!--认值-->
               <xs:attribute name="lang" type="xs:string" default="EN"/>
               <!--固定值-->
               <xs:attribute name="lang" type="xs:string" fixed="EN"/>
               <!--可选的和必需的属性-->
               <xs:attribute name="lang" type="xs:string" use="required"/>
        • 在xml中使用xml schema
          “`xml

JSON篇

  1. 参考:http://json.org/json-zh.html

  2. JSON的主流解析框架

    1. fastjson: https://github.com/alibaba/fastjson (被认为序列化和反序列化的性能都比其他框架好)
    2. 待完善….

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念