XML、AJAX、DOM4J、JavaDB、Metadata
一、XML--eXtensible Markup Language
1、XML最基本的三个概念XML语言--描述事物本身(可扩展)
XSL语言--展现事物表现形式
DTD(Scheam)--定义XML语言的语法,XML语言里面可以写什么样的标签
例1-1:
DTD says:你叫橡皮泥,可以有颜色,产地等属性
XML:<橡皮泥 颜色="白色">
<产地>
东海傲来国
</产地>
</橡皮泥>
XSL:第一种捏法--猫
第二种捏法--狗
2、XML的历史
SGML--标记语言的鼻祖
TeX、HTML、EDI
W3C
WHY XML?
HTML的缺点:
描述性的人机交流语言,HTML更关注它的展现形式
XML的优点:
机器与机器之间进行自动化交流的语言
直接描述数据本身的信息,替代了html装饰语言
应用XML
XML编程中的应用
配置文件(tomcat)
Deploy文件
(weblogic、websphere、jboss)
3、XML的语法
验证一个.XML文档是否正确
格式正确
编程验证
XML Parser(eg.IE6)
与DTD文档相符,符合DTD的要求,或者说符合schema的要求(标签正确)
编程
XML Parser
4、XML文档结构
1)基本语法(1)
通常从XML声明开始
通过XML元素来组织数据
为了是数据更加清晰并且具有自身的格式可以引入CDATA区数据块
可以在文档中加入注释
如果需要给XML处理程序提供一些信息,可以包含处理指示
2)基本语法(2)
空格:大多数xml解析器会把这两边的空格忽略掉
<name>历史的天空</name>
<name> 历史的天空 </name>
要想保留空格:推荐用CDATA
<poem xml:space="preserve">
刀
一把刀
一把带血的刀
</poem>
3)基本语法(3)
PI:Process Instruction 处理指示
<?......?>
<?xml-stylesheet href="http://myh12242.blog.163.com/blog/typical.xsl" type="text/xsl"?>
<?xml-stylesheet href="http://myh12242.blog.163.com/blog/typical.css" type="text/css"?>
......
处理指示是指示给解析器的,请你拿到另外一个xsl文件再给我做展现
传递指令给下游程序
4)Namespace
namespace说的是我这些标签来源于哪些个DTD或者是说schema
xmlns定义名称空间
5)特殊字符
>:>
<:<
&:&
":"
':'
6)Unicode之UTF-8
汉字用3个字节来表示
5、XML文件的设计原则
1)尽量应用现有的(标准)DTD(Schema)
省力、易于交换、应用现有的软件
http://www.oasis-open.org
http://www.xml.org
2)属性还是子标签
Property / Element
比较重要的元素用子元素,说明性的或者辅助性的用Property
需要用DTD做严格检查的可以用Element
5、XSL基础
1)XSL概念
XSL
eXtensible Stylesheet Language(修饰XML的语言)
XSLT & FO
FO(已淡出视线)
Formatting Object
XSLT
T-Transformation
2)XSL用途
XML转换成HTML
XML转换成XML
XSL转换成XSL
所有的XML文件,最根上的节点名字都叫/
6、XPath简介
1)*
现节点下所有元素
2)*/Elem
现节点下所有节点的子节点中为“Elem”的节点
3)@Prop
属性值
4)@*
所有属于现节点的属性
5).
现节点
6)..
现节点的上级
7、DTD & Schema
1)实例xml
<?xml version="1.0" encoding="gb2313"?>
<丛书>
<书>
<名>萍踪侠影</名>
<价 unit="RMB">100.60</价>
</书>
<书>
<名>岳阳楼记</名>
<价 unit="美元">76.8</价>
</书>
</丛书>
DTD规定了XML语言的语法和词汇表,也就是说定义了文件的整体结构和语法。
通过DTD,可以对XML文件的合法性进行检验。
2)book.dtd
<?xml version="1.0" encoding="gb2312"?>
<!ELEMENT 丛书 (书*)>
<!ELEMENT 书 (名,人+,价*)>
<!ELEMENT 名 (#PCDATA)>
<!ELEMENT 人 (#PCDATA)>
<!ATTLIST 人 gender CDATA 'male'>
<!ELEMENT 价 (#PCDATA)>
<!ATTLIST 价 unit (RMB|美元|日元) 'RMB'>
PCDATA:Parsed Character Data
可以混合,既有Data,又有子元素
3)引入DTD的方式
外部引用
<?xml version="1.0" standalone="no"?>
<!DOCTYPE 根元素名 SYSTEM "DTD文件名">
<!DOCTYPE 根元素名 PUBLIC "DTD标识名" DTD地址>
网上公开的,权威机构制定的,大家都可以进行引用的
DTD标识名:ISO的以“ISO”开头,被改进的非ISO标准以“+”开头,未被改进的非ISO标准的以“-”开头
例如:“-//DTD所有者名称//所描述的文件类型//语言的种类”
4)Why Schema?
DTD语法怪异,DGML的残留
DTD没有数据类型
没有对DTD的编程接口
Schema简单,本身就是XML,克服了以上的缺点
Schema也是用来定义一个XML文件里能写什么不能写什么,功能和DTD一样的
XML的编程接口:DOM
8、程序分析模型-DOM&SAX
两种不同的XML分析模型
DOM—所有数据位于内存
SAX—流程性分析,不必把所有数据Load到内存中,可分析大型的XML文件,常用于Server-side的XML—XHTML转换
二、DOM4J
1、XML基础
一个文本文档,成对的标签,标签里还有子标签和属性,树状结构。
2、有哪些类库解析xml
DOM = Document Object Model
DOM解析方式是把整个xml文档当作一个对象。
SAX = simple API for XML
SAX解析方式相当于流媒体的方式,读一点解析一点。DOM处理小文件,SAX可以处理几个G的大文件。
DOM4J
虽然名字叫DOM4J,但是它包含了DOM和SAX两种解析方式。
JDOM
虽然名字叫JDOM,但是它包含了DOM和SAX两种解析方式。
严格意义上来讲,DOM、SAX是Java的一个标准,这两种API都非常底层。
所以有人就二次开发,又封装了一层类库。DOM4J和JDOM是这里面的佼佼者。
3、学习dom4j过程
1)二话不说,打开dom4j官方网站下载dom4j
2)搜索dom4j的教程
4、如果项目里要读取一个xml文件,读文件的默认路径在项目目录下,和src目录平级
<hibernate-mapping>
<class name="com.bjsxt.User" table="t_user"> <!-- class称之为 一个节点或element(元素),name是它的属性,property是它的子节点 -->
<property name="username"></property>
<property name="password"></property>
</class>
</hibernate-mapping>
hibernate-mapping是根节点,class是它的子节点,property是class的子节点。
5、DOM4J使用xpath方式解析xml
1)xpath
path路径,xpath在xml文件找到特定节点的路径
需要引入jar包jaxen-1.1-beta-6.jar,缺少会抛异常Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext
6、DOM4J生成xml文件
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(
new FileWriter("User1.hbm.xml"), format);
writer.write(document);
writer.close();
7、批量生成xml文件
用模板语言:
freemarker
velocity
三、JavaDB介绍
1、JavaDB是Java6自带的小型数据库,名字叫Derby
例子程序:
http://www.ibm.com/developerworks/cn/java/j-lo-jse65/index.html
2、databasemetadata类
databasemetadata类用来读取数据库里的表结构,根据表结构我们可以做一些事情。
类似于:hibernate可以通过Java类(用反射)来生成XML文件和表,也可以根据表生成XML文件和Java的类
3、刷新目录
Derby默认在项目的根目录下创建一个文件夹
四、DatabaseMetaData类
1、metadata(元数据)
元数据是描述数据的属性。
比如:有一封信,信的内容是数据,在信封上写了一行话“这是一封信”,描述数据内容的属性
2、什么是catalog,什么是schema
拿oracle来举例子:catalog可以说是oracle的整个库,schema可以认为是oracle的表空间或者是某个用户
3、DatabaseMetaData可以用来连上一个数据库,把数据库里面的表相关的信息全取出来
4、注意在Derby里面名字都是大写
5、模板语言用占位符把位置给占住,在程序里面把这个占位符替换成需要的变量值
五、其他
1、ajax框架
DWR、DOJO
javascript框架
extjs、jquery
2、XML的例子程序:
http://pan.baidu.com/s/1nuY2GOh
马士兵语录:
1)需要具备自我发展的能力
2)应用驱动学习
3)人的精力是有限的,你要把自己的精力放在刀刃上,放在那些个现在对你来说最重要的事情上面
4)don't look for mr right, look for mr right now
5)拿到一辆自行车,你上来并不是先理解自行车是怎么传动的,先用
6)只要是入了门,剩下就是查文档
7)推荐一部小说《圈子圈套》
8)有必要看Java源代码吗?
一个叫工程师,一个叫研究员
没有必要,我们工程师你所学的所有的知识都是别人已经研究出来的结果
eclipse快捷键:
alt + /:代码提示、自动补全的功能
比如输入main,使用,自动生成main方法