【0】README

0.0)本文文字描述转自 core java volume 2 , 旨在理解 XML——XML Schema 的基础知识 ;(本文不涉及源代码, 很遗憾,以后会补充)


【1】XML Schema 相关

1.0)为什么引入XML Schema? 如果要指定文档结构,可以提供一个文档类型定义(DTD)或一个 XML Schema定义;DTD 或 schema 包含了用于解释文档应该如何构成的规则, 这些规则指定了每个元素的合法子元素和和属性; (干货——为什么引入XML Schema)

1.1)如果要在文档中引用 Schema 文件, 需要在 根元素中添加属性, 例如:

<?xml version="1.0"?>
<configuration xmlns:xsi="http://www.w2.org/2001.XMLSchema-instance"xsi:noNamespaceSchemaLocation="config.xsd">
</configuration>
  • 这个声明是在说: Schema文件 config.xsd 会被用来验证文档;(而 前缀xsi 是一个命名空间别名——namespace alias); (干货——前缀xsi 是一个命名空间别名)

1.2)Schema使用命名空间定义了每个元素的类型。类型可以是简单类型,即有格式限制的字符串或复杂类型。 (干货——Schema使用命名空间定义了每个元素的类型。)

  • 1.2.1)一些简单类型已经被内建到了 XML Schema 内,包括:
xsd : string
xsd : int
xsd : boolean

Attention)

  • A1)我们用前置 xsd: 来表示XSL Schema定义的命名空间, 一些作者用 xs: 代替;
  • A2)可以自定义自己的简单类型:
<xsd: simpleType name="StyleType"><xsd: restriction base="xsd:string"><xsd: enumeration value="PLAIN"><xsd: enumeration value="BOLD"><xsd: enumeration value="ITALIC"><xsd: enumeration value="BOLD_ITALIC"></xsd: restriction>
</xsd: simpleType>
  • A2.1)当定义元素时,要指定它的类型:
<xsd: element name="name" type="xsd:string" />
<xsd: element name="size" type="xsd:int" />
<xsd: element name="style" type="StyleType" />
  • A2.2)类型约束了元素的内容, 下面 的元素个数被验证为正确格式:
<size>10</size>
<style>PLAIN</style>
  • A2.3)但是下面的元素会被解析器拒绝:
<size>default</size>
<style>SLANTED</style>
  • A2.4)你可以把类型组合成复杂类型, 如:
<xsd:complexType name="FontType"><xsd:sequence><xsd:element ref="name"/><xsd:element ref="size"/><xsd:element ref="style"/></xsd:sequence>
</xsd:complexType>
  • A2.5)嵌套定义:在上面的类型定义中, 我们用ref 属性来引用在 Schema 中位于别处的定义。也可以嵌套定义, 如这样:
<xsd:complexType name="FontType"><xsd:sequence>       <xsd: element name="name" type="xsd:string" /><xsd: element name="size" type="xsd:int" /><xsd: element name="style" type="StyleType" /><xsd: simpleType> // 而不是<xsd: simpleType name="StyleType">, 请注意这叫匿名定义;<xsd: restriction base="xsd:string"><xsd: enumeration value="PLAIN"><xsd: enumeration value="BOLD"><xsd: enumeration value="ITALIC"><xsd: enumeration value="BOLD_ITALIC"></xsd: restriction></xsd: simpleType></xsd:sequence>
</xsd:complexType>
  • A2.6)xsd: choice 和 | 操作符等价, 如: (干货——xsd:choice 和 | 操作符等价)
<xsd:complexType name="contactinfo"><xsd:choice><xsd:element ref="email"><xsd:element ref="phone"></xsd:choice>
</xsd:complexType>
同:
<xsd:complexType name="contactinfo"><xsd:element ref="email | phone">
</xsd:complexType>
  • A2.7)如果允许使用重复元素,使用 minoccurs 和 maxoccurs 属性:

  • A2.7.1)看个荔枝:与 DTD类型 item* 的等价形式如下:
    <xsd:element name="item" type="..." minoccurs="0" maxoccurs="unbounded">

  • A2.7.2)如果要指定属性, 可以吧 xsd:attribute 元素添加到 complexType定义中去:

<xsd:element name=szie><xsd:complexType>...<xsd:attribute name="unit" type="xsd:string" use = "optional" default="cm"/></xsd:complexType>
</xsd:element>
  • A2.8)这是DTD 声明等价 的形式:
    <!ATTLIST size unit CDATA #IMPLIED "cm">

  • A2.9) 可以把 Schema 的元素和类型定义封装在 xsd:schema 元素中:

<xsd: schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
</xsd: schema>
  • A2.10)解析带有 Schema 的XML 文件和解析带有 DTD 的文件相似, 但有3点差别(Difference): (干货—— Schema 的XML 文件和带有 DTD 的XML文件的差别有3)

    • D1)必须打开对命名空间的支持,即使在 XML 文件里你不使用它;
      factory.setNamespaceAware(true);
    • D2)必须通过如下 “魔咒”来准备好处理 Schema 的工厂:
      final String JAXP_SCHEMA_LANGUAGE="http://java.sun.com/xml/jaxp/properties/schemaLanguage";
      final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
      factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA );
    • D3) 解析器不会丢弃元素中的空白字符, 这是个很老火的问题;

XML——XML Schema相关推荐

  1. XML:DTD:Schema

    1.从xml的文档结构最高可抽象到纵横两个方面:节点 和 属性 <topnode name="top"> <midtop name="mid" ...

  2. XML:Schema、三种编写Schema的方式

    针对DTD文件的不足之处:(不能出现相同名称的元素,DTD的语法不是xml的语法)出现的Schema,需要使用什么命名空间的东西就先引入,使用xmlns,后面加后缀,不加就不用后缀 定义Schema文 ...

  3. XML DTD Schema 学习-Schema 介绍

    Schema 介绍: 有人会问,DTD和Schema都是对XML文档的一种约束,为什么不就选其中之一,而又有Sche ma呢.因为DTD安全度太低了,也就是说它的约束定义能力不足,无法对XML实例文档 ...

  4. 【XML和Schema】Schema简介+简单定义和创建+连接到XML使用

    Schema的简单介绍 和DTD一样,是对XML的约束.不一样的是,Schema是基于XML语言规范的,并且相比于DTD,它包括了所有DTD能实现的功能,而且大大扩充了数据类型,扩展性强.可对整个XM ...

  5. Android之CheckBox复选框控件使用inelayout.xml Xml代码

    linelayout.xml Xml代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  6. XML——XML概述

    [0]README 0.1)本文描述 转自 core java volume 2, 旨在理解 XML--XML概述 的基础知识: [1]XML概述相关 1)problem+solution (干货-- ...

  7. XML - XML学习/XML文件解析器(C++)实现

    XML - XML学习/XML文件解析器(C++)实现 XML概述 ​ XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识.它也是元标记语言,用于定义其他与特定领域有关的, ...

  8. XML约束——Schema约束

    XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性 XML Schema VS DTD: •XML Schema符合XML语法结构. • ...

  9. XML和Schema命名空间详解---实例篇

    例一:重点理解名称空间的相关概念. 下面的例子是一个XML Schema文件,名为"note.xsd" [html] view plaincopy 1.  <?xml ver ...

最新文章

  1. [脑海成像]科学家利用动态电极绕过眼睛直接刺激大脑,在盲人脑海画出字母
  2. python函数变量的作用域_学不会的Python函数——变量作用域
  3. (10)FPGA顶层通用模块(学无止境)
  4. 政治经济学第一-三章脉络图
  5. Python非本地语句
  6. 利用正则表达式 替换字符串中多个 URL
  7. 基于zookeeper实现分布式读写锁
  8. 【Java小游戏】飞翔的小鸟项目介绍
  9. win10 系统 程序员计算器面板介绍和功能使用
  10. vpp之feature机制介绍
  11. 印象笔记如何分享链接_印象笔记共享问题解决经过
  12. 告别公告_我告别freeCodeCamp
  13. 企业支付宝账号注册认证流程
  14. Python爬虫+requests+伪装浏览器 爬取小说入门总结
  15. C语言入门 函数调用 main函数 int main 是什么
  16. win10操作系统的ODBC数据源配置sqlserver数据库
  17. visio图片导入word和PPT的最清晰的方式
  18. phpfilter的妙用
  19. R语言使用matrix函数创建空矩阵、使用nrow参数和ncol参数指定矩阵的行列数
  20. 【餐厅点餐平台|一】项目描述+需求分析

热门文章

  1. Palindromic Numbers LightOJ - 1205 数位dp 求回文数
  2. 剑指 Offer 38. 字符串的排列(有重复元素的排列)
  3. CF1067E Random Forest Rank(树形dp,概率与期望,线性代数)
  4. ARC080F - Prime Flip(贪心,差分,二分图匹配)
  5. P2522 [HAOI2011]Problem b
  6. 牛客网 【每日一题】5月28日题目精讲 Protecting the Flowers
  7. 【无码专区2】序列划分(数学)
  8. 线性筛素数的实现与证明
  9. CF19E-Fairy【树形结构,差分】
  10. P6178-[模板]Matrix-Tree 定理