1 / 47

95-733 Internet Technologies

95-733 Internet Technologies. Lecture 1 Introduction. Course Web Site. http://www.andrew.cmu.edu/~mm6. Course TA. TBA. Structure of the Course. Lectures / class participation Homeworks (programming) Final exam. Readings. The required text is “XML and Java”

Download Presentation

95-733 Internet Technologies

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 95-733 Internet Technologies Lecture 1 Introduction

  2. Course Web Site http://www.andrew.cmu.edu/~mm6

  3. Course TA TBA

  4. Structure of the Course • Lectures / class participation • Homeworks (programming) • Final exam

  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.

  6. Grading • Homework (3-4) 60% • Final Exam 40%

  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

  8. Introduction XML and Java Chapter 1 Web Applications, XML, and Java

  9. Introduction In 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.

  10. Introduction Definition: 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…

  11. From web for eyeballs to web for programs Consider a PowerWarning application allows users To register their geographical position and their temperature concerns. Users will receive e-mail when the temperature exceeds the user specified parameters.

  12. Suppose that we know that the weather information is available from the web at http://www.xweather.com/White_Plains_NY_US.html. [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&#176;</td></tr> [10] <tr><td>Today’s High</td><td align=center>82&#176;</td></tr> [11] <tr><td>Today’s Low</td><td align=center>62&#176;</td><tr> [12] </table> [13] </body> [14] </html>

  13. Strategy 1: • For the current temperature of White Plains, go to line 9, • column 46 of the page and continue until reaching the next • ampersand. • Strategy 2: • For the current temperature of the White Plains, go to the • first <table> tag, then go to the second <tr> tag within the • table, and then go to the second <tg> tag within the row. Neither of these seems very appealing…

  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

  15. Strategy 3: • For the current temperature of White Plains, N.Y., go • to the <CurrTemp> tag.

  16. WeatherReport application Mobile users XSLT WML HTML XML PC users Http://www.xweather.com PowerWarning application XML Email notifications Registrations Application programs XML

  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

  18. Introduction XML and Java Chapter 2 Basics of Parsing Documents

  19. Department.xml <?xml version="1.0" encoding="utf-8"?> <department> <employee id="J.D"> <name>John Doe</name> <email>John.Doe@foo.com</email> </employee> <employee id="B.S"> <name>Bob Smith</name> <email>Bob.Smith@foo.com</email> </employee>

  20. <employee id="A.M"> <name>Alice Miller</name> <url href="http://www.foo.com/~amiller/"/> </employee> </department>

  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;

  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();

  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>

  24. Let’s Introduce an Error <?xml version="1.0" encoding="utf-8"?> <department> <employee id="J.D"> <name>John Doe</name> <email>John.Doe@foo.com</email> </employee> <employee id="B.S"> <name>Bob Smith</name> <email>Bob.Smith@foo.com</email> </employee> This code is OK.

  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.

  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 e nd-tag "</name>". After displaying the error status an exception was throw to the application

  27. Simple Validation

  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>John.Doe@foo.com</email> </employee> <employee id="B.S"> <name>Bob Smith</name> <email>Bob.Smith@foo.com</email> </employee>

  29. <employee id="A.M"> <name>Alice Miller</name> <url href="http://www.foo.com/~amiller/"/> </employee> </department>

  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>

  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;

  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());

  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(); } } }

  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(){ }

  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()); }

  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 file name after the /’s.

  37. Runs without error D:\McCarthy\www\95-733\examples\chap02>java SimpleParseWithValidation department-dtd.xml D:\McCarthy\www\95-733\examples\chap02>

  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>

  39. Introduce an error <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE department SYSTEM "department.dtd"> <department> <employee> <name>John Doe</name> <email>John.Doe@foo.com</email> </employee> <employee id="B.S"> <name>Bob Smith</name> <email>Bob.Smith@foo.com</email> </employee>

  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 specifi ed for element type "employee". The parser does not throw an exception.

  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>John.Doe@foo.com</email> </employee> <employee id="B.S"> <name>Bob Smith</name> <someTag> id="A.M"> <email>Bob.Smith@foo.com</email> </employee> </department>

  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 termi nated by the matching end-tag "</someTag>". org.xml.sax.SAXParseException: The element type "someTag" must be terminated by the 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 caller for this Fatal Error.

  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

  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 mention of xerces.

  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);

  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(); } } }

  47. Suppose we want Xerces to be our parser D:\McCarthy\www\95-733\examples\chap02>java -Djavax.xml.parsers.DocumentBuilderFactory= org.apache.xerces.jaxp.DocumentBuilderFactoryImpl SimpleParseJAXP department-dtd.xml

More Related