zoukankan      html  css  js  c++  java
  • XML基础-DTD/Schema

      XML文件开发中几乎天天用,但很少去了解它的各种定义与原理,一篇博客虽然不能做到完全通透,但至少要让自己遇到bug不再慌乱。

      XML指可扩展语言,全称eXtensible MarkupLanguage,其宗旨是为了描述数据,而不是像HTML那样显示数据。目前遵循的是W3C组织于2000年发布的XML1.0规范。使用场景主要为描述数据和充当配置文件。

    • 基本语法

      文档声明:告知解析器这是一个XML文件,必须出现在文档第一行。最简单也是最常见的即:

    <?xml version="1.0" encoding="UTF-8"?>

    其实不用encoding也可以,但为了编码统一,此处使用UTF-8

    • 元素(标签)
    1. XML语法严格,不能够省略结束标签
    2. XML中只能有一个根标签
    3. XML中不会忽略主体内容出现的空格与换行
    4. 元素(标签)的名称可以包含字母、数字、减号、下划线和英文句点,但必须遵守下面的一些规范:

        严格区分大小写/只能以字母或者下划线开头/名称字符之间不能有空格/名称字符之间不能使用冒号

    • 元素的属性

      一定要以单引号或者双引号引起来/元素中的属性不允许重复

    • 注释

      <! >

      但不允许出现在声明之前

    • CDATA

    character data

    <![CDATA[内容]]>

    其中的内容都会被处理为字符串

    • 特殊字符的替代字符

    &                    &amp

    <                  &lt

    >                  &gt

    "                    &quot

    '                     &apos

    ==============================>

    • 约束

        一个XML文件中的约束,主要是元素的定义,分为两种DTD(以.dtd结尾的文件,必须以UTF-8保存)和Schema(以.xsd结尾的文件)

    • DTD

      如果.dtd文件在XML外部(必须以UTF-8保存),如何导入呢?如果在本地,那么:

    <!DOCTYPE 根元素 SYSTEM "dtd文件的路径">

      如果该文件在网络上,那么:

    <!DOCTYPE 根元素 PUBLIC "dtd名称" "DTD文档的URL链接地址">

      也可以写在内部,对编码没有要求,此处仅了解。

      来个简单的实例:

    book.dtd

    <!ELEMENT 书架 (书+)>
    <!ELEMENT 书 (书名,作者,售价)>              
    <!ELEMENT 书名 (#PCDATA)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 售价 (#PCDATA)>
    <!ATTLIST 书
        ISBN ID #REQUIRED
        COMMENT CDATA #IMPLIED 
        出版社 CDATA "指令汇公司"
        >
    <!ENTITY copyright "指令汇公司">

    book.xml

    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE 书架 SYSTEM "book.dtd">
    <书架>
        <书 ISBN="QWDERF01" 出版社="指令汇公司" COMMENT="a+">
            <书名>三体</书名>
            <作者>韩寒</作者>
            <售价>13</售价>
        </书>
    </书架>

    当然,这里面有很多细节,但因此处最终目的只是了解xml解析的用法,所以略过,如果要了解,可以查看官方文档。

    ==============================>

    • Schema约束

      .xsd自身就是一个xml文件,根节点为<Schema/>,通常需要把这个文件中声明的元素绑定到一个URI地址上,告诉编辑器,这个xml文档中编写的元素被谁约束,来自哪里。DTD并不能很细致地约束xml,于是出现了Schema,后者大有取代之势。

      在XML Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间用一个唯一的URI(Uniform Resource Identifier,统一资源标识符)表示,用来区分字符相同但含义不同的标签。 例如<table/>到底表示"桌子"还是"表格",不同的命名空间对其的解释不同,保证自己需要的含义与命名空间所定义的含义一致就OK。另外,它的targetNamespace作用就是让别的xml引用时所标记的名称。

    注意:名称空间的名字语法容易让人混淆,尽管以 http:// 开始,那个 URL 并不指向一个包含模式定义的文件。事实上,这个 URL根本没有指向任何文件,只是一个分配的名字。

      声明方式有两种,默认

    xmlns="http://www.w3.org/2001/XMLSchema"

      显示:xmlns:别名

    xmlns:tns="http://www.example.org/books"

      给出一份简易schema:books.xsd

    <?xml version="1.0" encoding="UTF-8"?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/books"
        xmlns:tns="http://www.example.org/books" elementFormDefault="qualified">
        <element name="bookstore"></element>
    </schema>

      这样的文档我们如何在xml文件中引用呢?

      首先是显示使用根元素,通过targetNamespace指向这个文档的命名空间,而后固定格式实例化,最后以xsi:localtion标记"名称1 位置1 名称2 位置2 ..."

    <?xml version="1.0" encoding="UTF-8"?>
    <bookstore xmlns="http://www.example.org/books" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.example.org/books books.xsd"></bookstore>

      xsi是默认值,如果还有自定义值,那么自定义空间所定义的标签,使用时需<别名:标签名/>法使用,举个例子:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:p="http://www.springframework.org/schema/p" xmlns="http://www.springframework.org/schema/beans"
        xmlns:c="http://www.springframework.org/schema/c" xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:cache="http://www.springframework.org/schema/cache"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/cache
            http://www.springframework.org/schema/cache/spring-cache.xsd"
        default-lazy-init="true">
    
        <description>Spring公共配置</description>
    
        <!-- 该 BeanPostProcessor 将自动对标注 @Autowired 的 Bean 进行注入 -->
        <context:annotation-config />
    
        <!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 -->
        <context:component-scan base-package="com.changjiang.test.jdbcTemplate" />

      这里context即为自定义的名称,所以使用标签是用到了<context:annotation-config/>。

      本篇就介绍到这里,实际上,这只是为xml解析和平时开发读懂xml文档所做的准备,了解即可。

  • 相关阅读:
    PHP构造方法和析构函数
    数组的排序算法
    Swift---- 可选值类型(Optionals) 、 断言(Assertion) 、 集合 、 函数
    Swift----方法 、 下标 、 继承 、 初始化 、 析构方法 、 可选链
    Swift----函数 、 闭包 、 枚举 、 类和结构体 、 属性
    Swift-----类型转换 、 嵌套类型 、 扩展 、 协议 、 访问控制
    程序员创业-行业分析之区分易混淆的基本概念
    MSSQl分布式查询(转)
    iOS8中添加的extensions总结(一)——今日扩展
    Python Function Note
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/5854480.html
Copyright © 2011-2022 走看看