XML学习(不定时持续补充)

一、XML

1)结构:XML 文档必须包含根元素。该元素是所有其他元素的父元素。XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。

<?xmlversion="1.0"encoding="UTF-8"?>----XML 声明。它定义 XML 的版本(1.0)和所使用的编码

<root> ---根标签

<child 属性名 = "属性值"(‘’也行,也可以用子标签)> ----子标签

<subchild>.....</subchild> ----二级子标签

</child>

</root>

XML 声明文件的可选部分,如果存在需要放在文档的第一行;

省略关闭标签是非法的。所有元素都必须有关闭标签;

XML 标签对大小写敏感。标签 <Letter> 与标签 <letter> 是不同的;

所有元素都必须彼此正确地嵌套;

XML 的属性值必须加引号

2)元素 XML 元素必须遵循以下命名规则:

名称可以包含字母、数字以及其他的字符

名称不能以数字或者标点符号开始

名称不能以字母 xml(或者 XML、Xml 等等)开始

名称不能包含空格

可使用任何名称,没有保留的字词。

 

3)属性值   属性值必须被引号包围,不过单引号和双引号均可使用

没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用元素吧。

 

4)命名空间 当在 XML 中使用前缀时,一个所谓的用于前缀的命名空间必须被定义。命名空间是在元素的开始标签的 xmlns 属性中定义的。

 

命名空间声明的语法如下。xmlns:前缀="URI"。

 

<h:table xmlns:h="http://www.w3.org/TR/html4/">

 

命名空间 URI 不会被解析器用于查找信息。其目的是赋予命名空间一个惟一的名称

为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。它的语法如下:xmlns="namespaceURI"

<table xmlns="http://www.w3schools.com/furniture">

【总结】:

 

XML 可用于交换、共享和存储数据。

XML 文档形成 树状结构,在"根"和"叶子"的分支机构开始的。

XML 有非常简单的 语法规则。带有正确语法的 XML 是"形式良好"的。有效的 XML 是针对 DTD 进行验证的。

XSLT 用于把 XML 转换为其他格式,比如 HTML。

所有现代的浏览器有一个内建的 XML 解析器,可读取和操作 XML。

DOM(Document Object Model)定义了一个访问 XML 的标准方式。

XMLHttpRequest 对象提供了一个网页加载后与服务器进行通信的方式。

XML 命名空间提供了一种避免元素命名冲突的方法。

CDATA 区域内的文本会被解析器忽略。

 

二、DTD

 

DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

CDATA 是不会被解析器解析的文本。

 

1)声明文档

A、内部的文档声明

<!DOCTYPE 根标签 [

element-declarations 声明内容

]>

 

实例:

<?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>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>

 

B、外部文档声明

<!DOCTYPE 根标签 SYSTEM "文件名"> 实例:<!DOCTYPE note SYSTEM "note.dtd">

2)声明元素

A、元素声明使用下面的语法:

<!ELEMENT 元素名 category> 或<!ELEMENT 元素名 (元素内容)>

B、空元素通过类别关键词EMPTY进行声明:

<!ELEMENT element-name EMPTY>实例:<!ELEMENT br EMPTY>

C、 PCDATA 的元素声明:

<!ELEMENT element-name (#PCDATA)> 实例:<!ELEMENT from (#PCDATA)>

D、通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:

<!ELEMENTelement-name ANY>实例:<!ELEMENT note ANY>

E、带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:

<!ELEMENT element-name (child1,child2,...)> 实例:<!ELEMENT note (to,from,heading,body)>

  F、<!ELEMENT 元素名 (子元素名(符号))> 类似正则表达式中的符号

<!ELEMENT note (message)> message 子元素必须出现一次,并且必须只在 "note" 元素中出现一次。

 <!ELEMENT note (message+)>message 子元素必须在 "note" 元素内出现至少一次。

<!ELEMENT note (message*)> 子元素 message 可在 "note" 元素内出现零次或多次。

<!ELEMENT note (message?)> 子元素 message 可在 "note" 元素内出现零次或一次。

<!ELEMENT note (to,from,header,(message|body))>

"note" 元素必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素。

3)声明属性

<!ATTLIST元素名 属性名 属性类型属性值>
DTD 实例:<!ATTLIST payment type CDATA "check">
XML 实例:<payment type="check" /> 

 

属性值解释
属性的默认值
#REQUIRED属性值是必需的
#IMPLIED属性不是必需的
#FIXED value属性值是固定的

其中<!ATTLIST 元素名 属性名 属性类型 #FIXED "值">需给明值。


4)声明实体实体是用于定义引用普通文本或特殊字符的快捷方式的变量。

  • 实体引用是对实体的引用。  实体可在内部或外部进行声明。

一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。      实例:   &user;

内部:<!ENTITY entity-name "entity-value">

DTD 实例: <!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3CSchool.cc">

 

XML 实例: <author>&writer;&copyright;</author>

外部:<!ENTITY entity-name SYSTEM "URI/URL">

DTD 实例: <!ENTITY writer SYSTEM "http://www.w3cschool.cc/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3cschool.cc/entities.dtd">

XML example: <author>&writer;&copyright;</author>

【总结】:

声明文档:<!DOCTYPE 根标签 ....

声明元素:<!ELEMENT 元素名 ....

声明属性:<!ATTLIST元素名 属性名 属性类型 ...

声明实体:<!ENTITY 实体名 ....

 

三、XSD ( XML Schema)  xml语言写的

1)元素  

  根元素:<schema> 元素是每一个 XML Schema 的根元素。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 指定元素schema中用到的元素和数据类型的命名空间 url和前缀 xs:
targetNamespace="http://www.runoob.com" 指定被此 schema 定义的元素的命名空间(与xml中,根标签的命名空间一致)
xmlns="http://www.runoob.com"指出默认的命名空间
elementFormDefault="qualified">指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。

对应xml引用:

<?xml version="1.0"?>
<note xmlns="http://www.runoob.com"规定了默认命名空间的声明。告知 schema 验证器, XML 中的所有元素都被声明在此命名空间 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"XML Schema 实例的命名空间
xsi:schemaLocation="http://www.runoob.comnote.xsd">  

第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置

 

2)简易元素简易元素指那些只包含文本的元素。它不会包含任何其他的元素或属性。

格式:<xs:element name="元素名" type="元素类型"/>

最常用的类型是:xs:stringxs:decimalxs:integerxs:booleanxs:datexs:time

 

这是一些 XML 元素:

<lastname>Refsnes</lastname>
<age>36</age>
<dateborn>1970-03-27</dateborn>

这是相应的简易元素定义:

<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>

简易元素可拥有指定的默认值或固定值。default="固定值 " fixed="固定值 "

3)属性

简易元素无法拥有属性。假如某个元素拥有属性,它就会被当作某种复合类型。但是属性本身总是作为简易类型被声明的。

格式: <xs:attribute name="属性名" type="数据类型"/>

 

最常用的类型是:xs:string xs:decimal xs:integer xs:boolean xs:date xs:time

属性是可选的。如需规定属性为必选,请使用 "use" 属性:

<xs:attribute name="lang" type="xs:string" use="required"/>

<xs:attribute name="lang" type="xs:string" default="EN"/> 默认值

<xs:attribute name="lang" type="xs:string" fixed="EN"/> 固定值

 

4)元素值得限定 restriction

格式如下:

<xs:element name="car">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      ....限定规则....
    </xs:restriction>
  </xs:simpleType>
</xs:element>

 

限定描述
enumeration       <xs:enumeration value="Audi"/>定义可接受值的一个列表
fractionDigits定义所允许的最大的小数位数。必须大于等于0。
length <xs:length value="8"/>定义所允许的字符或者列表项目的精确数目。必须大于或等于0。
maxExclusive   定义数值的上限。所允许的值必须小于此值。
maxInclusive    <xs:maxInclusive value="120"/>定义数值的上限。所允许的值必须小于或等于此值。
maxLength <xs:maxLength value="8"/>定义所允许的字符或者列表项目的最大数目。必须大于或等于0。
minExclusive定义数值的下限。所允许的值必需大于此值。
minInclusive       <xs:minInclusive value="0"/> 定义数值的下限。所允许的值必需大于或等于此值。
minLength <xs:minLength value="5"/>定义所允许的字符或者列表项目的最小数目。必须大于或等于0。
pattern <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>定义可接受的字符的精确序列。
totalDigits定义所允许的阿拉伯数字的精确位数。必须大于0。
whiteSpace    <xs:whiteSpace value="preserve"/>定义空白字符(换行、回车、空格以及制表符)的处理方式。

 

5)复合元素

有四种类型的复合元素: 空元素 包含其他元素的元素 仅包含文本的元素 包含元素和文本的元素

A、定义在内部的方式:

<xs:element name="employee">     元素    employee
  <xs:complexType>
    <xs:sequence> 指示器 <sequence>,子元素必须以它们被声明的次序出现
      <xs:element name="firstname" type="xs:string"/>      子元素 firstname
      <xs:element name="lastname" type="xs:string"/>      子元素lastname
    </xs:sequence>
  </xs:complexType>
</xs:element>

B、引用的方式

<xs:element name="employee" type="personinfo"/>      使用 type 属性,这个属性的作用是引用要使用的复合类型的名称
<xs:element name="student" type="personinfo"/>
<xs:element name="member" type="personinfo"/>

<xs:complexType name="personinfo">     以上三个元素均可以使用相同的复合类型     personinfo
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

 

继续嵌套

<xs:element name="employee" type="fullpersoninfo"/>

<xs:complexType name="personinfo">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="fullpersoninfo">
  <xs:complexContent>
    <xs:extension base="personinfo">
      <xs:sequence>
        <xs:element name="address" type="xs:string"/>
        <xs:element name="city" type="xs:string"/>
        <xs:element name="country" type="xs:string"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

6)指示器 有七种指示器:

 

Order 指示器 : All      <all> 指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次

Choice <choice> 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼)

Sequence <sequence> 规定子元素必须按照特定的顺序出现

 

Occurrence 指示器: maxOccurs <maxOccurs> 指示器可规定某个元素可出现的最大次数        <xs:element name="child_name" type="xs:string" maxOccurs="10"/>

minOccurs <minOccurs> 指示器可规定某个元素能够出现的最小次数

【注意】Occurrence 指示器用于定义某个元素出现的频率。

 

Group 指示器: Group name

attributeGroup name

元素组:

<xs:group name="persongroup"> 必须在 group 声明内部定义一个 all、choice 或者 sequence 元素。
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
    <xs:element name="birthday" type="xs:date"/>
  </xs:sequence>
</xs:group>

<xs:element name="person" type="personinfo"/>

<xs:complexType name="personinfo">
  <xs:sequence>
    <xs:group ref="persongroup"/> 必须在 group 声明内部定义一个 all、choice 或者 sequence 元素。
    <xs:element name="country" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

属性组:

<xs:attributeGroup name="personattrgroup"> 定义了名为 "personattrgroup" 的一个属性组
  <xs:attribute name="firstname" type="xs:string"/>
  <xs:attribute name="lastname" type="xs:string"/>
  <xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>

<xs:element name="person">
  <xs:complexType>
    <xs:attributeGroup ref="personattrgroup"/> 在您已定义完毕属性组之后,就可以在另一个定义中引用它了
  </xs:complexType>
</xs:element>

7)可拓展的元素  <any> 元素使我们有能力通过未被 schema 规定的元素来拓展 XML 文档!

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
      <xs:any minOccurs="0"/> 我们可以通过任何元素(在 <lastname> 之后)扩展 "person" 的内容
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
    <xs:anyAttribute/> 通过使用 <anyAttribute> 元素,我们就可以向 "person" 元素添加任意数量的属性
  </xs:complexType>
</xs:element>

<any> 和 <anyAttribute> 均可用于制作可扩展的文档!它们使文档有能力包含未在主 XML schema 中声明过的附加元素。

8)元素替换  通过 XML Schema,一个元素可对另一个元素进行替换。

<xs:element name="name" type="xs:string"/> 首先,我们声明主元素

<xs:element name="navn" substitutionGroup="name"/> 然后我们会声明次元素,这些次元素可声明它们能够替换主元素

 

substitutionGroup 中的所有元素(主元素和可替换元素)必须被声明为全局元素,否则就无法工作!

全局元素指 "schema" 元素的直接子元素!本地元素(Local elements)指嵌套在其他元素中的元素。

为防止其他的元素替换某个指定的元素,请使用 block 属性:

<xs:element name="name" type="xs:string" block="substitution"/>

9)数据类型:

1 字符串数据类型可包含字符、换行、回车以及制表符。如果您使用字符串数据类型,XML 处理器就不会更改其中的值。

规格化字符串数据类型同样可包含字符,但是 XML 处理器会移除折行,回车以及制表符。 <xs:element name="customer" type="xs:normalizedString"/>

Token 数据类型同样可包含字符,但是 XML 处理器会移除换行符、回车、制表符、开头和结尾的空格以及(连续的)空格。

<xs:element name="customer" type="xs:token"/>

2 日期及时间数据类型用于包含日期和时间的值。

3 数值

十进制数据类型用于规定一个数值。 <xs:element name="prize" type="xs:decimal"/>    十进制数字的最大位数是 18 位

整数数据类型用于规定无小数成分的数值 <xs:element name="prize" type="xs:integer"/>

4 其他杂项数据类型包括布尔、base64Binary、十六进制、浮点、双精度、anyURI、anyURI 以及 NOTATION。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值