博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

xml 记录

Posted on 2009-03-02 10:19  kalllx  阅读(199)  评论(0)    收藏  举报


课程:XML
HTML <BR> <TABLE>
what:
XML:(eXtensive Markup Language)可扩展标记语言,是一种元语言,可以用来定义其它语言的语言

内容:
一:
  1.XML的基本语法--良构的XML
二:
  --有效的XML
  2.DTD(Document Type Definition)
  3.XML Schema   w3c
  4.XML Namespace
三:XML解析
  5.SAX
  6.DOM

第一章
SGML:标准的通用标记语言
why:
作用:
1)存储具有一定结构的数据
2)在应用系统中用其作为配置文件
XML常用术语:
1)元素:开始标签、结束标签,连同其内容
2)开始标签: <briup>
3)结束标签: </briup>
4)子元素: 有外层标签
5)根元素: xml文档中最上层的元素

良构的XML:满足XML语法规则的XML
XML的语法规则:
1)可有可无的文档声明
<?xml version="1.0" encoding="" ?>
当xml文档中出现了非UTF-8字符时,我们必须要给出声明,并通过encoding属性指定具体的编码,encoding默认取值为UTF-8
2)在一个xml文件中,根元素有且只能有一个
PCDATA:Parsed Character DATA
/opt/eclipse-myeclipse
jbuilder
IDE
netbeans
BEA
Oracle
grammar.xml
3)元素规则:
  a)开始标签和结束标签要配对出现
  b)元素中可以包含多个属性,而且属性只能出现在开始标签中
  c)元素中没有任何内容,可以使用缩写
  如: <briup></briup> <===> <briup/>
4)元素的嵌套规则:元素的标签不能交叉嵌套
  在xml元素内部可以出现哪些内容:
  a)空
  注:空格、制表符、回车都不是空
  <briup></briup>   <briup/>
  b)字符数据(PCDATA)
  <briup>USA</briup>
  c)子元素
  <briup>
  <name>XML</name>
  </briup>
  d)混合内容(子元素、字符数据)
  <briup>
     IBM
  <name>XML</name>
  </briup>
注:写xml文件时,尽量使用缩进,以增加程序的可读性
5)命名规则:
java中命名规则:
a)以字母、_、$开始
b)可以跟字母、数字、_、$
c)大小写敏感
d)没有长度限制
e)不能使用关键字
xml中命名规则:
a)以字母、_开始
b)可以跟字母、数字、_、-、.
c)大小写敏感
d)没有长度限制
e)不能使用关键字
注:
a)定义的名称尽量能表达出其含义
b)如果名字有多个单词组成,可以使用驼峰表示法,或用_将多个单词隔开
6)属性规则:
a)必须以键值对的形式出现
b)元素开始标签中可以出现多个属性,但同一标签中属性不能重名
c)定义了属性,一定要给其赋值
d)属性值用必须用引号引起来,可以是单引号也可以是双引号

basic
  --student.xml
<students>
 <student></student>
 ......
 <student></student>
</students>
练习:
basic
  --course.xml
课程名:XML
课程描述:可扩展标记语言
课程时间:3天
代课老师:Robin
xml中的注释:
<!--
comments
-->
xml中的处理指令:
<?  ...   ?>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
version:用来指定xml的版本,一般为1.0
encoding:用来指定xml的编码格式
standalone:用来指定xml文件是否是独立的
yes:表示xml文件是独立的,不依赖于其它文件
no:表示xml文件不是独立的,要依赖于其它文件
   DTD,XML Schema
xml中国际化(i18n)的支持:
通过文档声明中的encoding来指定具体的编码,常用中文编码:GBK,GB2312
xml中字符内容:
1)PCDATA
entity:实体 = &entityName;
&lt;  --> <  less than
2)CDATA
有效的xml和良构的xml:
良构的xml:满足xml语法规则的xml
有效的xml:满足xml语法规则,并满足DTD或XML            Schema所做限制的xml
良构的xml不一定是有效的,但有效的xml一定是良构的
html与xml的比较:
a)html中的标签都是w3c组织预定义的,
而xml中的标签我们可以根据需求自行定义
b)html关注的是数据的显示,而xml所关注是是数据的存储结构、数据的语义
c)html对语法检查不严格,而xml对语法检查较为严格
<table></TABLE>
<BR> <BR/>
d)html和xml都是标记语言,都是SGML的子集,都是w3c组织推荐的标准
<book>
 <book:title>XML</title>
 <author>
  <author:title>Dr.</title>
 </author>
<book>
XSL:可扩展样式表语言 -->    XML
1)将xml进行转换
使用XSLT
XPath:在转换后的文本中进行模式匹配、内容搜索
2)将转换后内容进行格式化输出
使用FO
CSS:层叠样式表       -->    HTML
xml解析器:
SAX:基于事件
DOM:基于驻留内存的树型结构
第二章:
1:DTD,文档类型定义,用来对xml中内容进行限制(如:元素名、元素出现顺序、元素出现频率等)
声明元素
语法:
<!ELEMENT elementName (contentModle)>
--dtd
  --dtdtest.xml
  <briup>
 ibm
  </briup>
四种内容模式:
1)EMPTY:元素内为空
语法:<!ELEMENT elementName EMPTY>
如: <briup></briup>
2)ANY:在元素内可以出现任何内容
语法: <!ELEMENT elementName ANY>
3)ELEMENT:表示在元素内只能出现字元素
语法:<!ELEMENT elementName (...)>
, 表示元素按照先后顺序出现
| 表示从多个元素中选择一个
无符号 表示元素必须要出现,且只出现一次
+ 表示元素可以出现1次或多次
* 表示元素可以出现0次或多次
?表示元素可以出现0次或1次
4)MIXED:表示在元素内可以出现字符内容、子元素
语法:
<!ELEMENT elementName (#PCDATA|subEle1|subEle2|..|subElen)*>
如:
<briup>
 test
 <a>testa</a>
 <b>testb</b>
</briup>
练习:
写dtd对student.xml文件中内容进行限制:
1)根元素<students>
2)在<students>下可以出现多个<student>
3)<student>子元素必须以
<first_name>,<last_name>,<age>,<gendar>,
<address>顺数出现,而且<age>可以出现0次
或1次,<address>可以出现1次或多次
4)<address>子元素必须以
<city>,<street>,<zip>顺序出现
basic
  --student.dtd

作业:
创建cd.xml存放CD的信息(可从cd.doc中获取),写DTD对xml文件的内容进行限制,要求根元素<cds>下可以出现多个<cd>子元素,<cd>的子元素按照给定顺序出现,<company>可以出现一次或多次,<year>可以出现零次或一次,code属性必须出现

220/jd0804/xml
第二天:
声明属性:
语法:
<!ATTLIST elementName attName attType attDefult>
<!ATTLIST elementName
 attName attType attDefault
 ...
 attName attType attDefault
>
attType取值:
CDATA:表示属性取值为可解析的字符内容
ID:表示属性取值唯一,取值还要满足xml中的命名规则
enumarated:表示属性的取值在某一范围内
attDefault取值:
#REQUIRED:表示属性必须要出现
#IMPLIED:表示属性可以出现,也可以不出现
value:表示属性可以出现,也可以不出现,不出现使用默认值,出现使用指定的值
#FIXED:表示属性可以出现,也可以不出现,出现其值一定是某一固定值

实体:
语法:<!ENTITY entityName entityValue>
使用实体: &entityName;
如何建立dtd与xml的对应关系:
1)把xml信息和dtd信息写在同一文件中
<!DOCTYPE rootElement [ ... ]>
2)把xml信息和dtd信息写在不同文件中,并将dtd放到本地系统中
<!DOCTYPE rootElement SYSTEM "path">
3)把xml信息和dtd信息写在不同文件中,并将dtd放到互联网上
<!DOCTYPE rootElement PUBLIC "description" "URL">
第三章:
NameSpace:一系列元素和属性名称的集合
目的:解决xml中名称冲突问题

URL
URI:

book="www.briup.com/book"
author="www.briup.com/author"
<book>
 <book:title>
 </title>
 <author>
  <author:titile>
  </title>
 </author>
</book>
--ns
  --book.xml
1)声明一个命名空间前缀,并应用在某一元素上,则该元素所有的子元素及其属性都在相应的命名空间下
2)可以通过xmlns定义默认命名空间,声明后该元素所有的子元素都在默认命名空间下
注意:默认命名空间不作用于属性
3)在同一xml文档中可以声明多个命名空间前缀,可以定义多个不同的命名空间前缀指向同一URI,但不能定义同名的命名空间前缀指向不同的URI
4)判断元素名、属性名是否相同,不能仅靠prefix,还要看一下prefix所指向的URI是否相同
第四章:
XML Schema:所完成的功能和DTD是一样的,都是用来对XML文件的内容进行限制的,其功能比DTD更强大
XML Schema特性:
1)采用XML相同的语法
2)支持具体数据类型
3)支持命名空间
4)能够对XML内容进行更详细的限制
如:限制元素只能出现4--17次等
XML Schema中类型:
1)Simple Type:可以用来限制、修饰元素和属性
语法:
<element name="" type="Simple Type">
<attribute name="" type="Simple Type">
<simpleType ....>...</simpleType>
2)Complex Type:只能用来限制、修饰元素
当元素内有属性、或子元素时,必须将该元素的类型指定为复杂类型
语法:
<complexType ...>...</complexType>

--schema
  --age.xsd
  --ComplexTypeTest1.xsd
age.xsd
<element name="age" type="nonNegativeInteger">
<age ></age>

ctrl+shift+f
alt+?
练习:写一个passwd.xsd来限制passwd.xml中<passwd>元素的取值只能是6--8位字符
<passwd id=""><a></a></passwd>
<name>briup1</name>
复杂类型四种内容模式:
1)Simple:表示元素只能跟字符内容和属性
<passwd id="">test</passwd>
2)Empty:表示元素只能跟属性
<passwd id=""/>
3)Element Only:表示在元素内只能出现子元素和属性
<passwd id="">
 <a>test</a>
</passwd>

complexTypeTest2.xsd
<name id="">
 <first_name>
 <last_name>
</name>
4)Mixed:表示在元素内可以出现字符内容、子元素、属性
<passwd id="">
 <a>test</a>
 ibm
</passwd>
声明属性:
<attribute ...></attribute>
use:指定属性是否出现,如:required,optional
default:指定属性的默认值
fixed:指定属性出现后,其值必须是某一固定值
注意:use="required" 和 default="" 不能同时出现

元素声明:
<element ...></element>
name:指定元素名
type:指定元素类型
minOccurs:指定元素最小出现次数
maxOccurs:指定元素最大出现次数,如果值为unbounded表示无上限

<sequence>:限制元素按顺序出现
<choice>:限制多个元素中取一个
<all>:限制多个元素都可以出现,但不关心元素出现的顺序
练习:
写一个student.xsd对student.xml中内容进行限制
1)要求根元素<students>
2)根元素下可以有多个<student>(没有个数限制)
3)<student>子元素<first_name>,<last_name>,<age>,<gendar>,<address>按顺序出现
4)<age>数值类型,取值1-100
5)<gendar>字符类型,取值male,female
6)<address>子元素<city>,<street>,<zip>按顺序出现
7)<zip>数值类型,取值111111-999999
8)<student>有一属性id,必须出现,取值为非负整形