Diapositiva 1

Download Report

Transcript Diapositiva 1

Łódź, 29 października 2012 roku
Technologie
mgr inż. Tomasz Węgliński
email: [email protected]
www: http://www.tweglinski.pl
WYKŁAD 8
XML & Java
2/15
Plan wykładu
 Na wykładzie omówimy sobie następujące zagadnienia:
 Wczytywanie dokumentów XML
 Parsowanie XML za pomocą DOM i SAX
 Tworzenie dokumentów XML
 Kontrola poprawności dokumentów XML
 Wyszukiwanie informacji i XPath
 Transformacje XSL
Na następnym wykładzie…
Wykład 8: XML & Java
3/15
Literatura
 Przykłady wykorzystane w wykładzie pochodzą z książki:
Źródło: http://helion.pl
Wykład 8: XML & Java
4/15
Dlaczego
Java i XML?
Zarówno Java jak i XML to języki darmowe i niezależne od platformy.
Java + XML = przenośny kod + przenośne dane
- Sun Microsystems (obecnie Oracle) -
 W drugiej połowie lat 90. IBM, Apache i inne firmy oraz organizacje
opracowały szereg doskonałych bibliotek języka Java, które służyły
do przetwarzania języka XML.
 Począwszy od wersji Java SE 1.4, firma Sun umieściła najważniejsze
z nich w standardowej edycji platformy Java.
 Obecnie Java udostępnia szerszy wachlarz interfejsów, parserów,
procesorów, struktur publikacji i narzędzi dla XML-a niż jakikolwiek
inny język programowania.
Wykład 8: XML & Java
5/15
Narzędzia
 Bardziej znane parsery, to:
 Apache Xerces, http://xml.apache.org
 IBM XML4J, http://alphaworks.ibm.com
 James Clark's XP, www.jclark.com
 OpenXML, www.openxml.org
 Oracle XML Parser, http://technet.oracle.com
 Tim Bray's Lark and Larval, www.textuality.com
 Najważniejsze procesory XML, to:
 Apache Xalan, http://xml.apache.org
 James Clarks's XT,www.jclark.com
 Lotus XSL Processor, www.alphaworks.ibm.com
 Oracle XSL Processor, http://technet.oracle.com
 Keith Visco's XSL:P, www.clc-marketing.com
 Michalel Kay's SAXON, http://users.iclway.co.uk
Wykład 8: XML & Java
6/15
Projekt
Apache
 W ramach projektu Apache XML powstało wiele inicjatyw
mających na celu zaproponowanie nowych otwartych
standardów opartych na XML.
 Projektami opartymi na Javie, są m.in.:
 Xerces - parser XML
 Xalan - procesor stylów XSLT
 Cocoon - publikacje webowe bazujące na XML
 FOP - procesor XSL-FO
 Xang - dynamiczne strony działające na serwerze w języku
JavaScript
 SOAP - Simple Object Access Protocol
 Batik - narzędzie dla SVG (Scalable Vector Graphic)
 Crimson - parser XML, rozwinięcie parsera X SUN'a
Wykład 8: XML & Java
7/15
Wczytywanie
XML
 Wczytywanie dokumentu XML
Procedura:
1. Aby wczytać dokument XML potrzebny jest obiekt klasy
DocumentBuilder, który uzyskamy z fabryki
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
2. Wczytujemy plik z lokalnych zasobów:
File f = . . .
Document doc = builder.parse(f);
Lub też z adresu URL:
URL u = . . .
Document doc = builder.parse(u);
Lub też z dowolnego strumienia wejściowego:
InputStream in = . . .
Document doc = builder.parse(in);
Wykład 8: XML & Java
8/15
Wczytywanie
XML
 Wczytywanie dokumentu XML (c.d.)
 obiekt typu Document reprezentuje dokument XML za pomocą
struktury drzewiastej utworzonej w pamięci.
 Składa się ona z obiektów, które implementują interfejs Node
oraz jego interfejsy pochodne
Wykład 8: XML & Java
9/15
Tworzenie
XML
 Tworzenie dokumentu XML
Procedura:
1. Tworzenie drzewa DOM, generacja pustego dokumentu za pomocą
metody newDocument klasy DocumentBuilder:
Document doc = builder.newDocument();
2. Do tworzenia elementów dokumentu wykorzystamy metodę klasy
Document:
Element rootElement = doc.createElement(rootName)
Element childElement = doc.createElement(childName);
3. Do tworzenia węzłów tekstowych użyjemy f-kcji createTextNode:
Text textNode = doc.createTextNode(textContents);
4. Dodajemy elementy do korzenia i odpowiednich węzłów:
doc.appendChild(rootElement);
rootElement.appendChild(childElement);
childElement.appendChild(textNode);
Wykład 8: XML & Java
10/15
Tworzenie
XML
 Tworzenie dokumentu XML (c.d.)
Procedura:
4. Atrybuty elementów określamy korzystając z metody setAttribute
klasy Element:
rootElement.setAttribute(name, value);
5. Jeżeli chcemy dodać element DOCTYPE:
Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, systemIdentifier);
t.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, publicIdentifier);
t.setOutputProperty(OutputKeys.INDENT, "yes");
t.setOutputProperty(OutputKeys.METHOD, "xml");
t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount",
"2");
t.transform(new DOMSource(doc),
new StreamResult(new FileOutputStream(file)));
Wykład 8: XML & Java
11/15
Walidacja
DTD
 Kontrola poprawności dokumentu XML względem jego DTD
Procedura:
1. Informujemy fabrykę DocumentBuilderFactory, aby wykorzystywała
weryfikację poprawności dokumentów:
factory.setValidating(true);
2. Aby parser ignorował odstępy między elementami (umyślne
tabulacje):
factory.setIgnoringElementContentWhitespace(true);
3. Instalujemy obiekt obsługi błędów, implementujący interfejs
ErrorHandler, który zawiera następujące trzy metody:
void warning(SAXParseException exception);
void error(SAXParseException exception);
void fatalError(SAXParseException exception);
Obiekt obsługi błędów instalujemy za pomocą metody:
builder.setErrorHandler(handler);
Wykład 8: XML & Java
13/15
Walidacja
DTD
 Dodatkowe metody:
Wykład 8: XML & Java
14/15
Walidacja
XML Schema
 Kontrola poprawności dokumentu XML względem XML Schema
Procedura – taka sama jak przy DTD jednakże:
1. Należy włączyć obsługę przestrzeni nazw nawet, gdy nie są one
używane w dokumencie XML:
factory.setNamespaceAware(true);
2. Przygotowujemy fabrykę do obsługi schematów za pomocą
następującego fragmentu kodu:
final String JAXP_SCHEMA_LANGUAGE =
"http://java.sun.com/xml/jaxp/properties/schemaLanguage";
final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
Zobaczmy to w praktyce!
Wykład 8: XML & Java
15/15