XML Parsers Parsers What is a parser A

  • Slides: 24
Download presentation
XML Parsers

XML Parsers

Parsers What is a parser? � A program that analyses the grammatical structure of

Parsers What is a parser? � A program that analyses the grammatical structure of an input, with respect to a given formal grammar � The parser determines how a sentence can be constructed from the grammar of the language by describing the atomic elements of the input and the relationship among them

XML-Parsing Standards We will consider two parsing methods that implement W 3 C standards

XML-Parsing Standards We will consider two parsing methods that implement W 3 C standards for accessing XML � SAX (Simple API for XML) � event-driven parsing � “serial access” protocol � Read only API � DOM (Document Object Model) � convert XML into a tree of objects � “random access” protocol � Can update XML document (insert/delete nodes)

SAX Parser � SAX = Simple API for XML � XML is read sequentially

SAX Parser � SAX = Simple API for XML � XML is read sequentially � When a parsing event happens, the parser invokes the corresponding method of the corresponding handler � The handlers are programmer’s implementation of standard Java API (i. e. , interfaces and classes) � Similar to an I/O-Stream, goes in one direction

Sample Data Orders Data in XML: several orders, each with several items each item

Sample Data Orders Data in XML: several orders, each with several items each item has a part number and a quantity <orders> <order> <onum>1020</onum> <taken. By>1000</taken. By> <customer>1111</customer> <rec. Date>10 -DEC 94</rec. Date> <items> <item> <pnum>10506</pnum> <quantity>1</quantity> </item> <pnum>10507</pnum> <quantity>1</quantity> </item> <pnum>10508</pnum> <quantity>2</quantity> </item> <pnum>10509</pnum> <quantity>3</quantity> </items> </order>. . . </orders>

Sample Data Orders Data in XML: several orders, each with several items each item

Sample Data Orders Data in XML: several orders, each with several items each item has a part number and a quantity <orders> start. Document <order> <onum>1020</onum> <taken. By>1000</taken. By> <customer>1111</customer> <rec. Date>10 -DEC 94</rec. Date> <items> <item> <pnum>10506</pnum> <quantity>1</quantity> </item> Parsing Event <item> <pnum>10507</pnum> <quantity>1</quantity> </item> <pnum>10508</pnum> <quantity>2</quantity> </item> <pnum>10509</pnum> <quantity>3</quantity> </items> </order>. . . end. Document </orders>

Sample Data Orders Data in XML: several orders, each with several items each item

Sample Data Orders Data in XML: several orders, each with several items each item has a part number and a quantity <item> <orders> <pnum>10507</pnum> <order> <quantity>1</quantity> <onum>1020</onum> </item> <taken. By>1000</taken. By> <item> <customer>1111</customer> <pnum>10508</pnum> <rec. Date>10 -DEC-94</rec. Date> <quantity>2</quantity> <items> </item> <item> <pnum>10506</pnum> <pnum>10509</pnum> end. Element <quantity>1</quantity> <quantity>3</quantity> </item> </items> </order> start. Element. . . </orders>

Sample Data Orders Data in XML: several orders, each with several items each item

Sample Data Orders Data in XML: several orders, each with several items each item has a part number and a quantity <orders> <order> <onum>1020</onum> <taken. By>1000</taken. By> <customer>1111</customer> <rec. Date>10 -DEC-94</rec. Date> <items> <item> characters <pnum>10506</pnum> <quantity>1</quantity> </item> <pnum>10507</pnum> <quantity>1</quantity> </item> <pnum>10508</pnum> <quantity>2</quantity> </item> <pnum>10509</pnum> <quantity>3</quantity> </items> </order>. . . </orders>

SAX Parsers <? xml version="1. 0"? >. . . SAX Parser When you see

SAX Parsers <? xml version="1. 0"? >. . . SAX Parser When you see the start of the document do … When you see the start of an When you see element do … the end of an element do …

Used to create a SAX Parser Handles document events: start tag, end tag, etc.

Used to create a SAX Parser Handles document events: start tag, end tag, etc. Handles Parser Errors Handles DTD Handles Entities

SAX API Two important classes in the SAX API: SAXParser and Handler. Base. A

SAX API Two important classes in the SAX API: SAXParser and Handler. Base. A new SAXParser object is created by: public SAXParser() Register a SAX handler with the parser object to receive notifications of various parser events by: public void set. Document. Handler(Document. Handler h) A similar method is available to register an error handler: public void set. Error. Handler(Error. Handler h)

SAX API - Continued � The Handler. Base class is a default base class

SAX API - Continued � The Handler. Base class is a default base class for all handlers. � It implements the default behavior for the various handlers. � Application writers extend this class by rewriting the following event handler methods: public public void void start. Document() throws SAXException end. Document() throws SAXException start. Element() throws SAXException end. Element() throws SAXException characters() throws SAXException warning() throws SAXException error() throws SAXException

DOM Parser � DOM = Document Object Model � Parser creates a tree object

DOM Parser � DOM = Document Object Model � Parser creates a tree object out of the document � User accesses data by traversing the tree � The tree and its traversal conform to a W 3 C standard � The API allows for constructing, accessing and manipulating the structure and content of XML documents

<? xml version="1. 0"? > <!DOCTYPE countries SYSTEM "world. dtd"> <countries> <country continent="&as; ">

<? xml version="1. 0"? > <!DOCTYPE countries SYSTEM "world. dtd"> <countries> <country continent="&as; "> <name>Israel</name> <population year="2001">6, 199, 008</population> <city capital="yes"><name>Jerusalem</name></city> <city><name>Ashdod</name></city> </country> <country continent="&eu; "> <name>France</name> <population year="2004">60, 424, 213</population> </country> </countries>

The DOM Tree

The DOM Tree

Using a DOM Tree XML File DOM Parser DOM Tree A P I Application

Using a DOM Tree XML File DOM Parser DOM Tree A P I Application

The Node Interface Ø The nodes of the DOM tree include Ø a special

The Node Interface Ø The nodes of the DOM tree include Ø a special root (denoted document) Ø element nodes Ø text nodes and CDATA sections Ø attributes Ø comments Ø and more. . . Ø Every node in the DOM tree implements the Node interface

Node Navigation Ø Every node has a specific location in tree Ø Node interface

Node Navigation Ø Every node has a specific location in tree Ø Node interface specifies methods for tree navigation Ø Node get. First. Child(); Ø Node get. Last. Child(); Ø Node get. Next. Sibling(); Ø Node get. Previous. Sibling(); Ø Node get. Parent. Node(); Ø Node. List get. Child. Nodes(); Ø Named. Node. Map get. Attributes()

Node Navigation (cont) get. Previous. Sibling() get. First. Child() get. Child. Nodes() get. Parent.

Node Navigation (cont) get. Previous. Sibling() get. First. Child() get. Child. Nodes() get. Parent. Node() get. Last. Child() get. Next. Sibling()

SAX vs DOM Parsing: Efficiency Ø The DOM object built by DOM parsers is

SAX vs DOM Parsing: Efficiency Ø The DOM object built by DOM parsers is usually complicated and requires more memory storage than the XML file itself Ø A lot of time is spent on construction before use Ø For some very large documents, this may be impractical Ø SAX parsers store only local information that is encountered during the serial traversal Ø Hence, programming with SAX parsers is, in general, more efficient

Programming using SAX is Difficult Ø In some cases, programming with SAX is difficult:

Programming using SAX is Difficult Ø In some cases, programming with SAX is difficult: Ø How can we find, using a SAX parser, elements e 1 with ancestor Ø How can we find, using a SAX parser, elements e 1 that have a e 2? descendant element e 2? Ø How can we find the element attribute of e 2? e 1 referenced by the IDREF

Node Navigation Ø SAX parsers do not provide access to elements other than the

Node Navigation Ø SAX parsers do not provide access to elements other than the one currently visited in the serial (DFS) traversal of the document Ø In particular, Ø They do not read backwards Ø They do not enable access to elements by ID or name Ø DOM parsers enable any traversal method Ø Hence, using DOM parsers is usually more comfortable

More DOM Advantages Ø DOM object compiled XML Ø You can save time and

More DOM Advantages Ø DOM object compiled XML Ø You can save time and effort if you send and receive DOM objects instead of XML files Ø But, DOM object are generally larger than the source Ø DOM parsers provide a natural integration of XML reading and manipulating Ø e. g. , “cut and paste” of XML fragments

Which should we use? DOM vs. SAX � If your document is very large

Which should we use? DOM vs. SAX � If your document is very large and you only need to extract only a few elements – use SAX � If you need to manipulate (i. e. , change) the XML – use DOM � If you need to access the XML many times – use DOM (assuming the file is not too large)