xml 学习笔记

1.什么是xml?
eXtensible Markup Language 可扩展的标记语言


1)html和xml的区别?
html:
目的:展示,数据和显示方式结合
特点:标记是固定的,不可扩展.
语法宽松,浏览器接受不规范的语法




xml:
目的:数据
特点:标记可扩展
语法严格


2)xml主要用途:
保存数据,交换数据,配置文件


解析器:
html:浏览器
xml:浏览器,myeclipse,xml spy


2.xml语法
1)声明:
<?xml version="1.0" encoding="utf-8"?> 必须出现在文件的开始位置


2)标记:
自定义,有开始标记和结束标记,严格区分大小写
3)根元素:
有且只有一个
4)实体引用:
<: &lt;
>: &gt;
&: &amp;
": &quot;
': &apos;
5)属性
属性一定出现在开始标记
属性必须有值(等号右边必须有内容)


6)CDATA:忽略所有实体引用的纯文本
<![CDATA[本文内容]]>


7)命名空间
<前缀:标记名称>


<f:table>
<f:name>apple</f:name>
<f:price>5</f:price>
</f:table>


<w:table>
<w:name>wood</w:name>
<w:price>100</w:price>
</w:table>


======DTD/Schema=====
----DTD----
1.什么是DTD?  
  Document Type Definition


<计算机书籍>
<书名 bh="123">xxx</书名>
<价格>30</价格>
</计算机书籍>


<Computer>
<bh>123</bh>
<bookname>xxx</bookname>
<price>30</price>
</Computer>


交换数据时,要求xml文件格式相同,所以需要遵守相同的规范.
比如:两份文件要有相同的元素嵌套关系,相同的属性定义,相同的元素顺序,元素出现的次数等.




限制条件:
书籍列表:根元素
计算机书籍:在书籍列表中可以有多个元素
武侠书籍:在书籍列表中可以有多个元素
计算机书籍:书名,作者,价格,简介,必须有序


1)DTD文档的声明及应用
内部DTD文档
<!DOCTYPE 根元素 [定义内容]>


外部的DTD文档
<!DOCTYPE 根元素 SYSTEM "DTD文件(.dtd)路径">


内部使用和外部结合
<!DOCTYPE 根元素 SYSTEM "DTD文件(.dtd)路径" [定义内容]>


2)元素
格式1:<!ELEMENT 标记名称 (子元素名,子元素名....)>


符号:
():用来给元素分组
*:0到多个
,:表示有序
+:表示1到多次
|:表示或
?:表示0或1次


格式2:<!ELEMENT 标记名称 类型>
类型:
(#PCDATA):可以包含任何字符数据,但是不能包含子元素
EMPTY:该元素不能包含子元素和文本,但是可以有属性
ANY:该元素可以包含任何在DTD中定义的元素内容


2)属性
<!ATTLIST 标记名称 属性名称 类型 属性特点>


类型:
CDATA:值为字符数据,可以是中文和数字,字母
NMTOKEN:是CDATA的一个子集,表示属性值必须是英文字母,数字,句号,破折号,下划线,或冒号,属性值中不能含有空格做分隔.
NMTOKENS:与NMTOKEN类似.但可以出现空格.
ID:表示该属性的取值必须是唯一的,并且ID属性值必须是"字母+数字",不能是纯数字


属性特点:
#REQUIRED:该属性在元素中必须出现
#IMPLIED:该属性不是必须的,可有可无
#FIXED "value":属性值是固定的,属性本身可有可无




====Schema===


DTD的局限性:
1)DTD不遵守xml的语法
2)DTD数据数据有限(与数据库数据类型不一致)
3)DTD不可扩展
4)DTD不支持命名空间(命名冲突)


Schema的优势:
1)Schema也是基于xml的语法
2)Schema扩充了数据类型,可以自定义数据类型
3)Schema支持元素继承
4)Schema支持属性组


Schema的文档结构:
<xs:schema 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="www.zhongxin.com"
elementFormDefault="qualified" 
attributeFormDefault="unqualified">


xs:schema 根元素
xmlns:xs 验证schema文件本身的命名空间所属
targetNamespace: 当前schema文件的命名空间(自定义)
elementFormDefault:用于指示子元素是否放到命名空间中,值有两种:
qualified:来自目标命名空间的元素必须用命名空间前缀限定.
unqualified:来自目标命名空间的元素不必须用命名空间前缀限定.


attributeFormDefault:用于指示属性是否放到命名空间中,值有两种:
qualified:来自目标命名空间的属性必须用命名空间前缀限定.
unqualified:来自目标命名空间的属性不必须用命名空间前缀限定.


1.元素定义:
一般格式
<xs:element name="book" type="xs:int"></xs:element>


element
常用属性:
name:定义的元素名称
type:定义元素的数据类型
-常用的简单数据类型:
 xs:string xs:int xs:boolean xs:date xs:time
 xs:decimal 任意精度 xs:double 双精度


ref:必须指向一个全局元素
default:为元素定义默认值(仅当元素是简单类型或textOnly时使用)
maxOccurs:值表示该元素在父元素中出现的最大次数,它的取值为大于或等于0
 默认值为unbounded.
minOccurs:值表示该元素在父元素中出现的最小次数,它的取值为大于或等于0
 默认值为1.


--xml中引用Schema文件:
有命名空间:
<my:book xmlns="www.zhongxin.com" 
xmlns:my="www.zhongxin.com"
xsi:schemaLocation="www.zhongxin.com firstSchema.xsd">
无命名空间: 
xsi:noNamespaceSchemaLocation="firstSchema.xsd"


fixed:为简单元素设置固定值
注意: 在元素中的值不能有空格




2.属性定义:
<xs:attribute name="id" type="xs:string"/>
attribute主要属性:name,default,fixed,ref,type


use:指示元素该如何使用该attribute类型
值有:
optional(默认):表示该属性可以是任何值,属性可选
prohibited:表示不能使用该属性
required:表示该属性必须出现一次


3.SimpleType类型元素:(不能包含子元素或属性)
用于xml元素或者属性中定义可接受的值
方式有内嵌和应用两种


注意:
a.内嵌的时候不能使用类型名
b.推荐使用引用类型,方便扩展,但注意是否有nameSpace="xx",有的话加上     xmlns="xx"


1)引用类型基本使用:
<xs:element name="ageTest" type="ageType"/>
<xs:simpleType name="ageType">
<xs:restriction base="xs:int">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="200"/>
</xs:restriction>
</xs:simpleType>
restriction元素:
属性:base属性指定数据类型
子元素:
minInclusive:最小值(包含边界)
maxInclusive:最大值(包含边界)
minExclusive:最小值(不包含边界)
maxExclusive:最大值(不包含边界)
pattern:主要用于对某个属性或元素进行约束,可以使用正则表达式
enumeration:元素的内容限制为一组可接受的值


4.复杂类型
复杂类型是可以包含其他元素,属性和组的元素定义
1)sequence:要求一组中元素以指定的顺序出现
属性:
maxOccurs:定义最多出现的次数
minOccurs:定义最少出现的次数


2)all:一组元素可以无序出现
maxOccurs:定义最多出现的次数
minOccurs:定义最少出现的次数


案例:
1.仅包含子元素的元素


2.含文本和属性的复杂元素
<xs:complexType name="peoType">
  <xs:simpleContent>
    <xs:extension base="xs:string">
<xs:attribute name="id" type="xs:string" use="required"/>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>
simpleContent:用于对complexType元素或字符数据做约束.但是不能包含子元素
子元素:
extension:扩展simpleType的元素内容
restriction:限制数据,simpleType元素的子集

3.包含文本,子元素和属性的复杂元素
<xs:complexType name="peoType">
<xs:attribute name="idCard" type="xs:string" use="required"/>
</xs:complexType>
注意:
    a.使用sequence或all在设置属性attribute之前
    b.mixed="true":表示是字符数据可以出现在子元素之间
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值