XML基础语法

XML(Extensible Markup Language) 可扩展标记语言

主要功能:存储数据和传输数据
XML是与任何编程语言无关,第三方数据定义格式

XML标签没有被预定义
使用约束的XML文档设计具有自我描述性
XML是W3C的推荐标准。

XML文件分为如下几部分内容;

  • 文档声明
  • 元素
  • 属性
  • 注释
  • CDATA区、特殊字符
  • 处理指令(processing instruction)

文档声明

<?xml version="1.0" ?>
<?xml version="1.0" encoding="GB2312"?>
<?xml version="1.0" encoding="GB2312" standalone="yes"?>

standalone属性用于说明文档是否独立

  • xml中一个标签可以嵌套若干子标签。但是所有的标签必须合理嵌套,决不允许交叉嵌套。
  • 格式良好的xml文档必须有且仅有一个根标签,其他标签都是这个根标签的子孙标签。
  • xml标签中出现的所有空格和换行,xml解析程序都会当作标签内容进行处理。也就是说所有的空格换行都将被作为原始内容来处理。如下的两种书写方式其内容含义是不同的。

    XML元素命名规范

    元素可以理解为标签对

  • 区分大小写
  • 不能以数字开头
  • 不建议以下划线开头
  • 不能包含空格
  • 名称中间不能包含冒号

属性

  • 一个标签可以有多个属性,每个属性都有他自己的名称和取值<input type="text">
  • 属性值一定要用双引号或单引号引起来
  • 定义属性必须遵循与标签相同的命名规范
    注:在写xml中,标签属性所代表的信息也可以改成用子元素的形式来描述

注释

XML文件中的注释采用<!--注释-->

  • xml声明之前不能有注释
  • 注释不能嵌套

CDATA区域

该区域内保留不能被解析器所解析的内容—通常存放特殊代码

处理指令

处理指令简称PI,用来指挥解析引擎如何解析XML文档内容,来控制XML的显示样式。
处理指令必须以<?作为开头,以?>作为结尾,XML声明就是最为常见的一种处理指令。
<?xml-stylesheet type="text/css" href="1.css"?>即使用css文件样式显示xml文档内容。

注:如果真的希望使用xml显示数据,应该使用XSLT来控制样式

约束

使用约束 的XML 元素内容格式更加规范
通过程序生成xml和解析xml时,不使用约束,代码更加简单

XML常用约束技术

XML DTD

(Document Type Definition)全称 文档类型定义

DTD1
DTD2

DTD 为文档的每一个元素(不同名称的) 写一个<!ElEMENT 元素名称>
元素内部子元素<!ElEMENT 元素名称 (子元素1,子元素2)>
元素内部是文本<!ElEMENT 元素名称 (#PCDATA)>

DTD与XML文档关联 有三种方式

  • 外部DTD (如上文图片)
  • 公共DTD

公共DTD与外部DTD十分类似,当引用的文件在本地是,则为外部DTD,引用的文件在网络上时,则是公共DTD

  • 内部DTD
    语法

内部DTD

DTD语法细节

  • 元素(ELEMENT)定义

元素名称

元素内容

  • 属性(ATTLIST)定义
    语法:

    eg:<!ATTLIST payment type CDATA "check">

属性类型

  • 实体(ENTITY)定义
    对于xml数据内容重复,可以抽取实体
    语法:<!ENTITY 实体名称 "实体内容" >
    在xml中即可引用:一个和号 (&), 一个实体名称, 以及一个分号 (;)。

eg:

XML Schema

XML Schema用一套预先定义的xml元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式。XML Schema规定XML文档实例的结构和每个元素/属性的数据类型。
XML schema相对于DTD的明显好处是,XML Schema本身就是XML文档,不需要使用新的语法体系。

注:名称空间是W3C推荐标准提供的一种统一命名XML文档中的元素和属性的机制。使用名称空间可以明确标识和组合XML文档中来自不同标记词汇表的元素和属性,避免了名称之间的冲突。

  1. 编写数据xml文件
  2. 编写schema文件 .xsd
    • 引入 W3C 名称空间 xmlns=”http://www.w3.org/2001/XMLSchema
    • 每一个元素 对应 <element>
    • 区分复杂元素和简单元素 复杂元素:<complexType> 简单元素设置type
    • 为schema定义元素指定名称空间 URI (URI可以是任何路径,可以随意定义)
    • minOccurs=”0” maxOccurs=”unbounded” 指定元素的最小出现次数和最大出现次数
    • <sequence>有序元素
  3. 在xml实例数据文件中 ,引用自定义Schema

eg:
book.xsd

book.xml

elementFormDefault

当elementFormDefault=”qualified” 时,所有全局元素的子元素将被以缺省方式放到目标命名空间,但是全局元素或者类型将被放到目标命名空间;而当elementFormDefault=”unqualified” 时,所有全局元素的子元素将被以缺省方式放到无名命名空间。而属性的命名空间类似地由attributeFormDefault=”?”来指明。

  1. 在xml中,所有引用xsd的全局的元素都必须加上命名空间的前缀(例如xmlns:aa=http://www.example.org/classroom,全局元素都得加上aa)
  2. 非全局的元素当设置为qualified时,必须添加命名空间的前缀。
  3. 非全局的元素当设置为unqualified时,不必也不能添加前缀。
Posted in

发表评论

电子邮件地址不会被公开。 必填项已用*标注