+ All Categories
Home > Documents > Introduction to XML

Introduction to XML

Date post: 20-Jul-2016
Category:
Upload: indrani009
View: 15 times
Download: 7 times
Share this document with a friend
Description:
Introduction to XML
69
Introduction to XML XML was designed to describe data and to focus on what data is.HTML was designed to display data and to focus on how data looks. What You Should Already Know Before you continue you should have a basic understanding of the following: HTML / XHTML JavaScript or VBScript If you want to study these subjects first, find the tutorials on our Home page . What is XML? XML stands for EXtensible Markup Language XML is a markup language much like HTML XML was designed to describe data XML tags are not predefined. You must define your own tags XML uses a Document Type Definition (DTD) or an XML Schema to describe the data XML with a DTD or XML Schema is designed to be self-descriptive XML is a W3C Recommendation XML is a W3C Recommendation The Extensible Markup Language (XML) became a W3C Recommendation 10. February 1998. You can read more about XML standards in our W3C tutorial . The main difference between XML and HTML XML was designed to carry data. XML is not a replacement for HTML. XML and HTML were designed with different goals: XML was designed to describe data and to focus on what data is. HTML was designed to display data and to focus on how data looks. HTML is about displaying information, while XML is about describing information. 1
Transcript
Page 1: Introduction to XML

Introduction to XMLXML was designed to describe data and to focus on what data is.HTML was designed to display data and to focus on how data looks.

What You Should Already Know

Before you continue you should have a basic understanding of the following:

HTML / XHTML JavaScript or VBScript

If you want to study these subjects first, find the tutorials on our Home page.

What is XML? XML stands for EXtensible Markup Language XML is a markup language much like HTML XML was designed to describe data XML tags are not predefined. You must define your own tags XML uses a Document Type Definition (DTD) or an XML Schema to describe the data XML with a DTD or XML Schema is designed to be self-descriptive XML is a W3C Recommendation

XML is a W3C Recommendation

The Extensible Markup Language (XML) became a W3C Recommendation 10. February 1998.

You can read more about XML standards in our W3C tutorial.

The main difference between XML and HTML

XML was designed to carry data.

XML is not a replacement for HTML.XML and HTML were designed with different goals:

XML was designed to describe data and to focus on what data is.HTML was designed to display data and to focus on how data looks.

HTML is about displaying information, while XML is about describing information.

XML does not DO anything

XML was not designed to DO anything.

1

Page 2: Introduction to XML

Maybe it is a little hard to understand, but XML does not DO anything. XML was created to structure, store and to send information.

The following example is a note to Tove from Jani, stored as XML:

<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

The note has a header and a message body. It also has sender and receiver information. But still, this XML document does not DO anything. It is just pure information wrapped in XML tags. Someone must write a piece of software to send, receive or display it.

XML is free and extensible

XML tags are not predefined. You must "invent" your own tags.

The tags used to mark up HTML documents and the structure of HTML documents are predefined. The author of HTML documents can only use tags that are defined in the HTML standard (like <p>, <h1>, etc.).

XML allows the author to define his own tags and his own document structure.

The tags in the example above (like <to> and <from>) are not defined in any XML standard. These tags are "invented" by the author of the XML document.

XML is a complement to HTML

XML is not a replacement for HTML.

It is important to understand that XML is not a replacement for HTML. In future Web development it is most likely that XML will be used to describe the data, while HTML will be used to format and display the same data.

My best description of XML is this: XML is a cross-platform, software and hardware independent tool for transmitting information.

XML in future Web development

XML is going to be everywhere.

We have been participating in XML development since its creation. It has been amazing to see how quickly the XML standard has been developed and how quickly a large number of software vendors have adopted the standard.

We strongly believe that XML will be as important to the future of the Web as HTML has been to the foundation of the Web and that XML will be the most common tool for all data manipulation and data transmission.

2

Page 3: Introduction to XML

XML Joke

Question: When should I use XML?

Answer: When you need a buzzword in your resume.

How can XML be Used?

It is important to understand that XML was designed to store, carry, and exchange data. XML was not designed to display data.

XML can Separate Data from HTML

With XML, your data is stored outside your HTML.

When HTML is used to display data, the data is stored inside your HTML. With XML, data can be stored in separate XML files. This way you can concentrate on using HTML for data layout and display, and be sure that changes in the underlying data will not require any changes to your HTML.

XML data can also be stored inside HTML pages as "Data Islands". You can still concentrate on using HTML only for formatting and displaying the data.

XML is used to Exchange Data

With XML, data can be exchanged between incompatible systems.

In the real world, computer systems and databases contain data in incompatible formats. One of the most time-consuming challenges for developers has been to exchange data between such systems over the Internet.

Converting the data to XML can greatly reduce this complexity and create data that can be read by many different types of applications.

XML and B2B

With XML, financial information can be exchanged over the Internet.

Expect to see a lot about XML and B2B (Business To Business) in the near future.

XML is going to be the main language for exchanging financial information between businesses over the Internet. A lot of interesting B2B applications are under development.

XML can be used to Share Data

3

Page 4: Introduction to XML

With XML, plain text files can be used to share data.

Since XML data is stored in plain text format, XML provides a software- and hardware-independent way of sharing data.

This makes it much easier to create data that different applications can work with. It also makes it easier to expand or upgrade a system to new operating systems, servers, applications, and new browsers. 

XML can be used to Store Data

With XML, plain text files can be used to store data.

XML can also be used to store data in files or in databases. Applications can be written to store and retrieve information from the store, and generic applications can be used to display the data.

XML can make your Data more Useful

With XML, your data is available to more users.

Since XML is independent of hardware, software and application, you can make your data available to other than only standard HTML browsers.

Other clients and applications can access your XML files as data sources, like they are accessing databases. Your data can be made available to all kinds of "reading machines" (agents), and it is easier to make your data available for blind people, or people with other disabilities.

XML can be used to Create new Languages

XML is the mother of WAP and WML.

The Wireless Markup Language (WML), used to markup Internet applications for handheld devices like mobile phones, is written in XML.

You can read more about WML in our WML tutorial.

If Developers have Sense

If they DO have sense, all future applications will exchange their data in XML.

The future might give us word processors, spreadsheet applications and databases that can read each other's data in a pure text format, without any conversion utilities in between.

We can only pray that Microsoft and all the other software vendors will agree.

XML Syntax

4

Page 5: Introduction to XML

The syntax rules of XML are very simple and very strict. The rules are very easy to learn, and very easy to use.

Because of this, creating software that can read and manipulate XML is very easy.

An example XML document

XML documents use a self-describing and simple syntax.

<?xml version="1.0" encoding="ISO-8859-1"?><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

The first line in the document - the XML declaration - defines the XML version and the character encoding used in the document. In this case the document conforms to the 1.0 specification of XML and uses the ISO-8859-1 (Latin-1/West European) character set.

The next line describes the root element of the document (like it was saying: "this document is a note"):

<note>

The next 4 lines describe 4 child elements of the root (to, from, heading, and body):

<to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body>

And finally the last line defines the end of the root element:

</note>

Can you detect from this example that the XML document contains a Note to Tove from Jani? Don't you agree that XML is pretty self-descriptive?

All XML elements must have a closing tag

With XML, it is illegal to omit the closing tag.

In HTML some elements do not have to have a closing tag. The following code is legal in HTML:

5

Page 6: Introduction to XML

<p>This is a paragraph<p>This is another paragraph

In XML all elements must have a closing tag, like this:

<p>This is a paragraph</p><p>This is another paragraph</p> 

Note: You might have noticed from the previous example that the XML declaration did not have a closing tag. This is not an error. The declaration is not a part of the XML document itself. It is not an XML element, and it should not have a closing tag.

XML tags are case sensitive

Unlike HTML, XML tags are case sensitive.

With XML, the tag <Letter> is different from the tag <letter>.

Opening and closing tags must therefore be written with the same case:

<Message>This is incorrect</message>

<message>This is correct</message>

All XML elements must be properly nested

Improper nesting of tags makes no sense to XML.

In HTML some elements can be improperly nested within each other like this:

<b><i>This text is bold and italic</b></i>

In XML all elements must be properly nested within each other like this:

<b><i>This text is bold and italic</i></b>

All XML documents must have a root element

All XML documents must contain a single tag pair to define a root element.

All other elements must be within this root element.

6

Page 7: Introduction to XML

All elements can have sub elements (child elements). Sub elements must be correctly nested within their parent element:

<root> <child> <subchild>.....</subchild> </child></root>

Attribute values must always be quoted

With XML, it is illegal to omit quotation marks around attribute values. 

XML elements can have attributes in name/value pairs just like in HTML. In XML the attribute value must always be quoted. Study the two XML documents below. The first one is incorrect, the second is correct:

<?xml version="1.0" encoding="ISO-8859-1"?><note date=12/11/2002><to>Tove</to><from>Jani</from></note>

<?xml version="1.0" encoding="ISO-8859-1"?><note date="12/11/2002"><to>Tove</to><from>Jani</from></note>

The error in the first document is that the date attribute in the note element is not quoted.

This is correct: date="12/11/2002". This is incorrect: date=12/11/2002.

With XML, white space is preserved

With XML, the white space in your document is not truncated.

This is unlike HTML. With HTML, a sentence like this:

Hello              my name is Tove,

will be displayed like this:

Hello my name is Tove,

because HTML reduces multiple, consecutive white space characters to a single white space.

7

Page 8: Introduction to XML

With XML, CR / LF is converted to LF

With XML, a new line is always stored as LF.

Do you know what a typewriter is? Well, a typewriter is a mechanical device which was used last century to produce printed documents. :-)

After you have typed one line of text on a typewriter, you have to manually return the printing carriage to the left margin position and manually feed the paper up one line.

In Windows applications, a new line is normally stored as a pair of characters: carriage return (CR) and line feed (LF). The character pair bears some resemblance to the typewriter actions of setting a new line. In Unix applications, a new line is normally stored as a LF character. Macintosh applications use only a CR character to store a new line.

Comments in XML

The syntax for writing comments in XML is similar to that of HTML.

<!-- This is a comment -->

There is nothing special about XML

There is nothing special about XML. It is just plain text with the addition of some XML tags enclosed in angle brackets.

Software that can handle plain text can also handle XML. In a simple text editor, the XML tags will be visible and will not be handled specially.

In an XML-aware application however, the XML tags can be handled specially. The tags may or may not be visible, or have a functional meaning, depending on the nature of the application.

XML Elements

XML Elements are extensible and they have relationships.

XML Elements have simple naming rules.

XML Elements are Extensible

XML documents can be extended to carry more information.

Look at the following XML NOTE example:

<note><to>Tove</to>

8

Page 9: Introduction to XML

<from>Jani</from><body>Don't forget me this weekend!</body></note>

Let's imagine that we created an application that extracted the <to>, <from>, and <body> elements from the XML document to produce this output:

MESSAGE

To: ToveFrom: Jani

Don't forget me this weekend!

Imagine that the author of the XML document added some extra information to it:

<note><date>2002-08-01</date><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

Should the application break or crash?

No. The application should still be able to find the <to>, <from>, and <body> elements in the XML document and produce the same output.

XML documents are Extensible.

XML Elements have Relationships

Elements are related as parents and children.

To understand XML terminology, you have to know how relationships between XML elements are named, and how element content is described.

Imagine that this is a description of a book:

My First XML

Introduction to XML

What is HTML What is XML

9

Page 10: Introduction to XML

XML Syntax

Elements must have a closing tag

Elements must be properly nested

Imagine that this XML document describes the book:

<book><title>My First XML</title><prod id="33-657" media="paper"></prod><chapter>Introduction to XML<para>What is HTML</para><para>What is XML</para></chapter>

<chapter>XML Syntax<para>Elements must have a closing tag</para><para>Elements must be properly nested</para></chapter>

</book>

Book is the root element. Title, prod, and chapter are child elements of book. Book is the parent element of title, prod, and chapter. Title, prod, and chapter are siblings (or sister elements) because they have the same parent.

Elements have Content

Elements can have different content types.

An XML element is everything from (including) the element's start tag to (including) the element's end tag.

An element can have element content, mixed content, simple content, or empty content. An element can also have attributes.

In the example above, book has element content, because it contains other elements. Chapter has mixed content because it contains both text and other elements. Para has simple content (or text content) because it contains only text. Prod has empty content, because it carries no information.

In the example above only the prod element has attributes. The attribute named id has the value "33-657". The attribute named media has the value "paper". 

Element Naming

XML elements must follow these naming rules:

Names can contain letters, numbers, and other characters Names must not start with a number or punctuation character

10

Page 11: Introduction to XML

Names must not start with the letters xml (or XML or Xml ..) Names cannot contain spaces

Take care when you "invent" element names and follow these simple rules:

Any name can be used, no words are reserved, but the idea is to make names descriptive. Names with an underscore separator are nice.

Examples: <first_name>, <last_name>.

Avoid "-" and "." in names. For example, if you name something "first-name," it could be a mess if your software tries to subtract name from first. Or if you name something "first.name," your software may think that "name" is a property of the object "first."

Element names can be as long as you like, but don't exaggerate. Names should be short and simple, like this: <book_title> not like this: <the_title_of_the_book>. 

XML documents often have a corresponding database, in which fields exist corresponding to elements in the XML document. A good practice is to use the naming rules of your database for the elements in the XML documents.

Non-English letters like éòá are perfectly legal in XML element names, but watch out for problems if your software vendor doesn't support them.

The ":" should not be used in element names because it is reserved to be used for something called namespaces (more later).

XML Attributes

XML elements can have attributes in the start tag, just like HTML.

Attributes are used to provide additional information about elements.

XML Attributes

XML elements can have attributes.

From HTML you will remember this: <IMG SRC="computer.gif">. The SRC attribute provides additional information about the IMG element.

In HTML (and in XML) attributes provide additional information about elements:

<img src="computer.gif"><a href="demo.asp">

Attributes often provide information that is not a part of the data. In the example below, the file type is irrelevant to the data, but important to the software that wants to manipulate the element:

11

Page 12: Introduction to XML

<file type="gif">computer.gif</file>

Quote Styles, "female" or 'female'?

Attribute values must always be enclosed in quotes, but either single or double quotes can be used. For a person's sex, the person tag can be written like this:

<person sex="female">

or like this:

<person sex='female'>

Note: If the attribute value itself contains double quotes it is necessary to use single quotes, like in this example: 

<gangster name='George "Shotgun" Ziegler'>

Note: If the attribute value itself contains single quotes it is necessary to use double quotes, like in this example: 

<gangster name="George 'Shotgun' Ziegler">

Use of Elements vs. Attributes

Data can be stored in child elements or in attributes.

Take a look at these examples:

<person sex="female"> <firstname>Anna</firstname> <lastname>Smith</lastname></person>

<person> <sex>female</sex> <firstname>Anna</firstname> <lastname>Smith</lastname></person>

In the first example sex is an attribute. In the last, sex is a child element. Both examples provide the same information.

There are no rules about when to use attributes, and when to use child elements. My experience is that attributes are handy in HTML, but in XML you should try to avoid them. Use child elements if the information feels like data.

12

Page 13: Introduction to XML

My Favorite Way

I like to store data in child elements.

The following three XML documents contain exactly the same information:

A date attribute is used in the first example:

<note date="12/11/2002"><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

A date element is used in the second example:

<note><date>12/11/2002</date><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

An expanded date element is used in the third: (THIS IS MY FAVORITE):

<note><date> <day>12</day> <month>11</month> <year>2002</year></date><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

Avoid using attributes?

Should you avoid using attributes?

Some of the problems with using attributes are:

attributes cannot contain multiple values (child elements can) attributes are not easily expandable (for future changes) attributes cannot describe structures (child elements can) attributes are more difficult to manipulate by program code attribute values are not easy to test against a Document Type Definition (DTD) - which is

used to define the legal elements of an XML document

13

Page 14: Introduction to XML

If you use attributes as containers for data, you end up with documents that are difficult to read and maintain. Try to use elements to describe data. Use attributes only to provide information that is not relevant to the data.

Don't end up like this (this is not how XML should be used):

<note day="12" month="11" year="2002"to="Tove" from="Jani" heading="Reminder" body="Don't forget me this weekend!"></note>

An Exception to my Attribute rule

Rules always have exceptions.

My rule about attributes has one exception:

Sometimes I assign ID references to elements. These ID references can be used to access XML elements in much the same way as the NAME or ID attributes in HTML. This example demonstrates this:

<messages> <note id="p501"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>

<note id="p502"> <to>Jani</to> <from>Tove</from> <heading>Re: Reminder</heading> <body>I will not!</body> </note> </messages>

The ID in these examples is just a counter, or a unique identifier, to identify the different notes in the XML file, and not a part of the note data.

What I am trying to say here is that metadata (data about data) should be stored as attributes, and that data itself should be stored as elements.

XML Validation

XML with correct syntax is Well Formed XML.

XML validated against a DTD is Valid XML.

14

Page 15: Introduction to XML

"Well Formed" XML documents

A "Well Formed" XML document has correct XML syntax.

A "Well Formed" XML document is a document that conforms to the XML syntax rules that were described in the previous chapters:

<?xml version="1.0" encoding="ISO-8859-1"?><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

"Valid" XML documents

A "Valid" XML document also conforms to a DTD.

A "Valid" XML document is a "Well Formed" XML document, which also conforms to the rules of a Document Type Definition (DTD):

<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE note SYSTEM "InternalNote.dtd"><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

XML DTD

A DTD defines the legal elements of an XML document.

The purpose of a DTD is to define the legal building blocks of an XML document. It defines the document structure with a list of legal elements. You can read more about DTD, and how to validate your XML documents in our DTD tutorial.

XML Schema 

XML Schema is an XML based alternative to DTD.

W3C supports an alternative to DTD called XML Schema. You can read more about XML Schema in our Schema tutorial.

Errors will Stop you

15

Page 16: Introduction to XML

Errors in XML documents will stop the XML program.

The W3C XML specification states that a program should not continue to process an XML document if it finds a validation error. The reason is that XML software should be easy to write, and that all XML documents should be compatible.

With HTML it was possible to create documents with lots of errors (like when you forget an end tag). One of the main reasons that HTML browsers are so big and incompatible, is that they have their own ways to figure out what a document should look like when they encounter an HTML error.

With XML this should not be possible.

A general XML Validator

To help you validate your xml files, we have created this link so that you can Validate any XML file.

XML DOM Validation

Validating your XML

To help you validate your xml, we have used Microsoft's XML parser to create an XML validator.

Paste your XML in the text area below, and validate it by pressing the validate button.

Validating your XML file

You can also validate your XML files by typing the URL of your file into the input field below, and then press the submit button

Filename:

If you want to validate an error-free XML file, you can paste the following address into the filename field: http://www.w3schools.com/dom/cd_catalog.xml

Note: If you get the error "Access denied" when accessing this file, it is because your Internet Explorer security settings do not allow access across domains!

16

Page 17: Introduction to XML

XML Browser Support

Most Internet browsers support XML. However, not all browsers have full support for XML, XML Namespaces, and XSLT.

Internet Explorer 6

Internet Explorer 6 has full XML support, including Namespaces, Style sheets in CSS, and XSLT 1.0.

The built-in XML Parser 3.0 in Internet Explorer 6.0 and Windows XP is based on both the W3C XSLT 1.0 and the W3C XPath 1.0 Recommendations.

Internet Explorer 5

Internet Explorer 5 also has XML support, but the XSL part is NOT compatible with the official W3C XSL Recommendation.

Firefox 1.0.2

The Firefox browser has support for XML and XSLT (and XML + CSS).

Mozilla 1.7.8

Mozilla includes Expat for XML parsing and has support to display XML + CSS. Mozilla also has some support for Namespaces.

Mozilla is available with an XSLT implementation.

Opera 8

Opera supports XML and XML + CSS.

Netscape 6

Netscape supports XML.

Internet Explorer 6.0

Internet Explorer 6.0 has full XML support, including support for Namespaces. Style sheets in CSS and as well as XSLT 1.0 are supported.

17

Page 18: Introduction to XML

Internet Explorer has the following XML support:

Viewing of XML documents Full support for W3C DTD standards XML embedded in HTML as Data Islands Binding XML data to HTML elements Transforming and displaying XML with XSL Displaying XML with CSS Access to the XML DOM

Internet Explorer also has support for Behaviors:

Behaviors is a Microsoft-only technology   Behaviors can separate scripts from an HTML page. Behaviors can store XML data on the client's disk.

Examples of all these features are given in this tutorial.

Viewing XML Files

Raw XML files can be viewed in Mozilla, Firefox, Opera, Internet Explorer, and in Netscape 6+.

However, to make XML documents to display like nice web pages, you will have to add some display information.

Viewing XML Files

In Firefox and Internet Explorer:

Open the XML file (typically by clicking on a link) - The XML document will be displayed with color-coded root and child elements. A plus (+) or minus sign (-) to the left of the elements can be clicked to expand or collapse the element structure. To view the raw XML source (without the + and - signs), select "View Page Source" or "View Source" from the browser menu.

In Netscape 6:

Open the XML file, then right-click in XML file and select "View Page Source". The XML document will then be displayed with color-coded root and child elements.

In Opera 7 and 8:

In Opera 7: Open the XML file, then right-click in XML file and select "Frame" / "View Source". The XML document will be displayed as plain text. In Opera 8: Open the XML file, then right-click in XML file and select "Source". The XML document will be displayed as plain text.

Look at this XML file: note.xml

Note: Do not expect XML files to be formatted like HTML documents!

Viewing an Invalid XML File

18

Page 19: Introduction to XML

If an erroneous XML file is opened, the browser will report the error.

Look at this XML file: note_error.xml

Other XML Examples

Viewing some XML documents will help you get the XML feeling.

An XML CD catalogThis is my father's CD collection, stored as XML data (old and boring titles I guess... :-)).

<?xml version="1.0" encoding="ISO-8859-1" ?> - <!-- Edited with XML Spy v4.2   -->

- <CATALOG>- <CD>  <TITLE>Empire Burlesque</TITLE>   <ARTIST>Bob Dylan</ARTIST>   <COUNTRY>USA</COUNTRY>   <COMPANY>Columbia</COMPANY>   <PRICE>10.90</PRICE>   <YEAR>1985</YEAR>

  </CD>- <CD>  <TITLE>Hide your heart</TITLE>   <ARTIST>Bonnie Tyler</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>CBS Records</COMPANY>   <PRICE>9.90</PRICE>   <YEAR>1988</YEAR>

  </CD>- <CD>  <TITLE>Greatest Hits</TITLE>   <ARTIST>Dolly Parton</ARTIST>   <COUNTRY>USA</COUNTRY>   <COMPANY>RCA</COMPANY>   <PRICE>9.90</PRICE>   <YEAR>1982</YEAR>

  </CD>- <CD>  <TITLE>Still got the blues</TITLE>   <ARTIST>Gary Moore</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Virgin records</COMPANY>   <PRICE>10.20</PRICE>   <YEAR>1990</YEAR>

  </CD>- <CD>  <TITLE>Eros</TITLE>   <ARTIST>Eros Ramazzotti</ARTIST>   <COUNTRY>EU</COUNTRY>   <COMPANY>BMG</COMPANY>   <PRICE>9.90</PRICE>   <YEAR>1997</YEAR>

  </CD>- <CD>  <TITLE>One night only</TITLE>   <ARTIST>Bee Gees</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Polydor</COMPANY>   <PRICE>10.90</PRICE>   <YEAR>1998</YEAR>

  </CD>- <CD>

19

Page 20: Introduction to XML

  <TITLE>Sylvias Mother</TITLE>   <ARTIST>Dr.Hook</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>CBS</COMPANY>   <PRICE>8.10</PRICE>   <YEAR>1973</YEAR>

  </CD>- <CD>  <TITLE>Maggie May</TITLE>   <ARTIST>Rod Stewart</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Pickwick</COMPANY>   <PRICE>8.50</PRICE>   <YEAR>1990</YEAR>

  </CD>- <CD>  <TITLE>Romanza</TITLE>   <ARTIST>Andrea Bocelli</ARTIST>   <COUNTRY>EU</COUNTRY>   <COMPANY>Polydor</COMPANY>   <PRICE>10.80</PRICE>   <YEAR>1996</YEAR>

  </CD>- <CD>  <TITLE>When a man loves a woman</TITLE>   <ARTIST>Percy Sledge</ARTIST>   <COUNTRY>USA</COUNTRY>   <COMPANY>Atlantic</COMPANY>   <PRICE>8.70</PRICE>   <YEAR>1987</YEAR>

  </CD>- <CD>  <TITLE>Black angel</TITLE>   <ARTIST>Savage Rose</ARTIST>   <COUNTRY>EU</COUNTRY>   <COMPANY>Mega</COMPANY>   <PRICE>10.90</PRICE>   <YEAR>1995</YEAR>

  </CD>- <CD>  <TITLE>1999 Grammy Nominees</TITLE>   <ARTIST>Many</ARTIST>   <COUNTRY>USA</COUNTRY>   <COMPANY>Grammy</COMPANY>   <PRICE>10.20</PRICE>   <YEAR>1999</YEAR>

  </CD>- <CD>  <TITLE>For the good times</TITLE>   <ARTIST>Kenny Rogers</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Mucik Master</COMPANY>   <PRICE>8.70</PRICE>   <YEAR>1995</YEAR>

  </CD>- <CD>  <TITLE>Big Willie style</TITLE>   <ARTIST>Will Smith</ARTIST>   <COUNTRY>USA</COUNTRY>   <COMPANY>Columbia</COMPANY>   <PRICE>9.90</PRICE>   <YEAR>1997</YEAR>

  </CD>- <CD>  <TITLE>Tupelo Honey</TITLE>   <ARTIST>Van Morrison</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Polydor</COMPANY>   <PRICE>8.20</PRICE>   <YEAR>1971</YEAR>

20

Page 21: Introduction to XML

  </CD>- <CD>  <TITLE>Soulsville</TITLE>   <ARTIST>Jorn Hoel</ARTIST>   <COUNTRY>Norway</COUNTRY>   <COMPANY>WEA</COMPANY>   <PRICE>7.90</PRICE>   <YEAR>1996</YEAR>

  </CD>- <CD>  <TITLE>The very best of</TITLE>   <ARTIST>Cat Stevens</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Island</COMPANY>   <PRICE>8.90</PRICE>   <YEAR>1990</YEAR>

  </CD>- <CD>  <TITLE>Stop</TITLE>   <ARTIST>Sam Brown</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>A and M</COMPANY>   <PRICE>8.90</PRICE>   <YEAR>1988</YEAR>

  </CD>- <CD>  <TITLE>Bridge of Spies</TITLE>   <ARTIST>T'Pau</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Siren</COMPANY>   <PRICE>7.90</PRICE>   <YEAR>1987</YEAR>

  </CD>- <CD>  <TITLE>Private Dancer</TITLE>   <ARTIST>Tina Turner</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Capitol</COMPANY>   <PRICE>8.90</PRICE>   <YEAR>1983</YEAR>

  </CD>- <CD>  <TITLE>Midt om natten</TITLE>   <ARTIST>Kim Larsen</ARTIST>   <COUNTRY>EU</COUNTRY>   <COMPANY>Medley</COMPANY>   <PRICE>7.80</PRICE>   <YEAR>1983</YEAR>

  </CD>- <CD>  <TITLE>Pavarotti Gala Concert</TITLE>   <ARTIST>Luciano Pavarotti</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>DECCA</COMPANY>   <PRICE>9.90</PRICE>   <YEAR>1991</YEAR>

  </CD>- <CD>  <TITLE>The dock of the bay</TITLE>   <ARTIST>Otis Redding</ARTIST>   <COUNTRY>USA</COUNTRY>   <COMPANY>Atlantic</COMPANY>   <PRICE>7.90</PRICE>   <YEAR>1987</YEAR>

  </CD>- <CD>  <TITLE>Picture book</TITLE>   <ARTIST>Simply Red</ARTIST>   <COUNTRY>EU</COUNTRY>   <COMPANY>Elektra</COMPANY>

21

Page 22: Introduction to XML

  <PRICE>7.20</PRICE>   <YEAR>1985</YEAR>

  </CD>- <CD>  <TITLE>Red</TITLE>   <ARTIST>The Communards</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>London</COMPANY>   <PRICE>7.80</PRICE>   <YEAR>1987</YEAR>

  </CD>- <CD>  <TITLE>Unchain my heart</TITLE>   <ARTIST>Joe Cocker</ARTIST>   <COUNTRY>USA</COUNTRY>   <COMPANY>EMI</COMPANY>   <PRICE>8.20</PRICE>   <YEAR>1987</YEAR>

  </CD>  </CATALOG>

An XML plant catalogThis is a plant catalog from a plant shop, stored as XML data.

<?xml version="1.0" encoding="ISO-8859-1" ?> - <!-- Edited with XML Spy v4.2

  --> - <CATALOG>- <PLANT>  <COMMON>Bloodroot</COMMON>   <BOTANICAL>Sanguinaria canadensis</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Mostly Shady</LIGHT>   <PRICE>$2.44</PRICE>   <AVAILABILITY>031599</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Columbine</COMMON>   <BOTANICAL>Aquilegia canadensis</BOTANICAL>   <ZONE>3</ZONE>   <LIGHT>Mostly Shady</LIGHT>   <PRICE>$9.37</PRICE>   <AVAILABILITY>030699</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Marsh Marigold</COMMON>   <BOTANICAL>Caltha palustris</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Mostly Sunny</LIGHT>   <PRICE>$6.81</PRICE>   <AVAILABILITY>051799</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Cowslip</COMMON>   <BOTANICAL>Caltha palustris</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Mostly Shady</LIGHT>   <PRICE>$9.90</PRICE>   <AVAILABILITY>030699</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Dutchman's-Breeches</COMMON>   <BOTANICAL>Dicentra cucullaria</BOTANICAL>   <ZONE>3</ZONE>

22

Page 23: Introduction to XML

  <LIGHT>Mostly Shady</LIGHT>   <PRICE>$6.44</PRICE>   <AVAILABILITY>012099</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Ginger, Wild</COMMON>   <BOTANICAL>Asarum canadense</BOTANICAL>   <ZONE>3</ZONE>   <LIGHT>Mostly Shady</LIGHT>   <PRICE>$9.03</PRICE>   <AVAILABILITY>041899</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Hepatica</COMMON>   <BOTANICAL>Hepatica americana</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Mostly Shady</LIGHT>   <PRICE>$4.45</PRICE>   <AVAILABILITY>012699</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Liverleaf</COMMON>   <BOTANICAL>Hepatica americana</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Mostly Shady</LIGHT>   <PRICE>$3.99</PRICE>   <AVAILABILITY>010299</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Jack-In-The-Pulpit</COMMON>   <BOTANICAL>Arisaema triphyllum</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Mostly Shady</LIGHT>   <PRICE>$3.23</PRICE>   <AVAILABILITY>020199</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Mayapple</COMMON>   <BOTANICAL>Podophyllum peltatum</BOTANICAL>   <ZONE>3</ZONE>   <LIGHT>Mostly Shady</LIGHT>   <PRICE>$2.98</PRICE>   <AVAILABILITY>060599</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Phlox, Woodland</COMMON>   <BOTANICAL>Phlox divaricata</BOTANICAL>   <ZONE>3</ZONE>   <LIGHT>Sun or Shade</LIGHT>   <PRICE>$2.80</PRICE>   <AVAILABILITY>012299</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Phlox, Blue</COMMON>   <BOTANICAL>Phlox divaricata</BOTANICAL>   <ZONE>3</ZONE>   <LIGHT>Sun or Shade</LIGHT>   <PRICE>$5.59</PRICE>   <AVAILABILITY>021699</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Spring-Beauty</COMMON>   <BOTANICAL>Claytonia Virginica</BOTANICAL>   <ZONE>7</ZONE>   <LIGHT>Mostly Shady</LIGHT>   <PRICE>$6.59</PRICE>   <AVAILABILITY>020199</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Trillium</COMMON>

23

Page 24: Introduction to XML

  <BOTANICAL>Trillium grandiflorum</BOTANICAL>   <ZONE>5</ZONE>   <LIGHT>Sun or Shade</LIGHT>   <PRICE>$3.90</PRICE>   <AVAILABILITY>042999</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Wake Robin</COMMON>   <BOTANICAL>Trillium grandiflorum</BOTANICAL>   <ZONE>5</ZONE>   <LIGHT>Sun or Shade</LIGHT>   <PRICE>$3.20</PRICE>   <AVAILABILITY>022199</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Violet, Dog-Tooth</COMMON>   <BOTANICAL>Erythronium americanum</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Shade</LIGHT>   <PRICE>$9.04</PRICE>   <AVAILABILITY>020199</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Trout Lily</COMMON>   <BOTANICAL>Erythronium americanum</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Shade</LIGHT>   <PRICE>$6.94</PRICE>   <AVAILABILITY>032499</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Adder's-Tongue</COMMON>   <BOTANICAL>Erythronium americanum</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Shade</LIGHT>   <PRICE>$9.58</PRICE>   <AVAILABILITY>041399</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Anemone</COMMON>   <BOTANICAL>Anemone blanda</BOTANICAL>   <ZONE>6</ZONE>   <LIGHT>Mostly Shady</LIGHT>   <PRICE>$8.86</PRICE>   <AVAILABILITY>122698</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Grecian Windflower</COMMON>   <BOTANICAL>Anemone blanda</BOTANICAL>   <ZONE>6</ZONE>   <LIGHT>Mostly Shady</LIGHT>   <PRICE>$9.16</PRICE>   <AVAILABILITY>071099</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Bee Balm</COMMON>   <BOTANICAL>Monarda didyma</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Shade</LIGHT>   <PRICE>$4.59</PRICE>   <AVAILABILITY>050399</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Bergamot</COMMON>   <BOTANICAL>Monarda didyma</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Shade</LIGHT>   <PRICE>$7.16</PRICE>   <AVAILABILITY>042799</AVAILABILITY>

  </PLANT>

24

Page 25: Introduction to XML

- <PLANT>  <COMMON>Black-Eyed Susan</COMMON>   <BOTANICAL>Rudbeckia hirta</BOTANICAL>   <ZONE>Annual</ZONE>   <LIGHT>Sunny</LIGHT>   <PRICE>$9.80</PRICE>   <AVAILABILITY>061899</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Buttercup</COMMON>   <BOTANICAL>Ranunculus</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Shade</LIGHT>   <PRICE>$2.57</PRICE>   <AVAILABILITY>061099</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Crowfoot</COMMON>   <BOTANICAL>Ranunculus</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Shade</LIGHT>   <PRICE>$9.34</PRICE>   <AVAILABILITY>040399</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Butterfly Weed</COMMON>   <BOTANICAL>Asclepias tuberosa</BOTANICAL>   <ZONE>Annual</ZONE>   <LIGHT>Sunny</LIGHT>   <PRICE>$2.78</PRICE>   <AVAILABILITY>063099</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Cinquefoil</COMMON>   <BOTANICAL>Potentilla</BOTANICAL>   <ZONE>Annual</ZONE>   <LIGHT>Shade</LIGHT>   <PRICE>$7.06</PRICE>   <AVAILABILITY>052599</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Primrose</COMMON>   <BOTANICAL>Oenothera</BOTANICAL>   <ZONE>3 - 5</ZONE>   <LIGHT>Sunny</LIGHT>   <PRICE>$6.56</PRICE>   <AVAILABILITY>013099</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Gentian</COMMON>   <BOTANICAL>Gentiana</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Sun or Shade</LIGHT>   <PRICE>$7.81</PRICE>   <AVAILABILITY>051899</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Blue Gentian</COMMON>   <BOTANICAL>Gentiana</BOTANICAL>   <ZONE>4</ZONE>   <LIGHT>Sun or Shade</LIGHT>   <PRICE>$8.56</PRICE>   <AVAILABILITY>050299</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Jacob's Ladder</COMMON>   <BOTANICAL>Polemonium caeruleum</BOTANICAL>   <ZONE>Annual</ZONE>   <LIGHT>Shade</LIGHT>   <PRICE>$9.26</PRICE>

25

Page 26: Introduction to XML

  <AVAILABILITY>022199</AVAILABILITY>   </PLANT>

- <PLANT>  <COMMON>Greek Valerian</COMMON>   <BOTANICAL>Polemonium caeruleum</BOTANICAL>   <ZONE>Annual</ZONE>   <LIGHT>Shade</LIGHT>   <PRICE>$4.36</PRICE>   <AVAILABILITY>071499</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>California Poppy</COMMON>   <BOTANICAL>Eschscholzia californica</BOTANICAL>   <ZONE>Annual</ZONE>   <LIGHT>Sun</LIGHT>   <PRICE>$7.89</PRICE>   <AVAILABILITY>032799</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Shooting Star</COMMON>   <BOTANICAL>Dodecatheon</BOTANICAL>   <ZONE>Annual</ZONE>   <LIGHT>Mostly Shady</LIGHT>   <PRICE>$8.60</PRICE>   <AVAILABILITY>051399</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Snakeroot</COMMON>   <BOTANICAL>Cimicifuga</BOTANICAL>   <ZONE>Annual</ZONE>   <LIGHT>Shade</LIGHT>   <PRICE>$5.63</PRICE>   <AVAILABILITY>071199</AVAILABILITY>

  </PLANT>- <PLANT>  <COMMON>Cardinal Flower</COMMON>   <BOTANICAL>Lobelia cardinalis</BOTANICAL>   <ZONE>2</ZONE>   <LIGHT>Shade</LIGHT>   <PRICE>$3.02</PRICE>   <AVAILABILITY>022299</AVAILABILITY>

  </PLANT>  </CATALOG>

A Simple Food MenuThis is a breakfast food menu from a restaurant, stored as XML data.

<?xml version="1.0" encoding="ISO-8859-1" ?> - <!-- Edited with XML Spy v4.2   -->

- <breakfast_menu>- <food>  <name>Belgian Waffles</name>   <price>$5.95</price>   <description>two of our famous Belgian Waffles with plenty of real maple syrup</description>   <calories>650</calories>

  </food>+ <food>- <food>  <name>Berry-Berry Belgian Waffles</name>   <price>$8.95</price>   <description>light Belgian waffles covered with an assortment of fresh berries and whipped

cream</description>

26

Page 27: Introduction to XML

  <calories>900</calories>   </food>

- <food>  <name>French Toast</name>   <price>$4.50</price>   <description>thick slices made from our homemade sourdough bread</description>   <calories>600</calories>

  </food>- <food>  <name>Homestyle Breakfast</name>   <price>$6.95</price>   <description>two eggs, bacon or sausage, toast, and our ever-popular hash browns</description>   <calories>950</calories>

  </food>  </breakfast_menu>

Why does XML display like this?

XML documents do not carry information about how to display the data.

Since XML tags are "invented" by the author of the XML document, browsers do not know if a tag like <table> describes an HTML table or a dining table.

Without any information about how to display the data, most browsers will just display the XML document as it is.

In the next chapters, we will take a look at different solutions to the display problem, using CSS, XSL, JavaScript, and XML Data Islands.

Displaying XML with CSS

With CSS (Cascading Style Sheets) you can add display information to an XML document.

Displaying your XML files with CSS?

It is possible to use CSS to format an XML document.

Below is an example of how to use a CSS style sheet to format an XML document:

Take a look at this XML file: The CD catalog

Then look at this style sheet: The CSS file

CATALOG{background-color: #ffffff;width: 100%;

27

Page 28: Introduction to XML

}CD{display: block;margin-bottom: 30pt;margin-left: 0;}TITLE{color: #FF0000;font-size: 20pt;}ARTIST{color: #0000FF;font-size: 20pt;}COUNTRY,PRICE,YEAR,COMPANY{display: block;color: #000000;margin-left: 20pt;}

Finally, view: The CD catalog formatted with the CSS file

Bob Dylan USA Columbia 10.90 1985 Bonnie Tyler UK CBS Records 9.90 1988 Dolly Parton USA RCA 9.90 1982 Gary Moore UK Virgin records 10.20 1990 Eros Ramazzotti EU BMG 9.90 1997 Bee Gees UK Polydor 10.90 1998 Dr.Hook UK CBS 8.10 1973 Rod Stewart UK Pickwick 8.50 1990 Andrea Bocelli EU Polydor 10.80 1996 Percy Sledge USA Atlantic 8.70 1987 Savage Rose EU Mega 10.90 1995 Many USA Grammy 10.20 1999 Kenny Rogers UK Mucik Master 8.70 1995 Will Smith USA Columbia 9.90 1997 Van Morrison UK Polydor 8.20 1971 Jorn Hoel Norway WEA 7.90 1996 Cat Stevens UK Island 8.90 1990 Sam Brown UK A and M 8.90 1988 T`Pau UK Siren 7.90 1987 Tina Turner UK Capitol 8.90 1983 Kim Larsen EU Medley 7.80 1983 Luciano Pavarotti UK DECCA 9.90 1991 Otis Redding USA Atlantic 7.90 1987 Simply Red EU Elektra 7.20 1985 The Communards UK London 7.80 1987 Joe Cocker USA EMI 8.20 1987 Below is a fraction of the XML file. The second line, <?xml-stylesheet type="text/css" href="cd_catalog.css"?>, links the XML file to the CSS file:

<?xml version="1.0" encoding="ISO-8859-1"?><?xml-stylesheet type="text/css" href="cd_catalog.css"?><CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST>

28

Page 29: Introduction to XML

<COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> <CD> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <PRICE>9.90</PRICE> <YEAR>1988</YEAR> </CD>....</CATALOG>

Note: Formatting XML with CSS is NOT the future of how to style XML documents. XML document should be styled by using the W3C's XSL standard!

Displaying XML with XSL

With XSL you can add display information to your XML document.

Displaying XML with XSL

XSL is the preferred style sheet language of XML.

XSL (the eXtensible Stylesheet Language) is far more sophisticated than CSS. One way to use XSL is to transform XML into HTML before it is displayed by the browser as demonstrated in these examples:

View the XML file,

<?xml version="1.0" encoding="ISO-8859-1" ?> - <!-- Edited with XML Spy v4.2   -->

- <breakfast_menu>- <food>  <name>Belgian Waffles</name>   <price>$5.95</price>   <description>two of our famous Belgian Waffles with plenty of real maple

syrup</description>   <calories>650</calories>   </food>

- <food>  <name>Strawberry Belgian Waffles</name>

29

Page 30: Introduction to XML

  <price>$7.95</price>   <description>light Belgian waffles covered with strawberries and whipped

cream</description>   <calories>900</calories>   </food>

- <food>  <name>Berry-Berry Belgian Waffles</name>   <price>$8.95</price>   <description>light Belgian waffles covered with an assortment of fresh berries

and whipped cream</description>   <calories>900</calories>   </food>

- <food>  <name>French Toast</name>   <price>$4.50</price>   <description>thick slices made from our homemade sourdough

bread</description>   <calories>600</calories>   </food>

- <food>  <name>Homestyle Breakfast</name>   <price>$6.95</price>   <description>two eggs, bacon or sausage, toast, and our ever-popular hash

browns</description>   <calories>950</calories>   </food>  </breakfast_menu></html>

the XSL style sheet, <?xml version="1.0" encoding="ISO-8859-1" ?> - <!-- Edited with XML Spy v4.2   -->

- <html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">

- <body style="font-family:Arial,helvetica,sans-serif;font-size:12pt; background-color:#EEEEEE">

- <xsl:for-each select="breakfast_menu/food">- <div style="background-color:teal;color:white;padding:4px">- <span style="font-weight:bold;color:white">  <xsl:value-of select="name" />   </span>  -

  <xsl:value-of select="price" />   </div>

- <div style="margin-left:20px;margin-bottom:1em;font-size:10pt">  <xsl:value-of select="description" /> - <span style="font-style:italic">  (

  <xsl:value-of select="calories" />

30

Page 31: Introduction to XML

  calories per serving)   </span>  </div>  </xsl:for-each>  </body>  </html>

and View the result.

Belgian Waffles - $5.95two of our famous Belgian Waffles with plenty of real maple syrup (650 calories per serving) Strawberry Belgian Waffles - $7.95light Belgian waffles covered with strawberries and whipped cream (900 calories per serving) Berry-Berry Belgian Waffles - $8.95light Belgian waffles covered with an assortment of fresh berries and whipped cream (900 calories per serving) French Toast - $4.50thick slices made from our homemade sourdough bread (600 calories per serving) Homestyle Breakfast - $6.95two eggs, bacon or sausage, toast, and our ever-popular hash browns (950 calories per serving)

Below is a fraction of the XML file. The second line, <?xml-stylesheet type="text/xsl" href="simple.xsl"?>, links the XML file to the XSL file:

<?xml version="1.0" encoding="ISO-8859-1"?><?xml-stylesheet type="text/xsl" href="simple.xsl"?><breakfast_menu> <food> <name>Belgian Waffles</name> <price>$5.95</price> <description> two of our famous Belgian Waffles </description> <calories>650</calories> </food></breakfast_menu>

If you want to learn more about XSL, please visit our XSL tutorial.

XML in Data Islands

31

Page 32: Introduction to XML

With Internet Explorer, XML can be embedded into HTML pages in Data Islands.

XML Embedded in HTML

The unofficial <xml> tag is used to embed XML data within HTML.

XML data can be embedded directly into an HTML page like this:

<xml id="note"><note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body></note></xml>

And an external XML file can be embedded like this:

<xml id="note" src="note.xml"></xml>

Note: The <xml> tag is an HTML element, not an XML element.

Data Binding

XML Data Islands can be bound to HTML elements. 

In the example below, an XML Data Island with an ID of "cdcat" is loaded from an external XML file ("cd_catalog.xml"). Next, the HTML table element is bound to the Data Island with the datasrc attribute, and finally the td elements are bound to the XML data with a datafld attribute inside a span element.

<html><body>

<xml id="cdcat" src="cd_catalog.xml"></xml>

<table border="1" datasrc="#cdcat"><tr><td><span datafld="ARTIST"></span></td><td><span datafld="TITLE"></span></td></tr></table>

</body></html>

32

Page 33: Introduction to XML

If you are running IE 5.0 or higher, you can try it yourself. You can also view the external XML file.

  <TITLE>Maggie May</TITLE>   <ARTIST>Rod Stewart</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Pickwick</COMPANY>   <PRICE>8.50</PRICE>   <YEAR>1990</YEAR>   </CD>

- <CD>  <TITLE>Romanza</TITLE>   <ARTIST>Andrea Bocelli</ARTIST>   <COUNTRY>EU</COUNTRY>   <COMPANY>Polydor</COMPANY>   <PRICE>10.80</PRICE>   <YEAR>1996</YEAR>   </CD>

- <CD>  <TITLE>When a man loves a woman</TITLE>   <ARTIST>Percy Sledge</ARTIST>   <COUNTRY>USA</COUNTRY>   <COMPANY>Atlantic</COMPANY>   <PRICE>8.70</PRICE>   <YEAR>1987</YEAR>   </CD>

- <CD>  <TITLE>Black angel</TITLE>   <ARTIST>Savage Rose</ARTIST>   <COUNTRY>EU</COUNTRY>   <COMPANY>Mega</COMPANY>   <PRICE>10.90</PRICE>   <YEAR>1995</YEAR>   </CD>

- <CD>  <TITLE>1999 Grammy Nominees</TITLE>   <ARTIST>Many</ARTIST>   <COUNTRY>USA</COUNTRY>   <COMPANY>Grammy</COMPANY>   <PRICE>10.20</PRICE>   <YEAR>1999</YEAR>   </CD>

- <CD>  <TITLE>For the good times</TITLE>   <ARTIST>Kenny Rogers</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Mucik Master</COMPANY>   <PRICE>8.70</PRICE>   <YEAR>1995</YEAR>   </CD>

- <CD>  <TITLE>Big Willie style</TITLE>   <ARTIST>Will Smith</ARTIST>

33

Page 34: Introduction to XML

  <COUNTRY>USA</COUNTRY>   <COMPANY>Columbia</COMPANY>   <PRICE>9.90</PRICE>   <YEAR>1997</YEAR>   </CD>

- <CD>  <TITLE>Tupelo Honey</TITLE>   <ARTIST>Van Morrison</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Polydor</COMPANY>   <PRICE>8.20</PRICE>   <YEAR>1971</YEAR>   </CD>

- <CD>  <TITLE>Soulsville</TITLE>   <ARTIST>Jorn Hoel</ARTIST>   <COUNTRY>Norway</COUNTRY>   <COMPANY>WEA</COMPANY>   <PRICE>7.90</PRICE>   <YEAR>1996</YEAR>   </CD>

- <CD>  <TITLE>The very best of</TITLE>   <ARTIST>Cat Stevens</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Island</COMPANY>   <PRICE>8.90</PRICE>   <YEAR>1990</YEAR>   </CD>

- <CD>  <TITLE>Stop</TITLE>   <ARTIST>Sam Brown</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>A and M</COMPANY>   <PRICE>8.90</PRICE>   <YEAR>1988</YEAR>   </CD>

- <CD>  <TITLE>Bridge of Spies</TITLE>   <ARTIST>T'Pau</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Siren</COMPANY>   <PRICE>7.90</PRICE>   <YEAR>1987</YEAR>   </CD>

- <CD>  <TITLE>Private Dancer</TITLE>   <ARTIST>Tina Turner</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>Capitol</COMPANY>   <PRICE>8.90</PRICE>   <YEAR>1983</YEAR>

34

Page 35: Introduction to XML

  </CD>- <CD>  <TITLE>Midt om natten</TITLE>   <ARTIST>Kim Larsen</ARTIST>   <COUNTRY>EU</COUNTRY>   <COMPANY>Medley</COMPANY>   <PRICE>7.80</PRICE>   <YEAR>1983</YEAR>   </CD>

- <CD>  <TITLE>Pavarotti Gala Concert</TITLE>   <ARTIST>Luciano Pavarotti</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>DECCA</COMPANY>   <PRICE>9.90</PRICE>   <YEAR>1991</YEAR>   </CD>

- <CD>  <TITLE>The dock of the bay</TITLE>   <ARTIST>Otis Redding</ARTIST>   <COUNTRY>USA</COUNTRY>   <COMPANY>Atlantic</COMPANY>   <PRICE>7.90</PRICE>   <YEAR>1987</YEAR>   </CD>

- <CD>  <TITLE>Picture book</TITLE>   <ARTIST>Simply Red</ARTIST>   <COUNTRY>EU</COUNTRY>   <COMPANY>Elektra</COMPANY>   <PRICE>7.20</PRICE>   <YEAR>1985</YEAR>   </CD>

- <CD>  <TITLE>Red</TITLE>   <ARTIST>The Communards</ARTIST>   <COUNTRY>UK</COUNTRY>   <COMPANY>London</COMPANY>   <PRICE>7.80</PRICE>   <YEAR>1987</YEAR>   </CD>

- <CD>  <TITLE>Unchain my heart</TITLE>   <ARTIST>Joe Cocker</ARTIST>   <COUNTRY>USA</COUNTRY>   <COMPANY>EMI</COMPANY>   <PRICE>8.20</PRICE>   <YEAR>1987</YEAR>   </CD>  </CATALOG>

35

Page 36: Introduction to XML

Also try this example, demonstrating <thead>, <tbody>, and <tfoot>.

XML Parser

To read and manipulate XML documents, you need an XML parser.

The Microsoft XML parser

MSXML Parser 2.5 is the XML parser that is shipped with Windows 2000 and IE 5.5.

MSXML Parser 3.0 is the XML parser that is shipped with IE 6.0 and Windows XP.

Once you have installed Internet Explorer, the parser is available to scripts, both inside HTML documents and inside ASP files. The MSXML 3.0 parser features a language-neutral programming model that supports:

JavaScript, VBScript, Perl, VB, Java, C++ and more Complete XML support Full DOM and Namespace support DTD and validation Complete XSLT and XPath support SAX2 Server-safe HTTP

To create an XML Document Object with JavaScript, use the following code:

var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")

To create an XML Document Object with VBScript, use the following code:

set xmlDoc=CreateObject("Microsoft.XMLDOM")

To create an XML Document Object in ASP (with VBScript), use the following code:

set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")

The Mozilla XML Parser

Plain XML documents are displayed in a tree-like structure in Mozilla (just like IE).

Mozilla also supports parsing of XML data that resides in a file, using JavaScript. The parsed data can be displayed as HTML.

36

Page 37: Introduction to XML

To create an XML Document object with JavaScript in Mozilla, use the following code:

var xmlDoc=document.implementation.createDocument("ns","root",null)

The first parameter, ns, defines the namespace used for the XML document. The second parameter, root, is the XML root element in the XML file. The third parameter, null, is always null because it is not implemented yet.

Loading an XML File Into the Parser

The following code loads an existing XML document ("note.xml") into the XML parser:

<script type="text/javascript">

var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")xmlDoc.async="false"xmlDoc.load("note.xml").........</script>

The first line of the script creates an instance of the Microsoft XML parser. The third line tells the parser to load an XML document called "note.xml". The second line turns off asynchronized loading, to make sure that the parser will not continue execution of the script before the document is fully loaded.

Loading XML Text Into the Parser

The following code loads a text string into the XML parser:

<script type="text/javascript">var txt="<note>"txt=txt+"<to>Tove</to><from>Jani</from>"txt=txt+"<heading>Reminder</heading>"txt=txt+"<body>Don't forget me this weekend!</body>"txt=txt+"</note>"var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")xmlDoc.async="false"xmlDoc.loadXML(txt).........</script>

Note that we have used the "loadXML" method (instead of the "load" method) to load a text string.

37

Page 38: Introduction to XML

Displaying XML with JavaScript

To see how XML and HTML complement each other this way, first look at the XML document (note.xml), then open the HTML document (note.htm) that contains a JavaScript which reads the XML file and displays the information inside the HTML page.

To see how it works, try it yourself.

There are more examples of this in our XML DOM tutorial.

XML in Real Life

Some real-life examples of how XML can be used to carry information.

Example: XML News

XMLNews is a specification for exchanging news and other information.

Using such a standard makes it easier for both news producers and news consumers to produce, receive, and archive any kind of news information across different hardware, software, and programming languages.

An example XML News document:<?xml version="1.0" encoding="ISO-8859-1"?>

<nitf>

<head><title>Colombia Earthquake</title></head>

<body>

<headline> <hl1>143 Dead in Colombia Earthquake</hl1></headline><byline> <bytag>By Jared Kotler, Associated Press Writer</bytag></byline><dateline> <location>Bogota, Colombia</location> <date>Monday January 25 1999 7:28 ET</date></dateline>

</body>

</nitf>

38

Page 39: Introduction to XML

XML Namespaces

XML Namespaces provide a method to avoid element name conflicts.

Name Conflicts

Since element names in XML are not predefined, a name conflict will occur when two different documents use the same element names.

This XML document carries information in a table:

<table> <tr> <td>Apples</td> <td>Bananas</td> </tr></table>

This XML document carries information about a table (a piece of furniture):

<table> <name>African Coffee Table</name> <width>80</width> <length>120</length></table>

If these two XML documents were added together, there would be an element name conflict because both documents contain a <table> element with different content and definition.

Solving Name Conflicts using a Prefix

This XML document carries information in a table:

<h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr></h:table>

This XML document carries information about a piece of furniture:

<f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width>

39

Page 40: Introduction to XML

<f:length>120</f:length></f:table>

Now there will be no name conflict because the two documents use a different name for their <table> element (<h:table> and <f:table>).

By using a prefix, we have created two different types of <table> elements.

Using Namespaces

This XML document carries information in a table:

<h:table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr></h:table>

This XML document carries information about a piece of furniture:

<f:table xmlns:f="http://www.w3schools.com/furniture"> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length></f:table>

Instead of using only prefixes, we have added an xmlns attribute to the <table> tag to give the prefix a qualified name associated with a namespace.

The XML Namespace (xmlns) Attribute

The XML namespace attribute is placed in the start tag of an element and has the following syntax:

xmlns:namespace-prefix="namespaceURI"

When a namespace is defined in the start tag of an element, all child elements with the same prefix are associated with the same namespace.

Note that the address used to identify the namespace is not used by the parser to look up information. The only purpose is to give the namespace a unique name. However, very often companies use the namespace as a pointer to a real Web page containing information about the namespace.Try to go to http://www.w3.org/TR/html4/.

Uniform Resource Identifier (URI)

40

Page 41: Introduction to XML

A Uniform Resource Identifier (URI) is a string of characters which identifies an Internet Resource. The most common URI is the Uniform Resource Locator (URL) which identifies an Internet domain address. Another, not so common type of URI is the Universal Resource Name (URN). In our examples we will only use URLs.

Default Namespaces

Defining a default namespace for an element saves us from using prefixes in all the child elements. It has the following syntax:

xmlns="namespaceURI"

This XML document carries information in a table:

<table xmlns="http://www.w3.org/TR/html4/"> <tr> <td>Apples</td> <td>Bananas</td> </tr></table>

This XML document carries information about a piece of furniture:

<table xmlns="http://www.w3schools.com/furniture"> <name>African Coffee Table</name> <width>80</width> <length>120</length></table>

Namespaces in Real Use

When you start using XSL, you will soon see namespaces in real use. XSL style sheets are used to transform XML documents into other formats, like HTML.

If you take a close look at the XSL document below, you will see that most of the tags are HTML tags. The tags that are not HTML tags have the prefix xsl, identified by the namespace "http://www.w3.org/1999/XSL/Transform":

<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><html><body> <h2>My CD Collection</h2> <table border="1"> <tr> <th align="left">Title</th>

41

Page 42: Introduction to XML

<th align="left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table></body></html></xsl:template></xsl:stylesheet>

XML CDATA

All text in an XML document will be parsed by the parser.

Only text inside a CDATA section will be ignored by the parser.

Parsed Data

XML parsers normally parse all the text in an XML document.

When an XML element is parsed, the text between the XML tags is also parsed:

<message>This text is also parsed</message>

The parser does this because XML elements can contain other elements, as in this example, where the <name> element contains two other elements (first and last):

<name><first>Bill</first><last>Gates</last></name>

and the parser will break it up into sub-elements like this:

<name> <first>Bill</first> <last>Gates</last></name>

Escape Characters

Illegal XML characters have to be replaced by entity references.

42

Page 43: Introduction to XML

If you place a character like "<" inside an XML element, it will generate an error because the parser interprets it as the start of a new element. You cannot write something like this:

<message>if salary < 1000 then</message>

To avoid this, you have to replace the "<" character with an entity reference, like this:

<message>if salary &lt; 1000 then</message>

There are 5 predefined entity references in XML:

&lt; < less than&gt; > greater than&amp; & ampersand &apos; ' apostrophe&quot; " quotation mark

Note: Only the characters "<" and "&" are strictly illegal in XML. Apostrophes, quotation marks and greater than signs are legal, but it is a good habit to replace them.

CDATA

Everything inside a CDATA section is ignored by the parser.

If your text contains a lot of "<" or "&" characters - as program code often does - the XML element can be defined as a CDATA section.

A CDATA section starts with "<![CDATA[" and ends with "]]>":

<script><![CDATA[function matchwo(a,b){if (a < b && a < 0) then { return 1 }else { return 0 }}]]></script>

In the example above, everything inside the CDATA section is ignored by the parser.

43

Page 44: Introduction to XML

Notes on CDATA sections:

A CDATA section cannot contain the string "]]>", therefore, nested CDATA sections are not allowed.

Also make sure there are no spaces or line breaks inside the "]]>" string

XML Encoding

XML documents may contain foreign characters, like Norwegian æ ø å , or French ê è é.

To let your XML parser understand these characters, you should save your XML documents as Unicode.

Windows 2000 Notepad

Windows 2000 Notepad can save files as Unicode.

Save the XML file below as Unicode (note that the document does not contain any encoding attribute):

<?xml version="1.0"?><note> <from>Jani</from> <to>Tove</to> <message>Norwegian: æøå. French: êèé</message></note>

The file above, n ote_encode_none_u.xml will NOT generate an error in IE 5+, Firefox, or Opera, but it WILL generate an error in Netscape 6.2.

Windows 2000 Notepad with Encoding

Windows 2000 Notepad files saved as Unicode use "UTF-16" encoding.

If you add an encoding attribute to XML files saved as Unicode, windows encoding values will generate an error.

The following encoding (open it), will NOT give an error message:

<?xml version="1.0" encoding="windows-1252"?>

The following encoding (open it), will NOT give an error message:

<?xml version="1.0" encoding="ISO-8859-1"?>

44

Page 45: Introduction to XML

The following encoding (open it), will NOT give an error message:

<?xml version="1.0" encoding="UTF-8"?>

The following encoding (open it), will NOT generate an error in IE 5+, Firefox, or Opera, but it WILL generate an error in Netscape 6.2.

<?xml version="1.0" encoding="UTF-16"?>

Error Messages

If you try to load an XML document into Internet Explorer, you can get two different errors indicating encoding problems:

An invalid character was found in text content.

You will get this error message if a character in the XML document does not match the encoding attribute. Normally you will get this error message if your XML document contains "foreign" characters, and the file was saved with a single-byte encoding editor like Notepad, and no encoding attribute was specified. 

Switch from current encoding to specified encoding not supported.

You will get this error message if your file was saved as Unicode/UTF-16 but the encoding attribute specified a single-byte encoding like Windows-1252, ISO-8859-1 or  UTF-8. You can also get this error message if your document was saved with single-byte encoding, but the encoding attribute specified a double-byte encoding like UTF-16.

Conclusion

The conclusion is that the encoding attribute has to specify the encoding used when the document was saved. My best advice to avoid errors is:

Use an editor that supports encoding Make sure you know what encoding it uses Use the same encoding attribute in your XML documents

XML on the Server

XML can be generated on a server without installing any XML controls.

Storing XML on the Server

XML files can be stored on an Internet server exactly the same way as HTML files.

Start Windows Notepad and write the following lines: 

45

Page 46: Introduction to XML

<?xml version="1.0" encoding="ISO-8859-1"?><note> <from>Jani</from> <to>Tove</to> <message>Remember me this weekend</message></note>

Save the file on your web server with a proper name like "note.xml".

Generating XML with ASP

XML can be generated on a server without any installed XML software.

To generate an XML response from the server - simply write the following code and save it as an ASP file on the web server:

<%response.ContentType="text/xml"response.Write("<?xml version='1.0' encoding='ISO-8859-1'?>")response.Write("<note>")response.Write("<from>Jani</from>")response.Write("<to>Tove</to>")response.Write("<message>Remember me this weekend</message>")response.Write("</note>")%>

Note that the content type of the response must be set to "text/xml".

See how the ASP file will be returned from the server.

If you don't know how to write ASP, please visit our ASP tutorial

Getting XML from a Database

XML can be generated from a database without any installed XML software.

To generate an XML database response from the server, simply write the following code and save it as an ASP file on the web server:

<%response.ContentType = "text/xml"set conn=Server.CreateObject("ADODB.Connection") conn.provider="Microsoft.Jet.OLEDB.4.0;"conn.open server.mappath("/db/database.mdb")sql="select fname,lname from tblGuestBook"set rs=Conn.Execute(sql)rs.MoveFirst()response.write("<?xml version='1.0' encoding='ISO-8859-1'?>")response.write("<guestbook>")while (not rs.EOF)

46

Page 47: Introduction to XML

response.write("<guest>") response.write("<fname>" & rs("fname") & "</fname>") response.write("<lname>" & rs("lname") & "</lname>") response.write("</guest>") rs.MoveNext()wendrs.close()conn.close()response.write("</guestbook>")%>

See the real life database output from the ASP file above.

The example above uses ASP with ADO. If you don't know how to use ADO, please visit our ADO tutorial.

XML Application

This chapter demonstrates a small framework for an XML application.

The XML Example Document

Look at the following XML document ("cd_catalog.xml"), that represents a CD catalog:

<?xml version="1.0" encoding="ISO-8859-1"?><CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD>..... more ....

View the full "cd_catalog.xml" file in your browser.

Load the XML document into a Data Island

A Data Island can be used to access the XML file.

To get your XML document "inside" an HTML page, add an XML Data Island to the HTML page:

47

Page 48: Introduction to XML

<xml src="cd_catalog.xml" id="xmldso" async="false"></xml>

With the example code above, the XML file "cd_catalog.xml" will be loaded into an "invisible" Data Island called "xmldso". The async="false" attribute is added to make sure that all the XML data is loaded before any other HTML processing takes place.

Bind the Data Island to an HTML Table

To make the XML data visible on the HTML page, you must "bind" the Data Island to an HTML element.

To bind the XML data to an HTML table, add a datasrc attribute to the table element, and add datafld attributes to the span elements inside the table data:

<table datasrc="#xmldso" width="100%" border="1"><thead><th>Title</th><th>Artist</th><th>Year</th></thead><tr align="left"><td><span datafld="TITLE"></span></td><td><span datafld="ARTIST"></span></td><td><span datafld="YEAR"></span></td></tr></table>

If you have IE 5.0 or higher: See how the XML data is displayed inside an HTML table.

Bind the Data Island to <span> or <div> elements

<span> or <div> elements can be used to display XML data.

You don't have to use the HTML table element to display XML data. Data from a Data Island can be displayed anywhere on an HTML page.

All you have to do is to add some <span> or <div> elements to your page. Use the datasrc attribute to bind the elements to the Data Island, and the datafld attribute to bind each element to an XML element, like this:

<br />Title:<span datasrc="#xmldso" datafld="TITLE"></span><br />Artist:<span datasrc="#xmldso" datafld="ARTIST"></span><br />Year:<span datasrc="#xmldso" datafld="YEAR"></span>

48

Page 49: Introduction to XML

or like this:

<br />Title:<div datasrc="#xmldso" datafld="TITLE"></div><br />Artist:<div datasrc="#xmldso" datafld="ARTIST"></div><br />Year:<div datasrc="#xmldso" datafld="YEAR"></div>

If you have IE 5.0 or higher: See how the XML data is displayed inside the HTML elements.

Note that if you use an HTML <div> element, the data will be displayed on a new line.

With the examples above, you will only see one line of your XML data. To navigate to the next line of data, you have to add some scripting to your code. 

Add a Navigation Script

Navigation has to be performed by a script.

To add navigation to the XML Data Island, create a script that calls the movenext() and moveprevious() methods of the Data Island.

<script type="text/javascript">function movenext(){x=xmldso.recordsetif (x.absoluteposition < x.recordcount)

{x.movenext()}

}function moveprevious(){x=xmldso.recordsetif (x.absoluteposition > 1)

{x.moveprevious()}

}</script>

If you have IE 5.0 or higher: See how you can navigate through the XML records.

All Together Now

With a little creativity you can create a full application.

If you use what you have learned on this page, and a little imagination, you can easily develop this into a full application.

49

Page 50: Introduction to XML

If you have IE 5.0 or higher: See how you can add a little fancy to this application

The XMLHttpRequest Object

The XMLHttpRequest object is supported in Internet Explorer 5.0+, Safari 1.2, Mozilla 1.0 / Firefox, and Netscape 7.

What is an HTTP Request?

With an HTTP request, a web page can make a request to, and get a response from a web server - without reloading the page. The user will stay on the same page, and he or she will not notice that scripts might request pages, or send data to a server in the background.

By using the XMLHttpRequest object, a web developer can change a page with data from the server after the page has loaded.

Google Suggest is using the XMLHttpRequest object to create a very dynamic web interface: When you start typing in Google's search box, a JavaScript sends the letters off to a server and the server returns a list of suggestions.

Is the XMLHttpRequest Object a W3C Standard?

The XMLHttpRequest object is not a W3C standard.

The W3C DOM Level 3 "Load and Save" specification contains some similar functionality, but these are not implemented in any browsers yet. So, at the moment, if you need to send an HTTP request from a browser, you will have to use the XMLHttpRequest object.

Creating an XMLHttpRequest Object

For Mozilla, Firefox, Safari, and Netscape:

var xmlhttp=new XMLHttpRequest()

For Internet Explorer:

var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")

Example<script type="text/javascript">var xmlhttpfunction loadXMLDoc(url){// code for Mozilla, etc.if (window.XMLHttpRequest)

50

Page 51: Introduction to XML

{ xmlhttp=new XMLHttpRequest() xmlhttp.onreadystatechange=xmlhttpChange xmlhttp.open("GET",url,true) xmlhttp.send(null) }// code for IEelse if (window.ActiveXObject) { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP") if (xmlhttp) { xmlhttp.onreadystatechange=xmlhttpChange xmlhttp.open("GET",url,true) xmlhttp.send() } }}function xmlhttpChange(){// if xmlhttp shows "loaded"if (xmlhttp.readyState==4) { // if "OK" if (xmlhttp.status==200) { // ...some code here... } else { alert("Problem retrieving XML data") } }}</script>

Try it yourself using JavaScript

The syntax is a little bit different in VBScript: Try it yourself using VBScript

Note: An important property in the example above is the onreadystatechange property. This property is an event handler which is triggered each time the state of the request changes. The states run from 0 (uninitialized) to 4 (complete). By having the function xmlhttpChange() check for the state changing, we can tell when the process is complete and continue only if it has been successful.

Why are we Using async in our Examples?

All the examples here use the async mode (the third parameter of open() set to true).

The async parameter specifies whether the request should be handled asynchronously or not. True means that script continues to run after the send() method, without waiting for a response from the server. false means that the script waits for a response before continuing script processing. By setting this parameter to false, you run the risk of having your script hang if there is a network or server problem, or if the request is long (the UI locks while the request is being made) a user may even see the "Not Responding" message. It is safer to send asynchronously and design your code around the onreadystatechange event!

51

Page 52: Introduction to XML

More Examples

Load a textfile into a div element with XML HTTP (JavaScript)

Make a HEAD request with XML HTTP (JavaScript)

Make a specified HEAD request with XML HTTP (JavaScript)

The XMLHttpRequest Object Reference

MethodsMethod Descriptionabort() Cancels the current requestgetAllResponseHeaders() Returns the complete set of http headers as a stringgetResponseHeader("headername") Returns the value of the specified http headeropen("method","URL",async,"uname","pswd") Specifies the method, URL, and other optional

attributes of a request

The method parameter can have a value of "GET", "POST", or "PUT" (use "GET" when requesting data and use "POST" when sending data (especially if the length of the data is greater than 512 bytes.

The URL parameter may be either a relative or complete URL.

The async parameter specifies whether the request should be handled asynchronously or not. true means that script processing carries on after the send() method, without waiting for a response. false means that the script waits for a response before continuing script processing

send(content) Sends the requestsetRequestHeader("label","value") Adds a label/value pair to the http header to be sent

PropertiesProperty Descriptiononreadystatechange An event handler for an event that fires at every state changereadyState Returns the state of the object:

0 = uninitialized1 = loading2 = loaded3 = interactive4 = complete

responseText Returns the response as a stringresponseXML Returns the response as XML. This property returns an XML document

object, which can be examined and parsed using W3C DOM node tree methods and properties

status Returns the status as a number (e.g. 404 for "Not Found" or 200 for "OK")

52

Page 53: Introduction to XML

statusText Returns the status as a string (e.g. "Not Found" or "OK")

Save Data to an XML File

Usually, we save data in databases. However, if we want to make the data more portable, we can store the data in an XML file.

Create and Save an XML FileStoring data in XML files is useful if the data is to be sent to applications on non-Windows platforms. Remember that XML is portable across all platforms and the data will not need to be converted!

First we will learn how to create and save an XML file. The XML file below will be named "test.xml" and will be stored in the c directory on the server. We will use ASP and Microsoft's XMLDOM object to create and save the XML file:

<%Dim xmlDoc, rootEl, child1, child2, p'Create an XML documentSet xmlDoc = Server.CreateObject("Microsoft.XMLDOM")'Create a root element and append it to the documentSet rootEl = xmlDoc.createElement("root")xmlDoc.appendChild rootEl'Create and append child elementsSet child1 = xmlDoc.createElement("child1")Set child2 = xmlDoc.createElement("child2")rootEl.appendChild child1rootEl.appendChild child2'Add an XML processing instruction'and insert it before the root elementSet p=xmlDoc.createProcessingInstruction("xml","version='1.0'")xmlDoc.insertBefore p,xmlDoc.childNodes(0)'Save the XML file to the c directoryxmlDoc.Save "c:\test.xml"%>

If you open the saved XML file it will look something like this ("test.xml"):

<?xml version="1.0"?><root> <child1 /> <child2 /></root>

53

Page 54: Introduction to XML

Real Form Example

Now, we will look at a real HTML form example.

We will first look at the HTML form that will be used in this example: The HTML form below asks for the user's name, country, and e-mail address. This information will then be written to an XML file for storage.

"customers.htm":

<html><body><form action="saveForm.asp" method="post"><p><b>Enter your contact information</b></p>First Name: <input type="text" id="fname" name="fname"><br />Last Name: <input type="text" id="lname" name="lname"><br />Country: <input type="text" id="country" name="country"><br />Email: <input type="text" id="email" name="email"><br /><input type="submit" id="btn_sub" name="btn_sub" value="Submit"><input type="reset" id="btn_res" name="btn_res" value="Reset"></form></body></html>

The action for the HTML form above is set to "saveForm.asp". The "saveForm.asp" file is an ASP page that will loop through the form fields and store their values in an XML file:

<%dim xmlDocdim rootEl,fieldName,fieldValue,attIDdim p,i'Do not stop if an error occursOn Error Resume NextSet xmlDoc = server.CreateObject("Microsoft.XMLDOM")xmlDoc.preserveWhiteSpace=true'Create a root element and append it to the documentSet rootEl = xmlDoc.createElement("customer")xmlDoc.appendChild rootEl'Loop through the form collectionfor i = 1 To Request.Form.Count 'Eliminate button elementsin the form if instr(1,Request.Form.Key(i),"btn_")=0 then 'Create a field and a value element, and an id attribute Set fieldName = xmlDoc.createElement("field") Set fieldValue = xmlDoc.createElement("value") Set attID = xmlDoc.createAttribute("id") 'Set the value of the id attribute equal to the name of 'the current form field attID.Text = Request.Form.Key(i) 'Append the id attribute to the field element fieldName.setAttributeNode attID 'Set the value of the value element equal to 'the value of the current form field fieldValue.Text = Request.Form(i) 'Append the field element as a child of the root element

54

Page 55: Introduction to XML

rootEl.appendChild fieldName 'Append the value element as a child of the field element fieldName.appendChild fieldValue end ifnext'Add an XML processing instruction'and insert it before the root elementSet p = xmlDoc.createProcessingInstruction("xml","version='1.0'")xmlDoc.insertBefore p,xmlDoc.childNodes(0)'Save the XML filexmlDoc.save "c:\Customer.xml"'Release all object referencesset xmlDoc=nothingset rootEl=nothingset fieldName=nothingset fieldValue=nothingset attID=nothingset p=nothing'Test to see if an error occurredif err.number<>0 then response.write("Error: No information saved.")else response.write("Your information has been saved.")end if%>

Note: If the XML file name specified already exists, it will be overwritten!

The XML file that will be produced by the code above will look something like this ("Customer.xml"):

<?xml version="1.0" ?><customer> <field id="firstName"> <value>Hege</value> </field> <field id="lastName"> <value>Refsnes</value> </field> <field id="country"> <value>Norway</value> </field> <field id="email"> <value>[email protected]</value> </field></customer>

XML DHTML Behaviors

Internet Explorer 5 introduced DHTML behaviors. Behaviors are a way to add DHTML functionality to HTML elements with the ease of CSS.

55

Page 56: Introduction to XML

Behaviors - What are They?

IE5 introduced DHTML behaviors. Behaviors are a way to add DHTML functionality to HTML elements with the ease of CSS.

How does behaviors work? By using XML we can link behaviors to any element in a web page and manipulate that element.

DHTML behaviors do not use a <script> tag. Instead, they are using a CSS attribute called "behavior". This "behavior" specifies a URL to an HTC file which contains the actual behavior (The HTC file is written in XML).

Syntaxbehavior: url(some_filename.htc)

Note: The behavior attribute is only supported by IE 5 and higher, all other browsers will ignore it. This means that Mozilla, Firefox, Netscape and other browsers will only see the regular content and IE 5+ can see the DHTML behaviors.

Example

The following HTML file has a <style> element that defines a behavior for the <h1> element:

<html><head><style type="text/css">h1 { behavior: url(behave.htc) }</style></head>

<body><h1>Mouse over me!!!</h1></body></html>

The XML document "behave.htc" is shown below:

<attach for="element" event="onmouseover" handler="hig_lite" /><attach for="element" event="onmouseout" handler="low_lite" />

<script type="text/javascript">function hig_lite(){element.style.color='red'}function low_lite(){element.style.color='blue'}</script>

56

Page 57: Introduction to XML

The behavior file contains a JavaScript and the event handlers for the script.

Try it yourself (mouse over the text in the example).

The following HTML file has a <style> element that defines a behavior for elements with an id of "typing":

<html><head><style type="text/css">#typing{behavior:url(typing.htc);font-family:'courier new';}</style></head>

<body><span id="typing" speed="100">IE5 introduced DHTML behaviors.Behaviors are a way to add DHTML functionality to HTML elementswith the ease of CSS.<br /><br />How does behaviors work?<br />By using XML we can link behaviors to any element in a web pageand manipulate that element.</p></span></body></html>

The XML document "typing.htc" is shown below:

<attach for="window" event="onload" handler="beginTyping" /><method name="type" /><script type="text/javascript">var i,text1,text2,textLength,tfunction beginTyping(){i=0text1=element.innerTexttextLength=text1.lengthelement.innerText=""text2=""t=window.setInterval(element.id+".type()",speed)}function type(){text2=text2+text1.substring(i,i+1)element.innerText=text2i=i+1if (i==textLength){clearInterval(t)}}</script>

Try it yourself

XML Related Technologies

57

Page 58: Introduction to XML

Below is a list of XML-related technologies.

XHTML (Extensible HTML) is a stricter and cleaner version of HTML.

XML DOM (XML Document Object Model) defines a standard way for accessing and manipulating XML documents.

XSL (Extensible Style Sheet Language) - XSL consists of three parts: XSLT - a language for transforming XML documents, XPath - a language for navigating in XML documents, and XSL-FO - a language for formatting XML documents.

XSLT (XSL Transformations) is used to transform XML documents into other XML formats, like XHTML.

XPath is a language for navigating in XML documents.

XSL-FO (Extensible Style Sheet Language Formatting Objects) is an XML based markup language describing the formatting of XML data for output to screen, paper or other media.

XLink (XML Linking Language) is a language for creating hyperlinks in XML documents.

XPointer (XML Pointer Language) allows the XLink hyperlinks to point to more specific parts in the XML document.

DTD (Document Type Definition) is used to define the legal elements in an XML document.

XSD (XML Schema) is an XML-based alternative to DTDs.

XForms (XML Forms) uses XML to define form data.

XQuery (XML Query Language) is designed to query XML data.

SOAP (Simple Object Access Protocol) is an XML-based protocol to let applications exchange information over HTTP.

WSDL (Web Services Description Language) is an XML-based language for describing web services.

RDF (Resource Description Framework) is an XML-based language for describing web resources.

RSS (Really Simple Syndication) is a format for syndicating news and the content of news-like sites.

WAP (Wireless Application Protocol) was designed to show internet contents on wireless clients, like mobile phones.

SMIL (Synchronized Multimedia Integration Language) is a language for describing audiovisual presentations.

SVG (Scalable Vector Graphics) defines graphics in XML format.

58

Page 59: Introduction to XML

XML Editors

If you are serious about XML, you will benefit from using a professional XML Editor.

XML is Text-based

XML is a text-based markup language.

One great thing about XML is that XML files can be created and edited using a simple text-editor like Notepad.

However, when you start working with XML, you will soon find that it is better to edit XML documents using a professional XML editor.

Why Not Notepad?

Many web developers use Notepad to edit both HTML and XML documents because Notepad is included with the most common OS and it is simple to use. Personally I often use Notepad for quick editing of simple HTML, CSS, and XML files.

But, if you use Notepad for XML editing, you will soon run into problems.

Notepad does not know that you are writing XML, so it will not be able to assist you.

Why an XML Editor?

Today XML is an important technology, and development projects use XML-based technologies like:

XML Schema to define XML structures and data types XSLT to transform XML data SOAP to exchange XML data between applications WSDL to describe web services RDF to describe web resources XPath and XQuery to access XML data SMIL to define graphics

To be able to write error-free XML documents, you will need an intelligent XML editor!

XML Editors

Professional XML editors will help you to write error-free XML documents, validate your XML against a DTD or a schema, and force you to stick to a valid XML structure.

An XML editor should be able to:

Add closing tags to your opening tags automatically

59

Page 60: Introduction to XML

Force you to write valid XML Verify your XML against a DTD Verify your XML against a Schema Color code your XML syntax

Altova's XMLSPY

At W3Schools we have been using XMLSPY for many years. XMLSPY is our favorite XML editor. These are some of the features we especially like:

Easy to use Syntax coloring Automatic tag completion Automatic well-formed check Easy switching between text view and grid view Built in DTD and / or Schema validation Built in graphical XML Schema designer Powerful conversion utilities Database import and export Built in templates for most XML document types Built in XPath analyzer Full SOAP and WSDL capabilities Powerful project management

Read more about XMLSPY

60


Recommended