Date post: | 19-Dec-2015 |
Category: |
Documents |
View: | 220 times |
Download: | 0 times |
95-733 Internet Technologies
2
Course Web Site
http://www.andrew.cmu.edu/~mm6
95-733 Internet Technologies
4
Structure of the Course
•Lectures / class participation
•Homeworks (programming)
•Final exam
95-733 Internet Technologies
5
Readings
The required text is “XML and Java” Second edition Addison-Wesley
Readings will be assigned each week.
Readings from the web will also be assigned.
95-733 Internet Technologies
7
Selected Course Topics
• DTD’s • XSDL and JAXB• XSLT • XPath, Xlink• Java Server Faces• XML Encryption and XML Digital Signature• RDF and RDFS• OWL
95-733 Internet Technologies
9
IntroductionIn this course we will be concerned with B2B applications.
We will study how applications can send, receive,verify and manipulate XML documents.
Definition: By Web Application we mean a distributed application based on Web technologies: HTTP, HTML, and the family of XML technologies.
95-733 Internet Technologies
10
IntroductionDefinition: By traditional three-tier application we mean applications consisting of:
First tier – Browsers that act as a human interface Second tier – a program running in a web server Third tier – backend systems that provide databases and transaction services
Let’s replace the browser with a program…
95-733 Internet Technologies
11
From web for eyeballs to web for programs
Consider a PowerWarning application allows usersTo register their geographical position and their temperature concerns.
Users will receive e-mail when the temperatureexceeds the user specified parameters.
95-733 Internet Technologies
12
[1] <html>[2] <head>[3] <title>Weather Report</title>[4] </head>[5] <body>[6] <h2>Weather Report -- White Plains, NY </h2>[7] <table border=1>[8] <tr><td>Date/Time</td><td align=center>11 AM EDT Sat Jul 25
1998</td></tr>[9] <tr><td>Current Tem.</td><td align=center>70°</td></tr>[10] <tr><td>Today’s High</td><td align=center>82°</td></tr>[11] <tr><td>Today’s Low</td><td align=center>62°</td><tr>[12] </table>[13] </body>[14] </html>
Suppose that we know that the weather information is availablefrom the web at http://www.xweather.com/White_Plains_NY_US.html.
95-733 Internet Technologies
13
•Strategy 1:
For the current temperature of White Plains, go to line 9,column 46 of the page and continue until reaching the nextampersand.
•Strategy 2:
For the current temperature of the White Plains, go to thefirst <table> tag, then go to the second <tr> tag within thetable, and then go to the second <tg> tag within the row.
Neither of these seems very appealing…
95-733 Internet Technologies
14
<?xml version=“1.0”?>
<!DOCTYPE WeatherReport SYSTEM
“http>//www.xweather.com/WeatherReport.dtd”>
<WeatherReport>
<City>White Plains</City>
<State>NY</State>
<Date>Sat Jul 25 1998</Date>
<Time>11 AM EDT</Time>
<CurrTemp unit=“Farenheit”>70</CurrTemp>
<High unit=“Farenheit”>82</High>
<Low unit=“Farenheit”>62</Low>
</Weather Report>
XML would help
95-733 Internet Technologies
15
•Strategy 3:
For the current temperature of White Plains, N.Y., go to the <CurrTemp> tag.
95-733 Internet Technologies
16
XML
Mobile users
PC usersHttp://www.xweather.com
WeatherReportapplication
WML
HTML
PowerWarningapplication
Applicationprograms
XML
Email notifications
RegistrationsXML
XSLT
95-733 Internet Technologies
17
XML
• Extensible Markup Language (really a meta- language)• Generic syntax (not like HTML) • Simple, human-readable tags• From Web for eyeballs to Web for programs• Tools exist that allows us to easily process any type of XML document
95-733 Internet Technologies
19
Department.xml<?xml version="1.0" encoding="utf-8"?><department> <employee id="J.D"> <name>John Doe</name> <email>[email protected]</email> </employee>
<employee id="B.S"> <name>Bob Smith</name> <email>[email protected]</email> </employee>
95-733 Internet Technologies
20
<employee id="A.M"> <name>Alice Miller</name> <url href="http://www.foo.com/~amiller/"/> </employee></department>
95-733 Internet Technologies
21
SimpleParse.java// Download Xerces from http://xml.apache.org/xerces2-j/index.html// Two Jar files are needed- xercesImpl.jar and xmlParserAPIs.jar// add these to the classpath
/** * From XML and Java Chapter 2 SimpleParse.java **/
import org.w3c.dom.Document;import org.apache.xerces.parsers.DOMParser;import org.xml.sax.SAXException;import java.io.IOException;
95-733 Internet Technologies
22
public class SimpleParse { public static void main(String[] argv) { if (argv.length != 1) { System.err.println( "Usage: java SimpleParse <filename>"); System.exit(1); } try {
// Creates a parser object DOMParser parser = new DOMParser(); // Parses an XML Document parser.parse(argv[0]); // Gets a Document object Document doc = parser.getDocument();
95-733 Internet Technologies
23
} catch (SAXException se) { System.out.println("Parser error found: " +se.getMessage()); System.exit(1); } catch (IOException ioe) {
System.out.println("IO error found: " + ioe.getMessage());
System.exit(1); } }}
D:\McCarthy\www\95-733\examples\chap02>java SimpleParse department.xml
D:\McCarthy\www\95-733\examples\chap02>
95-733 Internet Technologies
24
Let’s Introduce an Error
<?xml version="1.0" encoding="utf-8"?><department> <employee id="J.D"> <name>John Doe</name> <email>[email protected]</email> </employee>
<employee id="B.S"> <name>Bob Smith</name> <email>[email protected]</email> </employee>
This code is OK.
95-733 Internet Technologies
25
<employee id="A.M"> <name>Alice Miller <url href="http://www.foo.com/~amiller/"/> </employee></department>
Missing closing tag on name.
The document is not well-formed.
95-733 Internet Technologies
26
D:\McCarthy\www\95-733\examples\chap02>java SimpleParse department.xml[Fatal Error] department.xml:16:5: The element type "name" must be terminated by the matching end-tag "</name>".Parser error found: The element type "name" must be terminated by the matching end-tag "</name>".
After displaying the error status anexception was throw to the application
95-733 Internet Technologies
28
department-dtd.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE department SYSTEM "department.dtd"><department> <employee id="J.D"> <name>John Doe</name> <email>[email protected]</email> </employee>
<employee id="B.S"> <name>Bob Smith</name> <email>[email protected]</email> </employee>
95-733 Internet Technologies
29
<employee id="A.M"> <name>Alice Miller</name> <url href="http://www.foo.com/~amiller/"/> </employee></department>
95-733 Internet Technologies
30
department.dtd
<!ELEMENT department (employee)*><!ELEMENT employee (name, (email | url))><!ATTLIST employee id CDATA #REQUIRED><!ELEMENT name (#PCDATA)><!ELEMENT email (#PCDATA)><!ELEMENT url EMPTY><!ATTLIST url href CDATA #REQUIRED>
95-733 Internet Technologies
31
SimpleParseWithValidation.java
/** * SimpleParseWithValidation.java **/import org.w3c.dom.Document;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.SAXParseException;import org.xml.sax.ErrorHandler;import org.apache.xerces.parsers.DOMParser;import java.io.IOException;
95-733 Internet Technologies
32
public class SimpleParseWithValidation {
public static void main(String[] argv) { if (argv.length != 1) { System.err.println("Usage: java "+ "SimpleParseWigthValidation <filename>"); System.exit(1); } try { // Creates parser object DOMParser parser = new DOMParser(); // Sets an ErrorHandler parser.setErrorHandler(new MyErrorHandler());
95-733 Internet Technologies
33
// Tells the parser to validate documents parser.setFeature( "http://xml.org/sax/features/validation", true); // Parses an XML Document parser.parse(argv[0]); // Gets a Document object Document doc = parser.getDocument(); // Does something } catch (Exception e) { e.printStackTrace(); } }}
95-733 Internet Technologies
34
MyHandler.java
import org.xml.sax.ErrorHandler;import org.xml.sax.SAXException;import org.xml.sax.SAXParseException;
public class MyErrorHandler implements ErrorHandler {
/** Constructor. */ public MyErrorHandler(){ }
95-733 Internet Technologies
35
/** Warning. */ public void warning(SAXParseException ex) { System.err.println("[Warning] "+ getLocationString(ex)+": "+ ex.getMessage()); } /** Error. */ public void error(SAXParseException ex) { System.err.println("[Error] "+ getLocationString(ex)+": "+ ex.getMessage()); } /** Fatal error. */ public void fatalError(SAXParseException ex) { System.err.println("[Fatal Error] "+ getLocationString(ex)+": "+ ex.getMessage()); }
95-733 Internet Technologies
36
/** Returns a string of the location. */ private String getLocationString(SAXParseException ex) { StringBuffer str = new StringBuffer();
String systemId = ex.getSystemId(); if (systemId != null) { int index = systemId.lastIndexOf('/'); if (index != -1) systemId = systemId.substring(index + 1); str.append(systemId); } str.append(':'); str.append(ex.getLineNumber()); str.append(':'); str.append(ex.getColumnNumber()); return str.toString(); }}
Get the filename after the /’s.
95-733 Internet Technologies
37
Runs without error
D:\McCarthy\www\95-733\examples\chap02>java SimpleParseWithValidation department-dtd.xml
D:\McCarthy\www\95-733\examples\chap02>
95-733 Internet Technologies
38
Using the same dtd…
<!ELEMENT department (employee)*><!ELEMENT employee (name, (email | url))><!ATTLIST employee id CDATA #REQUIRED><!ELEMENT name (#PCDATA)><!ELEMENT email (#PCDATA)><!ELEMENT url EMPTY><!ATTLIST url href CDATA #REQUIRED>
95-733 Internet Technologies
39
Introduce an error<?xml version="1.0" encoding="utf-8"?><!DOCTYPE department SYSTEM "department.dtd"><department> <employee> <name>John Doe</name> <email>[email protected]</email> </employee>
<employee id="B.S"> <name>Bob Smith</name> <email>[email protected]</email> </employee>
95-733 Internet Technologies
40
<employee id="A.M"> <name>Alice Miller</name> <url href="http://www.foo.com/~amiller/"/> </employee></department>
D:\McCarthy\www\95-733\examples\chap02>java SimpleParseWithValidation department-dtd2.xml[Error] department-dtd2.xml:4:13: Attribute "id" is required and must be specified for element type "employee".
The parser does not throw an exception.
95-733 Internet Technologies
41
Make a fatal error (not well-formed)
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE department SYSTEM "department.dtd"><department> <employee id="J.D."> <name>John Doe</name> <email>[email protected]</email> </employee>
<employee id="B.S"> <name>Bob Smith</name> <someTag> id="A.M"> <email>[email protected]</email> </employee></department>
95-733 Internet Technologies
42
D:\McCarthy\www\95-733\examples\chap02>java SimpleParseWithValidation department-dtd2.xml
[Error] department-dtd2.xml:10:39: Element type "someTag" must be declared.[Fatal Error] department-dtd2.xml:12:5: The element type "someTag" must be terminated by the matching end-tag "</someTag>".org.xml.sax.SAXParseException: The element type "someTag" must be terminated bythe matching end-tag "</someTag>". at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) at SimpleParseWithValidation.main(SimpleParseWithValidation.java:31)
An exception is thrown to the callerfor this Fatal Error.
95-733 Internet Technologies
43
JAXP
• An API but really an abstraction layer• Does not provide a new means of parsing XML• Does not add to DOM, SAX or XSLT• Does not provide new functionality in handling XML
• JAXP enables applications to parse and transform XML documents independent of a particular XML processing implementation. Just change a system variable or classpath setting and you change parsers.
• Six classes included in JDK1.4 in javax.xml.parsers package
95-733 Internet Technologies
44
SimpleParseJAXP.java/** * SimpleParseJAXP.java **/import java.io.IOException;import org.w3c.dom.Document;import org.xml.sax.ErrorHandler;import org.xml.sax.SAXException;import org.xml.sax.SAXParseException;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.FactoryConfigurationError;import javax.xml.parsers.ParserConfigurationException;
Note: no mentionof xerces.
95-733 Internet Technologies
45
public class SimpleParseJAXP {
public static void main(String[] argv) { if (argv.length != 1) { System.err.println( "Usage: java SimpleParseJAXP <filename>"); System.exit(1); } try { // Creates document builder factory DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // Tells the parser to validate documents factory.setValidating(true);
95-733 Internet Technologies
46
// Tells the parser to be aware namespaces factory.setNamespaceAware(true); // Creates builder object DocumentBuilder builder = factory.newDocumentBuilder(); // Sets an ErrorHandler builder.setErrorHandler(new MyErrorHandler()); // Parses the document Document doc = builder.parse(argv[0]); } catch (ParserConfigurationException pe) { pe.printStackTrace(); } catch (SAXException se) { se.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } }}