XML、DTD、Schame入门基础知识

XML

1.xml的定义:

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准

2.xml和html的区别

  • xml主要用于结构化、传输和存储数据,用于程序的配置,html用于格式化和显示数据
  • xml是独立于软件和硬件的信息传输工具,html需要被相关软件解析才能显示

3.xml具体语法

3.1.xml组成部分

  • 文档声明
<?xml version="1.0" encoding="UTF-8"?>
  • 元素
  • 属性
  • 注释
  • CDATA数据(用于原样输出数据比如>、<、&……都会原样输出),具体语法如下:
<![CDATA[需要填写的数据]]>
  • 处理指令(可以把xml当成html处理,当不建议这么做),比如:
<?xml-stylesheet  type="text/css" href="1.css"?>

3.2.xml易错问题总结

  • 在写xml的时候,保存xml的编码格式要和xml内容的encoding编码格式保持一致否则相关软件无法解析
  • xml的头部声明"<?xml"和"?>"要连在一起不能分开

DTD

1.DTD的定义:

  • DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构。通俗点说就是用来限制xml文档的

2.DTD的使用方法

  • 内部使用
  • 外部引用

3.DTD的语法

3.1实例(内部使用)

<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

3.2实例(外部调用)

<?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> 
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT rd (to,from,heading,body)>
<!ELEMENT to  (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

3.3实例(公共dtd调用)

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

3.4具体语法

  • 元素
声明一个元素:1.声明一个元素  2.<!ELEMENT 元素名称 (元素内容)>
空元素:<!ELEMENT 元素名称 EMPTY>
只有 PCDATA 的元素:<!ELEMENT 元素名称 (#PCDATA)>
带有任何内容的元素:<!ELEMENT 元素名称 ANY>
带有子元素(序列)的元素:<!ELEMENT 元素名称 (子元素名称 1)>
元素只出现一次,0次或多次,至少一次,0次或者1次,声明“非.../既...”类型的内容
<!ELEMENT 元素名称 (子元素名称)>
<!ELEMENT 元素名称 (子元素名称*)>
<!ELEMENT 元素名称 (子元素名称+)>
<!ELEMENT 元素名称 (子元素名称?>
<!ELEMENT note (to,from,header,(message|body))>
  • 属性
属性声明使用下列语法:<!ATTLIST 元素名称 属性名称 属性类型 默认值> 
实例:<!ATTLIST payment type CDATA "check">

以下是属性类型的选项:

类型描述
CDATA值为字符数据 (character data)
(en1en2
ID值为唯一的 id
IDREF值为另外一个元素的 id
IDREFS值为其他 id 的列表
NMTOKEN值为合法的 XML 名称
NMTOKENS值为合法的 XML 名称的列表
ENTITY值是一个实体
ENTITIES值是一个实体列表
NOTATION此值是符号的名称
xml:值是一个预定义的 XML 值

默认值参数可使用下列值:

解释
属性的默认值
#REQUIRED属性值是必需的
#IMPLIED属性不是必需的
#FIXEDvalue 属性值是固定的
  • 声明实体
格式:
<!ENTITY 实体名称 "实体的值">
实例:
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
xml引用:
<author>&writer;&copyright;</author>

3.5易错点

  • 在元素后面必须敲空格,具体实例如下:
<!--  note后面有空格 -->
<!ELEMENT note  (to,from,heading,body)>
<!-- to后面有空格 -->
<!ELEMENT to (#PCDATA)>
  • dtd用来限制xml的,但是dtd不会影响xml的解析,并且一般只有在高级编辑器(eclipse、idea)才会显示dtd的限制错误,一般编辑器不会显示这种错误
  • 现在浏览器对于xml打的dtd外部引用的实体定义不解析了(有实体定义必须写在xml里面)
  • 一个xml只能用一个dtd

3.6 练习项目

DTD练习项目地址
提取码:h6wa

Schame

1.Schame的定义:

  • XML Schema 是基于 XML 的 DTD 替代者。
  • XML Schema 可描述 XML 文档的结构。
  • XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。

2.Schame的特点:

  • XML Schema 可针对未来的需求进行扩展
  • XML Schema 更完善,功能更强大
  • XML Schema 基于 XML 编写
  • XML Schema 支持数据类型
  • XML Schema 支持命名空间

3.Schame的具体语法:

1.xml

<?xml version="1.0"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

2.简单的schame实例(note.xsd):

  • schame其实本质也是一个xml,只是后缀名是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">
<!--
	W3C规定:在schame文件中书写element标签上的name属性来定义xml文件中标签的名称,用type属性来定义
	标签的类型,如果是简单标签,type定义的标签中文本的数据类型

	complexType标签用来定义当前element可以在xml书写的标签是复杂标签
	simpleType标签用来定义当前element可以在xml书写的标签是简单标签
	区别:有属性或者有子元素就是复杂标签,都没有就是简单标签
	sequence标签用于规定子元素必须按照特定的顺序出现
-->
<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>

3.简单元素

  • xsd元素
    (1).定义简易元素的语法:<xs:element name=“xxx” type=“yyy”/>
    (2).常用的类型有:
    xs:string
    xs:decimal
    xs:integer
    xs:boolean
    xs:date
    xs:time

    (3).简易元素的默认值和固定值
    <xs:element name=“color” type=“xs:string” default=“red”/>
    <xs:element name=“color” type=“xs:string” fixed=“red”/>
  • xsd属性
    (1)定义的语法、常用类型、默认值和固定值和元素的一样就是把element替换成attribute
    (2).可选的和必需的属性,如下是必选,不写use是非必选:
    <xs:attribute name=“lang” type=“xs:string” use=“required”/>
  • XSD 限定 / Facets,实例如下:
    (1)对值得限定
<xs:element name="age">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="120"/>
  </xs:restriction>
</xs:simpleType>
</xs:element> 

(2).对一组值得限定,用枚举

<xs:element name="car">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>
</xs:element> 

也可以写为1:

<xs:element name="car" type="carType"/>

<xs:simpleType name="carType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>

(3).其他一些限定

<!--1.对一系列值的限定-->
<xs:element name="letter">
<!--
	<xs:pattern value="[a-z]" />的value值得各种含义
	1."[a-z]"---a到z任何一个字母
	2."[A-Z][A-Z][A-Z]"---A到Z任何三个字母
	3."xyz"---x、y、z任何一个字母
	4."[0-9][0-9][0-9][0-9][0-9]"---任何0到9的四个数字
	5."([a-z])*"---0个或多个a到z的字母
	6."([a-z][A-Z])+"---至少一对字母,这对字母由一个小写加上一个大写组成
	7."male|female"---male和female其中一个
	8."[a-zA-Z0-9]{8}"---可接受的值是由 8 个字符组成的一行字符,这些字符
	必须是大写或小写字母 a - z 亦或数字 0 - 9:
-->
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-z]"/>
  </xs:restriction>
</xs:simpleType>

</xs:element> 

<!--2.对空白符的限定-->
<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
  <!--
  	value值可以有三个可选,分别是preserve(不移除空格)  replace(移除所有空格) 
  	collapse(移除多余的空格)
  -->
    <xs:whiteSpace value="preserve"/>
  </xs:restriction>
</xs:simpleType>
</xs:element> 

<!--3.对长度的限定-->
<xs:element name="password">

<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:length value="8"/>
  </xs:restriction>
</xs:simpleType>

</xs:element> 

<xs:element name="password">

<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:minLength value="5"/>
    <xs:maxLength value="8"/>
  </xs:restriction>
</xs:simpleType>

</xs:element> 

(4)具体限定类型如下:

限定描述
enumeration定义可接受值的一个列表
fractionDigits定义所允许的最大的小数位数。必须大于等于0。
length定义所允许的字符或者列表项目的精确数目。必须大于或等于0。
maxExclusive定义数值的上限。所允许的值必须小于此值。
maxInclusive定义数值的上限。所允许的值必须小于或等于此值。
maxLength定义所允许的字符或者列表项目的最大数目。必须大于或等于0。
minExclusive定义数值的下限。所允许的值必需大于此值。
minInclusive定义数值的下限。所允许的值必需大于或等于此值。
minLength定义所允许的字符或者列表项目的最小数目。必须大于或等于0。
pattern定义可接受的字符的精确序列。
totalDigits定义所允许的阿拉伯数字的精确位数。必须大于0。
whiteSpace定义空白字符(换行、回车、空格以及制表符)的处理方式。

4.Schame和xml的头部详解:

4.1 Schame

  • xs:schema是每一个 XML Schema 的根元素
  • :xs或者:xsi的意思是给schame起别名,因为一个xml可以引入多个schame,这种写法用于区分标签来自哪个schame,取了别名之后要在标签加上前缀<别名:标签></别名:标签>
<?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">
  • 1.xmlns:xs=“http://www.w3.org/2001/XMLSchema”
    显示 schema 中用到的元素和数据类型来自命名空间 “http://www.w3.org/2001/XMLSchema”。
    同时它还规定了来自命名空间 “http://www.w3.org/2001/XMLSchema” 的元素和数据类型应该使用前缀 xs:
    2.targetNamespace=“http://www.w3school.com.cn”
    显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: “http://www.w3school.com.cn”。
    3.xmlns=“http://www.w3school.com.cn”
    指出默认的命名空间是 “http://www.w3school.com.cn”。
    4.elementFormDefault=“qualified” (有俩个值一个是qualified一个是unqualified),具体意思是,如果设置
    qualified,要么所有标签有别名要么都没有,如果设置unqualified那么xml引入的schame一定要有别名,但是只要xml中根标签有别名就不会报错,子标签可以不用写别名
4.2 xml

-如果引入多个schame的话xsi:schemaLocation的值用空格隔开就行,比如:
xsi:schemaLocation="http://www.w3school.com.cn note.xsd http://www.w3school.com.cd note1.xsd>,
然后就是引入的命名空间要取别名,默认的命名空间只能是一个

<?xml version="1.0"?>
<note
xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
  • 1.xmlns=“http://www.w3school.com.cn”
    规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档
    中使用的所有元素都被声明于 “http://www.w3school.com.cn” 这个命名空间。
    一旦您拥有了可用的 XML Schema 实例命名空间:
    2.xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
    您就可以使用 schemaLocation 属性了。此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置:
    xsi:schemaLocation=“http://www.w3school.com.cn note.xsd”

schame练习

Schame练习项目地址
提取码:3v8z


  1. 注释:在这种情况下,类型 “carType” 可被其他元素使用,因为它不是 “car” 元素的组成部分。 ↩︎

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值