xml 语言 及其应用

55
XML 语语语语语语

Upload: patience-kelly

Post on 31-Dec-2015

128 views

Category:

Documents


0 download

DESCRIPTION

XML 语言 及其应用. 主要内容. XML 概述 XML 语法 DTD 的建立和使用 XML 的解析器 DOM. XML 概述. 什么是 XML. 什么是 Html ( 例 1 - 1 ) 什么是 Xml ( 例 1 - 2 ) 需要 DTD 作为置标的语法 需要样式单来显示 DTD 的描述( 例 1 - 3 ). 2 ) XML 应用实例. 返回. 例 1 - 1. < UL > < LI >张三</ LI > < UL > < LI >用户 ID : 001 </ LI > < LI >公司: A 公司</ LI > - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: XML 语言 及其应用

XML语言及其应用

Page 2: XML 语言 及其应用

主要内容

1. XML概述2. XML语法3. DTD的建立和使用4. XML的解析器 DOM

Page 3: XML 语言 及其应用

1. XML概述

Page 4: XML 语言 及其应用

1)什么是 XML

• 什么是Html(例1-1)• 什么是Xml(例1-2)

– 需要DTD作为置标的语法– 需要样式单来显示– DTD的描述(例1-3)

2)XML应用实例

Page 5: XML 语言 及其应用

例 1- 1返回

< UL >< LI >张三</ LI >< UL >< LI >用户 ID : 001 </ LI >< LI >公司: A 公司</ LI >< LI > EMAIL : zhang @ aaa . com </

LI >< LI >电话: (010)62345678 </ LI >< II >地址:五街 1234 号</ LI >< U >城市:北京市</ LI >< LI >省份:北京</ LI ></ Ul >

< LI >李四</ LI >< UL >< U >用户 ID : 002 </ LI >< LI >公司: B 公司</ LI >< LI > EMAIL : li @ bbb . org </ LI >< LI >电话: (021)87654321 </ LI >< LI >地址:南京路 9876 号</ LI >< LI >城市:上海市</ LI >< LI >省份:上海< LI ></ UL ></ UL >

Page 6: XML 语言 及其应用

例 1- 2

返回

<联系人> <姓名>李四</姓名> < ID > 002 </ ID > <公司> B 公司</公司> < EMAII > 1i @ bbb . org </ EMAII

> <电话> (021)87654321 </电话> <地址> <街道>南京路 9876 号</街道> <城市>上海市</城市> <省份>上海</省份> </地址> </联系人></联系人列表>

<联系人列表> <联系人> <姓名>张三</姓名> < ID > 001 </ ID > <公司> A 公司</公司> < EMAIL > zhang @ aaa . com </ EMAIL > <电话> (010)62345678 </电话> <地址> <街道>五街 1234 号</街道> <城市>北京市</城市> <省份>北京</省份> </地址> </联系人>

Page 7: XML 语言 及其应用

例 1- 3

返回

< !ELEMENT 联系人列表 ( 联系人 )* >< !ELEMENT 联系人 ( 姓名, ID ,公司, EMAIL ,

电话,地址 ) >< !ELEMENT 地址 ( 街道,城市,省份 ) >< !ELEMENT 姓名 (#PCDATA) >< !ELEMENT ID(#PCDATA) >< !ELEMENT 公司 (#PCDATA) >< !ELEMENT EMAIL(#PCDATA) >< !ELEMENT 电话 (#PCDATA) >< !ELEMENT 街道 (#PCDATA) >< !ELEMENT 城市 (#PCDATA) >< !ELEMENT 省份 (#PCDATA) >

Page 8: XML 语言 及其应用

2) XML应用实例

3) XML和 Html比较

• 为置标语言 FCLML 公司的客户列表置表语言制定的,文档类型定义 DTD ,其程序为 Com.dtd

• 客户联系信息的 XML 文档 Com.xml (例1-5)

• 为 Com.xml 制定一个样式 Com.xsl (例1-6)

• Html 格式及显示(例1-7,例1-8)

Page 9: XML 语言 及其应用

例 1- 4

返回

Fclml.dtd

< ? xml version=“1.0” encoding=“GB2312”? >

< !ELEMENT 联系人列表 ( 联系人 )* >< !ELEMENT 联系人 ( 姓名, ID ,公司, EMAIL ,电话,地址 )

>< !ELEMENT 地址 ( 街道,城市,省份 ) >< !ELEMENT 姓名 (#PCDATA) >< !ELEMENT ID(#PCDATA) >< !ELEMENT 公司 (#PCDATA) >< !ELEMENT EMAIL(#PCDATA) >< !ELEMENT 电话 (#PCDATA) >< !ELEMENT 街道 (#PCDATA) >< !ELEMENT 城市 (#PCDATA) >< !ELEMENT 省份 (#PCDATA) >

Page 10: XML 语言 及其应用

例 1- 5 返回

<联系人> <姓名>李四</姓名> < ID > 002 </ ID > <公司> B 公司</公司> < EMAII > 1i @ bbb . org </ EMAII

> <电话> (021)87654321 </电话> <地址> <街道>南京路 9876 号</街道> <城市>上海市</城市> <省份>上海</省份> </地址> </联系人></联系人列表>

Com . xml< ? xml version =“ 1 . 0”encoding =” GB231

2” standalone =” no”? >< !DOCTYPE 联系人列表 SYSTEM”com . dtd”

>< ?xml—stylesheet type =” text / xsl” href =

“ mystyle . xsl”? >

<联系人列表> <联系人> <姓名>张三</姓名> < ID > 001 </ ID > <公司> A 公司</公司> < EMAIL > zhang @ aaa . com </ EMAIL > <电话> (010)62345678 </电话> <地址> <街道>五街 1234 号</街道> <城市>北京市</城市> <省份>北京</省份> </地址> </联系人>

Page 11: XML 语言 及其应用

例 1- 6返回

MyStyle . xsl< ?xml version = "1 . 0"encOding = "GB2312"? >< xsl : stylesheet xmlns : xsl =” http :// www . w3 . org / TR /

WD-xsl" xmlHs = "http :// www . w3 . org / TR / REC—html40" result—ns := "" >< xst : template >< xsI : apply—templates /></ xsl : template >

< xsl : template match = " / " > < HTML > < HEAD > < TITLE > F 公司的客户联系信息</ TITlE > </ HEAD > < BODY > < xsl : apply—templates select = " 联系人列表 " /> </ BODY > </ HTMI ></ xsl : template >

Page 12: XML 语言 及其应用

< xsl:stemplat match = " 联系人列表 " > < xsl : for—each select = " 联系人 " > < UL > < LI >< xsl : value—of select = " 姓名 " />< LI > < UL > < LI >用户 ID :< xsl : value—of select = "ID" /></ LI > < LI >公司:< xsl : value—of select =“公司 " /></ LI > < LI > EMAIL :< xsl : value—of select =“ EMAIL" /></ LI > < LI >电话:< xsl : value—of select =“电话 " /></ LI > < LI >街道:< xsl : value—of select =“地址 / 街道 " /></ LI > < LI >城市:< xsl : value—of select =“地址 / 城市 " /></ LI > < LI >省份:< xsl : value—of select =“地址 / 省份 " /></ LI > < /UL > < /UL > < /xsl:for-each >< /xsl:template >< /xsl:stylesheet >

例 1- 6

Page 13: XML 语言 及其应用

例 1- 7

返回

< LI >李四</ LI >< UL >< LI > ID : 002 </ LI >< LI >公司: B 公司</ LI >< LI > EMAIL : 1i @ bbb . or8 </ LI >< LI >电话: (021)87654321 </ LI >< LI >地址:南京路 9876 号</ LI >< LI >城市:上海市</ LI >< LI >省份:上海</ LI ></ UL ></ UL ></ BODY ></ HTML >

< HTML >< HEAD >< TITLE > F 公司的客户联系信息</ TITLE ></ HEAD >< BODY >< UL >< LI >张三</ LI >< UI >< LI >用户 ID : 001 </ LI >< LI >公司: A 公司</ LI >< LI > EMAIL:zhang @ aaa . com </ LI >< LI >电话: (010)62345678 </ LI >< LI >地址:五街 1234 号</ LI >< LI >城市:北京市</ LI >< LI >省份:北京</ LI ></ UL >

Page 14: XML 语言 及其应用

例 1- 8

返回

• 李四o ID : 002o 公司: B 公司o EMAIL : 1i @ bbb . or

8o 电话: (021)87654321o 地址:南京路 9876 号o 城市:上海市o 省份:上海

• 张三o 用户 ID : 001o 公司: A 公司o EMAIL:zhang @ aaa . como 电话: (010)62345678o 地址:五街 1234 号o 城市:北京市o 省份:北京

Page 15: XML 语言 及其应用

3) XML和 Html比较比较内容 HTML XML

可扩展性 不具有扩展性 是元置标语言,可用于定义新的置标语言

侧重点 侧重于如何表现信息 侧重于如何结构化地描述信息

语法要求 不要求标记的嵌套、配对等,不要求标记之间具有一定的顺序

严格要求嵌套、配对,并遵循 DTD的树形结构

可读性及可维护性 难于阅读、维护 结构清晰,便于阅读、维护

数据和显示的关系 内容描述与显示方式整合为一体

内容描述与显示方式相分离

保值性 不具有保值性 具有保值性

编辑及浏览工具 已有大量的编辑、浏览工具

编辑、浏览工具尚不成熟

Page 16: XML 语言 及其应用

置标语言家谱表

XML和 Html比较

GML(1969)

SGML(1985)

XML(1998)

HTML(1993)

XHTML SVG SMIL HDML OEB…

通用置标语言

标准通用置标语言

可扩展置标语言

超文本置标语言

可扩展超文本置标语言

可缩放矢量图形语言

同步多媒体综合语言

手持设备置标语言

开放电子结构规范

Page 17: XML 语言 及其应用

Sources

• Major Sources:– http://www.cis.upenn.edu/~cis550/slides/

xml.ppt CIS550 Course Notes, U. Penn, source for many slides

– http://www.cs.technion.ac.il/~oshmu/236804 - Seminar in Computer Science 4: XML - Technology, Systems and Theory

– http://dom4j.org

Page 18: XML 语言 及其应用

Agenda• Short Introduction to XML

– What is XML– Structure and Terminology– JAVA APIs for XML: an Overview

• dom4j– Parsing an XML document– Writing to an XML document

• Xpath– Xpath Queries– Xpath in dom4j

• References

Page 19: XML 语言 及其应用

The Structure of XML

• XML consists of tags and text

• Tags come in pairs <date> ...</date>

• They must be properly nested

<date> <day> ... </day> ... </date> --- good

<date> <day> ... </date>... </day> --- bad

Page 20: XML 语言 及其应用

XML text

• XML has only one “basic” type -- text. It is bounded by tags e.g.

<title> The Big Sleep </title> <year> 1935 </ year> --- 1935 is still

text• XML text is called PCDATA (for parsed character

data). • It uses a 16-bit encoding.

Page 21: XML 语言 及其应用

XML structure

• Nesting tags can be used to express various structures. E.g. A tuple (record):

<person><name> Jeff Cohen</name><tel> 04-828-1345 </tel><tel> 054-470-778 </tel><email> [email protected] </email>

</person>

Page 22: XML 语言 及其应用

XML structure (cont.)

• We can represent a list by using the same

tag repeatedly:

<addresses> <person> ... </person> <person> ... </person> <person> ... </person> ...</addresses>

Page 23: XML 语言 及其应用

XML structure (cont.)

• Nested tags can be part of a list too:<addresses>

<person><name> Yossi Orr</name><tel> 04-828-1345 </tel><email> [email protected] </email>

</person><person>

<name> Irma Levy</name><tel> 03-426-1142 </tel><email>[email protected]</email>

</person></addresses>

Page 24: XML 语言 及其应用

Terminology• The segment of an XML document between an opening and

a corresponding closing tag is called an element.• Meta date about an element can appear in an attribute.

<person type=“Friend”> <name>Ortal Derech</name>

<tel>04-8732122</tel> <tel>054-646888</tel>

<email>[email protected]</email> </person>

element

element, a sub-elementof

attribute

text

Page 25: XML 语言 及其应用

XML is tree-like

person

name emailtel tel

Malcolm Atchison

(215) 898 4321

(215) 898 4321

[email protected]

Page 26: XML 语言 及其应用

A Complete XML Document<?XMLversion ="1.0" encoding="UTF-8"

standalone="no"?>

<!DOCTYPE addresses SYSTEM "http://www.technion.ac.il/~erant/addresses.dtd">

<addresses>

<person>

<name> Jeff Cohen</name>

<tel> 04-828-1345 </tel>

<tel> 054-470-778 </tel>

<email> [email protected] </email>

</person>

</addresses>

Tells whether or not this document references an external entity or an external data type specification

Page 27: XML 语言 及其应用

XML Structure Definitions• DTD

– Document Type Definition – defines structure constraints for XML documents

• XML Schema– Same as DTD, more powerful because it includes facilities

to specify the data type of elements and it is based on XML. • Namespaces

– Namespaces are a way of preventing name clashes among elements from more than one source within the same XML document.

Page 28: XML 语言 及其应用

More Standards• Xpath

– XML Path Language, a language for locating parts of an XML document.

• Xquery– A query language for XML documents (like SQL…).

• XSLT– XSL Transformations, a language for transforming

XML documents into other XML documents.• RDF

– Resource Description Framework. A formal knowledge model from the World Wide Web.

Page 29: XML 语言 及其应用

Why Is XML Important?

• Because it exists, and everybody uses it.

• Plain Text - you can create and edit files with anything.

• Data Identification - XML tells you what kind of data you have, not how to display it.

• Separation from style.

• Hierarchical, and easily processed.

Page 30: XML 语言 及其应用

An Overview of the APIs• JAXP: Java API for XML Processing

– It provides a common interface for creating and using the standard SAX, DOM, and XSLT APIs.

• JAXB: Java Architecture for XML Binding – defines a mechanism for writing out Java objects as

XML.• JDOM

– Represents an XML file as a tree of objects (sophisticated version of DOM)

• dom4j– Lightweight version of JDOM.

Page 31: XML 语言 及其应用

Agenda

• Introduction to XML– What is XML– Structure and Terminology– JAVA APIs for XML: an Overview

• dom4j– Parsing an XML document– Writing to an XML document

• Xpath– Xpath Queries– Xpath in dom4j

• References

Page 32: XML 语言 及其应用

dom4j

• An Open Source XML framework for Java.

• Allows you to read, write, navigate, create and modify XML documents.

• Integrates with DOM and SAX.

• Full XPath support.

• XSLT Support.

Page 33: XML 语言 及其应用

Download and Use• Go to: http://dom4j.org.• Go to http://dom4j.org/download.html, and

download the latest release (current = 1.4).• Unzip.• Don’t forget the classpath. When working in an

IDE, don’t forget to add the log4j.jar library.• Javadoc: http://dom4j.org/apidocs/index.html.• Quick start guide: http://dom4j.org/guide.html.

Page 34: XML 语言 及其应用

Opening an XML Document

import org.dom4j.*;public class TestDom4j {

public Document parse(String id) throws DocumentException{

SAXReader reader = new SAXReader();Document document = reader.read(id);return document;

}}

We can read: file, URL, InputStream, String

Page 35: XML 语言 及其应用

Example XML File

<?xml version="1.0" encoding="UTF-8" ?><salesdata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Documents and Settings\eran\My Documents\Academic\Courses\XML\xpath_ass_schema.xsd">

<year><theyear>1997</theyear><region><name>central</name><sales unit="millions">34</sales></region><region><name>east</name><sales unit="millions">34</sales></region><region><name>west</name><sales unit="millions">32</sales></region>

</year><year>

<theyear>1998</theyear><region><name>east</name><sales unit="millions">35</sales></region>region><name>west</name><sales unit="millions">42</sales> </region> 

</year></salesdata>

Page 36: XML 语言 及其应用

Accessing XML Elements

public void dump(Document document) throws DocumentException{

Element root = document.getRootElement();for (Iterator i = root.elementIterator(); i.hasNext(); ) {

Element element = (Element)i.next();System.out.println(element.getQualifiedName());System.out.println(element.getTextTrim());System.out.println(element.elementText("theyear"));

}}

Accessing root element

Retrieving child elements

Retrieving element text

Retrieving element name

Retrieving the text of the child element “theyear”

Page 37: XML 语言 及其应用

Accessing XML Elements – cont’d

• What will be the output of dump()?

year

1997year

1998

Why?

Page 38: XML 语言 及其应用

Accessing XML Elements Recursively

public void go(Element element, int depth){for (int d=0; d<depth; d++){

System.out.print(" ");}System.out.print(element.getQualifiedName());System.out.println(" "+ element.getTextTrim());for (Iterator i = element.elementIterator(); i.hasNext(); ) {

Element son = (Element)i.next();go(son, depth+1);

}}

What will be the output?

Page 39: XML 语言 及其应用

Accessing Recursively – cont’dsalesdata year theyear 1997 region name central sales 34 region name east sales 34 region name west sales 32 year theyear 1998 region name east sales 35 region name west sales 42

The whole XML tree, element names + values

Page 40: XML 语言 及其应用

Creating an XML document

public Document createDocument() {Document document = DocumentHelper.createDocument();Element root = document.addElement("phonebook");

Element address1 = root.addElement("address").addAttribute("name", "Yuval").addAttribute("category", "family").addText("Ehud 3, Jerusalem");

Element address2 = root.addElement("address").addAttribute("name", "Ortal").addAttribute("category", "friends").addText("Kibbutz Givaat Haim");return document;

}

Creating root element

Adding elementsWhat will we get when running go()?

Page 41: XML 语言 及其应用

Creating an XML document – cont’d

phonebook address Ehud 3, Jerusalem address Kibbutz Givaat Haim

XML tree structure of the new document

FileWriter out = new FileWriter("C:\\addresses.xml");document.write(out);String XML = document.asXML()

Writing the XML document to a fileRetrieving the

XML itself as string

Page 42: XML 语言 及其应用

Client Programpublic static void main(String[] args) {

Foo foo = new Foo();try{

Document doc = foo.parse("C\\sales.xml");foo.dump(doc);foo.go(doc.getRootElement(), 0);foo.xpath(doc);Document newDoc = foo.createDocument();foo.go(newDoc.getRootElement(), 0);FileWriter out = new FileWriter( "C:\\addresses.xml" );newDoc.write(out);

}catch (Exception E){

System.out.println(E);}

}

Opening the file

Dumping and printed recursively

Creating a new document

Page 43: XML 语言 及其应用

Agenda• Introduction to XML

– What is XML– Structure and Terminology– JAVA APIs for XML: an Overview

• dom4j– Parsing an XML document– Writing to an XML document

• Xpath– Xpath Queries– Xpath in dom4j

• References

Page 44: XML 语言 及其应用

Xpath - Introduction

• XML Path Language. XPath is a language for addressing parts of an XML document.

• Enables node locating and retrieving, very much like directory accessing in file systems.

• Limited (but not bad) filtering and querying abilities.

• Retrieved the actual PCDATA or node sets

Page 45: XML 语言 及其应用

Xpath – Simple Path Selection

Xpath Expression: /salesdata/year/theyear

<theyear>1997</theyear>

<theyear>1998</theyear>

/salesdata/year[2]/theyear

<theyear>1998</theyear>

“/” signifies child-of

Filtering the level – getting only the second year element

Page 46: XML 语言 及其应用

Xpath – Conditions

/salesdata/year/region[sales > 34]

<region>

<name>east</name>

<sales unit="millions">35</sales>

</region>

<region>

<name>west</name>

<sales unit="millions">42</sales>

</region>

Going down to region, and filtering according to the sales element

/salesdata/year/region[sales > 34]/name

?

Page 47: XML 语言 及其应用

Xpath – Traveling Up the Tree

/salesdata/year/region[sales > 34]/parent::year/theyear

<theyear>1998</theyear>

Going up the XML tree (and then down again)

Page 48: XML 语言 及其应用

Xpath – Traveling Down Fast/descendant::sales

<sales unit="millions">34</sales>

<sales unit="millions">34</sales>

<sales unit="millions">32</sales>

<sales unit="millions">35</sales>

<sales unit="millions">42</sales>

./*/sales

Going all the way down, until the sales element

Same same

Page 49: XML 语言 及其应用

Xpath – Advanced Queries• The years (text nodes) for which sales data exists:

//region[name=\"west\" and sales > 32]/sales[@unit='millions']/ancestor::year/theyear

<theyear>1998</theyear>

Logical operators

Accessing attributes

ancestor is same as parent but goes all the way up to year

Page 50: XML 语言 及其应用

Xpath – Advanced Queries (cont’d)

• The years (text nodes) in which the west region sales were higher than the east region sales; sales may be expressed in thousands or in millions:

year[region[name="west"]/sales[@unit='millions'*1000 or @unit='thousands'] > region[name="east"]/sales[@unit='millions‘*1000 or @unit='thousands']]/theyear/text()

Page 51: XML 语言 及其应用

Xpath in dom4j

• Xpath queries can be used in dom4j:

public void xpath(Document document) {XPath xpathSelector =

DocumentHelper.createXPath("/salesdata/year/theyear");List results =

xpathSelector.selectNodes(document);for (Iterator iter = results.iterator();

iter.hasNext(); ) { Element element = (Element) iter.next(); System.out.println(element.asXML());

}}

Xpath expression is fed to the xpathSelector

The nodes are selected from the document, according to the xpath query

Page 52: XML 语言 及其应用

Agenda• Introduction to XML

– What is XML– Structure and Terminology– JAVA APIs for XML: an Overview

• dom4j– Parsing an XML document– Writing to an XML document

• Xpath– Xpath Queries– Xpath in dom4j

• References

Page 53: XML 语言 及其应用

References - XML• XML tutorial:

– http://www.w3schools.com/xml/default.asp

• XML Specification from w3c:– http://www.w3.org/XML/

• The Java/XML Tutorial:– http://java.sun.com/xml/tutorial_intro.html

• DTD Tutorial:– http://www.xmlfiles.com/dtd/

• XML Schema Tutorial:– http://www.w3schools.com/schema/default.asp

• XML Schema Resource Page:– http://www.w3.org/XML/Schema

Page 54: XML 语言 及其应用

dom4j

• Web site:– http://dom4j.org/

• Javadocs:– http://dom4j.org/apidocs/index.html

• Quick Start:– http://dom4j.org/guide.html

• Cookbook (main functionality):– http://dom4j.org/cookbook.html

Page 55: XML 语言 及其应用

Xpath

• Xpath specification:– http://www.w3.org/TR/xpath

• Xpath tutorial:– http://www.w3schools.com/xpath/default.asp

• Xpath tutorial (extended):– http://www.zvon.org/xxl/XPathTutorial/General/

examples.html

• Xpath reference:– http://www.vbxml.com/xsl/XPathRef.asp