Xml dtd validation
Download
1 / 66

XML DTD Validation - PowerPoint PPT Presentation


  • 61 Views
  • Uploaded on

XML DTD Validation. In making up the slides for this lecture, I borrowed material from several sources: “Data on the Web” Abiteboul, Buneman and Suciu “XML in a Nutshell” Harold and Means “The XML Companion” Bradley

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' XML DTD Validation' - jovita


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Xml dtd validation
XML DTD Validation

In making up the slides for this lecture, I borrowed material

from several sources:

“Data on the Web” Abiteboul, Buneman and Suciu

“XML in a Nutshell” Harold and Means

“The XML Companion” Bradley

The validation examples were originally tested with an older parser

and so the specific outputs may differ from those shown.

Internet Technologies


Xml validation
XML Validation

A batch validating process involves comparing the DTD

against a complete document instance and producing a

report containing any errors or warnings.

Software developers should consider batch validation to be

analogous to program compilation, with similar errors

detected.

Interactive validation involves constant comparison of the DTD

against a document as it is being created.

Internet Technologies


Xml validation1
XML Validation

  • The benefits of validating documents against a DTD include:

  • Programmers can write extraction and manipulation filters

  • without fear of their software ever processing unexpected

  • input.

  • Using an XML-aware word processor, authors and editors can

  • be guided and constrained to produce conforming documents.

Internet Technologies


Xml validation examples
XML Validation Examples

XML elements may contain further, embedded elements, and

the entire document must be enclosed by a single document

element.

The degree to which an element’s content is organized into child

elements is often termed its granularity.

Some hierarchical structures are recursive.

The Document Type Definition (DTD) contains rules for each element

allowed within a specific class of documents.

Internet Technologies


Things the dtd does not do
Things the DTD does not do:

Tell us the document root.

Specify the number of instances of each kind of element.

Describe the character data inside an element (precise

syntax and semantics).

The XML schema language is new and may replace the

use of DTD’s

Internet Technologies


We’ll run this program

against several xml files

with DTD’s. We’ll study the

code soon.

// Validate.java using Xerces

import java.io.*;

import org.xml.sax.ErrorHandler;

import org.xml.sax.SAXException;

import org.xml.sax.SAXParseException;

import org.xml.sax.XMLReader;

import org.xml.sax.InputSource;

import org.xml.sax.helpers.XMLReaderFactory;

import org.xml.sax.helpers.DefaultHandler;

This slide shows the imported

classes.

Internet Technologies


public class Validate

{

public static boolean valid = true;

public static void main (String argv [])

{

if (argv.length != 1) {

System.err.println ("Usage: java Validate filename.xml");

System.exit (1);

}

Here we check if the command

line is correct.

Internet Technologies


try {

// get a parser

XMLReader reader =

XMLReaderFactory.createXMLReader(

"org.apache.xerces.parsers.SAXParser");

// request validation

reader.setFeature("http://xml.org/sax/features/validation",

true);

// associate an InputSource object with the file name

InputSource inputSource = new InputSource(argv[0]);

// go ahead and parse

reader.parse(inputSource);

}

Internet Technologies


// Catch any errors or fatal errors here.

// The parser will handle simple warnings.

catch(org.xml.sax.SAXException e) {

System.out.println("Error in parsing " + e);

valid = false;

}

catch(java.io.IOException e) {

System.out.println("Error in I/O " + e);

System.exit(0);

}

System.out.println("Valid Document is " + valid);

}

}

Internet Technologies


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

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd">

<FixedFloatSwap>

<Notional>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

XML Document

DTD

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

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumYears, NumPayments ) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

Valid document is true

Internet Technologies


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

<!DOCTYPE FixedFloatSwap SYSTEM "http://localhost:8001/dtd/FixedFloatSwap.dtd">

<FixedFloatSwap>

<Notional>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

XML Document

DTD on the Web?

VERY NICE

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

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumYears, NumPayments ) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

Valid document is true

Internet Technologies


XML Document with

an internal subset

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

<!DOCTYPE FixedFloatSwap [

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumYears, NumPayments ) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

]>

<FixedFloatSwap>

<Notional>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

Valid document is true

Internet Technologies


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

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd">

<FixedFloatSwap>

<Notional>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

XML Document

DTD

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

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumPayments ) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

Valid document is false

Internet Technologies


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

<!DOCTYPE Swaps SYSTEM "FixedFloatSwap.dtd">

<Swaps>

<FixedFloatSwap>

<Notional>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

<FixedFloatSwap>

<Notional>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

</Swaps>

XML Document

Internet Technologies


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

<!ELEMENT Swaps (FixedFloatSwap+) >

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumYears, NumPayments ) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

DTD

C:\McCarthy\www\examples\sax>java Validate FixedFloatSwap.xml

Valid document is true

Quantity Indicators

? 0 or 1 time

+ 1 or more times

* 0 or more times

Internet Technologies


Is this a valid document
Is this a valid document?

<?xml version="1.0"?>

<!DOCTYPE person [

<!ELEMENT person (name+, profession*)>

<!ELEMENT profession (#PCDATA)>

<!ELEMENT name (#PCDATA)>

]>

<person>

<name>Alan Turing</name>

<profession>computer scientist</profession>

<profession>cryptographer</profession>

</person>

Sure!

Internet Technologies


The locations where document text data is allowed are indicated

by the keyword ‘PCDATA’ (Parsed Character Data).

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

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd">

<FixedFloatSwap>

<Notional>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>

<StartYear>2000</StartYear>

<EndYear>2002</EndYear>

</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

XML Document

Internet Technologies


DTD indicated

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

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumYears, NumPayments ) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

Output

C:\McCarthy\www\46-928\examples\sax>java Validate FixedFloatSwap.xml

org.xml.sax.SAXParseException: Element "NumYears" does not allow "StartYear" --

(#PCDATA)

org.xml.sax.SAXParseException: Element type "StartYear" is not declared.

org.xml.sax.SAXParseException: Element "NumYears" does not allow "EndYear" -- (#

PCDATA)

org.xml.sax.SAXParseException: Element type "EndYear" is not declared.

Valid document is false

Internet Technologies


Mixed content
Mixed Content indicated

There are strict rules which must be applied when an element is allowed to contain both text and child elements.

The PCDATA keyword must be the first token in the group, and the group must be a choice group (using “|” not “,”).

The group must be optional and repeatable.

This is known as a mixed content model.

Internet Technologies


<?xml version="1.0" encoding="utf-8"?> indicated

<!ELEMENT Mixed (emph) >

<!ELEMENT emph (#PCDATA | sub | super)* >

<!ELEMENT sub (#PCDATA)>

<!ELEMENT super (#PCDATA)>

DTD

XML Document

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

<!DOCTYPE Mixed SYSTEM "Mixed.dtd">

<Mixed>

<emph>H<sub>2</sub>O is water.</emph>

</Mixed>

Valid document is

true

Internet Technologies


Is this a valid document1
Is this a valid document? indicated

<?xml version="1.0"?>

<!DOCTYPE page [

<!ELEMENT page (paragraph+)>

<!ELEMENT paragraph ( #PCDATA | profession | bold)*>

<!ELEMENT profession (#PCDATA)>

<!ELEMENT bold (#PCDATA)>

]>

<page>

<paragraph>

Alan Turing broke codes during <bold>World War II</bold>.

He very precisely defined the notion of "algorithm".

And so he had several professions:

<profession>computer scientist</profession>

<profession>cryptographer</profession>

And

<profession>mathematician</profession>

</paragraph>

</page>

Sure!

Internet Technologies


How about this one
How about this one? indicated

<?xml version="1.0"?>

<!DOCTYPE page [

<!ELEMENT page (paragraph+)>

<!ELEMENT paragraph ( #PCDATA | profession | bold)*>

<!ELEMENT profession (#PCDATA)>

<!ELEMENT bold (#PCDATA)>

]>

<page>

The following is a paragraph marked up in XML.

<paragraph>

Alan Turing broke codes during <bold>World War II</bold>.

He very precisely defined the notion of "algorithm".

And so he had several professions:

<profession>computer scientist</profession>

<profession>cryptographer</profession>

And

<profession>mathemetician </profession>

</paragraph>

</page>

java Validate mixed.xml

org.xml.sax.SAXParseException:

The content of element type "page"

must match "(paragraph)+".

Valid document is false

Internet Technologies


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

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd">

<FixedFloatSwap>

<Notional>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

<Note>

<![CDATA[This is text that <b>will not be

parsed for markup]]>

</Note>

</FixedFloatSwap>

XML Document

CDATA Section

DTD

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

<!ELEMENT FixedFloatSwap ( Notional, Fixed_Rate, NumYears,

NumPayments, Note ) >

<!ELEMENT Notional (#PCDATA)>

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

<!ELEMENT Note (#PCDATA) >

Internet Technologies


Recursion
Recursion indicated

<?xml version="1.0"?>

<!DOCTYPE tree [

<!ELEMENT tree (node)>

<!ELEMENT node (leaf | (node,node))>

<!ELEMENT leaf (#PCDATA)>

]>

<tree>

<node>

<leaf>A DTD is a context-free grammar</leaf>

</node>

</tree>

java Validate recursive1.xml

Valid document is true

Internet Technologies


How about this one1
How about this one? indicated

<?xml version="1.0"?>

<!DOCTYPE tree [

<!ELEMENT tree (node)>

<!ELEMENT node (leaf | (node,node))>

<!ELEMENT leaf (#PCDATA)>

]>

<tree>

<node>

<leaf>Alan Turing would like this</leaf>

</node>

<node>

<leaf>Alan Turing would like this</leaf>

</node>

</tree>

java Validate recursive1.xml

org.xml.sax.SAXParseException:

The content of element type

"tree" must match "(node)".

Valid document is false

Internet Technologies


Relational databases and xml
Relational Databases and XML indicated

Consider the relational database r1(a,b,c), r2(c,d)

r1: a b c r2: c d

a1 b1 c1 c2 d2

a2 b2 c2 c3 d3

c4 d4

How can we represent this database with an XML DTD?

Internet Technologies


Relations
Relations indicated

<?xml version="1.0"?>

<!DOCTYPE db [

<!ELEMENT db (r1*, r2*)>

<!ELEMENT r1 (a,b,c)>

<!ELEMENT r2 (c,d)>

<!ELEMENT a (#PCDATA)>

<!ELEMENT b (#PCDATA)>

<!ELEMENT c (#PCDATA)>

<!ELEMENT d (#PCDATA)>

]>

<db>

<r1><a> a1 </a> <b> b1 </b> <c> c1 </c> </r1>

<r1><a> a1 </a> <b> b1 </b> <c> c1 </c> </r1>

<r2><c> c2 </c> <d> d2 </d> </r2>

<r2><c> c3 </c> <d> d3 </d> </r2>

<r2><c> c4 </c> <d> d4 </d> </r2>

</db>

java Validate Db.xml

Valid document is true

There is a small problem….

Internet Technologies


Relations1
Relations indicated

<?xml version="1.0"?>

<!DOCTYPE db [

<!ELEMENT db (r1|r2)* >

<!ELEMENT r1 ((a,b,c) | (a,c,b) | (b,a,c) | (b,c,a) | (c,a,b) | (c,b,a))>

<!ELEMENT r2 ((c,d) | (d,c))>

<!ELEMENT a (#PCDATA)>

<!ELEMENT b (#PCDATA)>

<!ELEMENT c (#PCDATA)>

<!ELEMENT d (#PCDATA)>

]>

<db>

<r1><a> a1 </a> <b> b1 </b> <c> c1 </c> </r1>

<r1><a> a1 </a> <b> b1 </b> <c> c1 </c> </r1>

<r2><c> c2 </c> <d> d2 </d> </r2>

<r2><c> c3 </c> <d> d3 </d> </r2>

<r2><c> c4 </c> <d> d4 </d> </r2>

</db>

The order of the relations

should not count and neither

should the order of

columns within rows.

Internet Technologies


Attributes
Attributes indicated

An attribute is associated with a particular element by the DTD

and is assigned an attribute type.

The attribute type can restrict the range of values it can hold.

Example attribute types include :

CDATA indicates a simple string of characters

NMTOKEN indicates a word or token

A named token group such as (left | center | right)

ID an element id that holds a unique value (among other

element ID’s in the document)

IDREF attributes refer to an ID

Internet Technologies


<?xml version="1.0" encoding="utf-8"?> indicated

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumYears, NumPayments ) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

<!ATTLIST Notional currency (Dollars | Pounds) #REQUIRED>

DTD

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

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd">

<FixedFloatSwap>

<Notional>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

XML Document

C:\McCarthy\www\46-928\examples\sax>java Validate FixedFloatSwap.xml

org.xml.sax.SAXParseException: Attribute value for "currency" is #REQUIRED.

Valid document is false

Internet Technologies


<?xml version="1.0" encoding="utf-8"?> indicated

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumYears, NumPayments ) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

<!ATTLIST Notional currency (Dollars | Pounds) #REQUIRED>

DTD

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

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd">

<FixedFloatSwap>

<Notional currency = “Pounds”>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

XML Document

Valid document is true

Internet Technologies


<?xml version="1.0" encoding="utf-8"?> indicated

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumYears, NumPayments ) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

<!ATTLIST Notional currency (Dollars | Pounds) #REQUIRED>

<!ATTLIST FixedFloatSwap note CDATA #IMPLIED>

DTD

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

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd">

<FixedFloatSwap>

<Notional currency = “Pounds”>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

XML Document

Valid document is true

#IMPLIED means optional

Internet Technologies


<?xml version="1.0" encoding="utf-8"?> indicated

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumYears, NumPayments ) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

<!ATTLIST Notional currency (Dollars | Pounds) #REQUIRED>

<!ATTLIST FixedFloatSwap note CDATA #IMPLIED>

DTD

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

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd">

<FixedFloatSwap note = “For your eyes only”>

<Notional currency = “Pounds”>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

XML Document

Valid document is true

Internet Technologies


<?xml version="1.0" encoding="utf-8"?> indicated

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumYears, NumPayments ) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

<!ATTLIST Notional currency (Dollars | Pounds) #REQUIRED>

<!ATTLIST FixedFloatSwap note CDATA #IMPLIED>

DTD

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

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd">

<FixedFloatSwap>

<Notional currency = “Pounds”>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

XML Document

Valid document is true

#IMPLIED means optional

Internet Technologies


<?xml version="1.0" encoding="utf-8"?> indicated

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumYears, NumPayments ) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

<!ATTLIST Notional currency (Dollars | Pounds) #REQUIRED>

<!ATTLIST FixedFloatSwap note CDATA #IMPLIED>

DTD

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

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd">

<FixedFloatSwap note = “For your eyes only”>

<Notional currency = “Pounds”>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

XML Document

Valid document is true

Internet Technologies


Id and idref attributes
ID and IDREF Attributes indicated

We can represent complex relationships within an XML

document using ID and IDREF attributes.

Internet Technologies


An undirected graph
An Undirected Graph indicated

edge

vertex

v

w

u

x

z

y

Internet Technologies


A directed graph
A Directed Graph indicated

u

w

y

x

v

Internet Technologies


Geom100 indicated

Math 100

Calc300

Calc100

Calc200

CS1

Philo45

CS2

This is called a DAG (Directed Acyclic Graph)

Internet Technologies


<?xml version="1.0"?> indicated

<!DOCTYPE Course_Descriptions SYSTEM "course_descriptions.dtd">

<Course_Descriptions>

<Course>

<Course-ID id = "Math100" />

<Title>Algebra I</Title>

<Description> Students in this course study

introductory algebra.

</Description>

<Prerequisites/>

</Course>

This course has an ID

But no prerequisites

Internet Technologies


<Course> indicated

<Course-ID id = "Geom100" />

<Title>Geometry I</Title>

<Description> Students in this course study how to

prove several theorems in geometry.

</Description>

<Prerequisites/>

</Course>

The DTD will force

this to be unique.

Internet Technologies


<Course> indicated

<Course-ID id="Calc100" />

<Title>Calculus I</Title>

<Description> Students in this course study the derivative.

</Description>

<Prerequisites pre="Math100 Geom100" />

</Course>

<Course>

These are references to

ID’s. (IDREFS)

Internet Technologies


<Course-ID id = "Calc200" /> indicated

<Title>Calculus II</Title>

<Description> Students in this course study the integral.

</Description>

<Prerequisites pre="Calc100" />

</Course>

The DTD requires that this name

be a unique id defined within this

document. Otherwise, the document

is invalid.

Internet Technologies


<Course> indicated

<Course-ID id = "Calc300" />

<Title>Calculus II</Title>

<Description> Students in this course study the derivative

and the integral (in 3-space).

</Description>

<Prerequisites pre="Calc200" />

</Course>

Prerequisites is an EMPTY

element. It’s used only for its

attributes.

Internet Technologies


<Course> indicated

<Course-ID id = "CS1" />

<Title>Introduction to Computer Science I</Title>

<Description> In this course we study Turing machines.

</Description>

<Prerequisites pre="Calc100" />

</Course>

<Course>

IDREF

ID

A One-to-one link

Internet Technologies


<Course-ID id = "CS2" /> indicated

<Title>Introduction to Computer Science II</Title>

<Description> In this course we study basic data structures.

</Description>

<Prerequisites pre="Calc200 CS1"/>

</Course>

<Course>

ID

IDREFS

ID

One-to-many links

Internet Technologies


<Course-ID id = "Philo45" /> indicated

<Title>Ethical Implications of Information Technology</Title>

<Description> TBA

</Description>

<Prerequisites/>

</Course>

</Course_Descriptions>

Internet Technologies


The Course_Descriptions.dtd indicated

<?xml version="1.0"?>

<!-- Course Description DTD -->

<!ELEMENT Course_Descriptions (Course)+>

<!ELEMENT Course (Course-ID,Title,Description,Prerequisites)>

<!ELEMENT Course-ID EMPTY>

<!ELEMENT Title (#PCDATA)>

<!ELEMENT Description (#PCDATA)>

<!ELEMENT Prerequisites EMPTY>

<!ATTLIST Course-ID id ID #REQUIRED>

<!ATTLIST Prerequisites pre IDREFS #IMPLIED>

Internet Technologies


General entities
General Entities & indicated

General entities are used to place text into the XML document.

They may be declared in the DTD and referenced in the document.

They may also be declared in the DTD as residing in a file. They

may then be referenced in the document.

Internet Technologies


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

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd" [

<!ENTITY bankname "Mellon National Bank and Trust" >

]

>

<FixedFloatSwap>

<Bank>&bankname;</Bank>

<Notional>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

Document using

a General Entity

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

<!ELEMENT FixedFloatSwap (Bank,Notional, Fixed_Rate, NumYears,

NumPayments ) >

<!ELEMENT Bank (#PCDATA) >

<!ELEMENT Notional (#PCDATA) >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

DTD

Validate is true

Internet Technologies


The general entity is replaced before xslt sees it. indicated

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

version="1.0">

<xsl:template match = "Bank">

<WML>

<CARD>

<xsl:apply-templates/>

</CARD>

</WML>

</xsl:template>

<xsl:template match = "Notional | Fixed_Rate | NumYears | NumPayments">

</xsl:template>

</xsl:stylesheet>

XSLT Program

Internet Technologies


C:\McCarthy\www\46-928\examples\sax>java -Dcom.jclark.xsl.sax.parser=com.jclark.

xml.sax.CommentDriver com.jclark.xsl.sax.Driver FixedFloatSwap.xml FixedFloatSwa

p.xsl FixedFloatSwap.wml

C:\McCarthy\www\46-928\examples\sax>type FixedFloatSwap.wml

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

<WML><CARD>Mellon National Bank and Trust</CARD></WML>

XSLT OUTPUT

Internet Technologies


<?xml version="1.0" encoding="UTF-8"?> -Dcom.jclark.xsl.sax.parser=com.jclark.

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd" [

<!ENTITY bankname SYSTEM "JustAFile.dat" >

]

>

<FixedFloatSwap>

<Bank>&bankname;</Bank>

<Notional>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

An external text entity

Internet Technologies


JustAFile.dat -Dcom.jclark.xsl.sax.parser=com.jclark.

Mellon Bank And Trust Corporation

Pittsburgh PA

XSLT Output

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

<WML><CARD>Mellon Bank And Trust Corporation

Pittsburgh PA</CARD></WML>

Internet Technologies


Parameter Entities % -Dcom.jclark.xsl.sax.parser=com.jclark.

While general entities are used to place text into the XML document

parameter entities are used to modify the DTD.

We want to build modular DTD’s so that we can create new DTD’s

using existing ones.

We’ll look at slide from www.fpml.org and the see some examples.

Internet Technologies


Trade -Dcom.jclark.xsl.sax.parser=com.jclark.

Trade ID

Product

Adjustable Period

Rate

Notional

Party

FpML is a Complete Description of the Trade

Vanilla Swap

Vanilla Fixed Float Swap

Cancellable

Swaption

FX Spot

FX Outright

FX Swap

Forward Rate Agreement...

Pool of modular components

grouped into separate namespaces

Party

Rate

Date

Money

Notional

Product

Adjustable Period

Date Schedule

Internet Technologies


<?xml version="1.0" encoding="utf-8"?> -Dcom.jclark.xsl.sax.parser=com.jclark.

<!ELEMENT FixedFloatSwap (Notional, Fixed_Rate, NumYears,

NumPayments ) >

<!ENTITY % parsedCharacterData "(#PCDATA)">

<!ELEMENT Notional %parsedCharacterData; >

<!ELEMENT Fixed_Rate (#PCDATA) >

<!ELEMENT NumYears (#PCDATA) >

<!ELEMENT NumPayments (#PCDATA) >

DTD

Internal Parameter Entities

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

<!DOCTYPE FixedFloatSwap SYSTEM "FixedFloatSwap.dtd">

<FixedFloatSwap>

<Notional>100</Notional>

<Fixed_Rate>5</Fixed_Rate>

<NumYears>3</NumYears>

<NumPayments>6</NumPayments>

</FixedFloatSwap>

XML Document

Internet Technologies


External parameter entities and dtd components
External Parameter Entities and DTD Components -Dcom.jclark.xsl.sax.parser=com.jclark.

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

<!DOCTYPE ORDER SYSTEM "order.dtd">

<!-- example order form from “XML A Manager’s Guide” -->

<ORDER SOURCE ="web" CUSTOMERTYPE="consumer" CURRENCY="USD">

<addresses>

<address ADDTYPE="billship">

<firstname>Kevin</firstname>

<lastname>Dick</lastname>

<street ORDER="1">123 Anywhere Lane</street>

<street ORDER="2">Apt 1b</street>

<city>Palo Alto</city>

<state>CA</state>

<postal>94303</postal>

<country>USA</country>

</address>

Order.xml

Internet Technologies


An order may have more than one -Dcom.jclark.xsl.sax.parser=com.jclark.

address.

<address ADDTYPE="bill">

<firstname>Kevin</firstname>

<lastname>Dick</lastname>

<street ORDER="1">123 Not The Same Lane</street>

<street ORDER="2">Work Place</street>

<city>Palo Alto</city>

<state>CA</state>

<postal>94300</postal>

<country>USA</country>

</address>

</addresses>

Internet Technologies


Several products -Dcom.jclark.xsl.sax.parser=com.jclark.

may be purchased.

<lineitems>

<lineitem ID="line1">

<product CAT="MBoard">440BX Motherboard</product>

<quantity>1</quantity>

<unitprice>200</unitprice>

</lineitem>

<lineitem ID="line2">

<product CAT = "RAM">128 MB PC-100 DIMM</product>

<quantity>2</quantity>

<unitprice>175</unitprice>

</lineitem>

<lineitem ID="line3">

<product CAT="CDROM">40x CD-ROM</product>

<quantity>1</quantity>

<unitprice>50</unitprice>

</lineitem>

</lineitems>

Internet Technologies


The payment is with -Dcom.jclark.xsl.sax.parser=com.jclark.

a Visa card.

<payment>

<card CARDTYPE="VISA">

<cardholder>Kevin S. Dick</cardholder>

<cardnumber>11111-22222-33333</cardnumber>

<expiration>01/01</expiration>

</card>

</payment>

</ORDER>

We want this document to be validated.

Internet Technologies


Order dtd
order.dtd -Dcom.jclark.xsl.sax.parser=com.jclark.

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

<!-- Example Order form DTD adapted from XML: A Manager's Guide -->

<!-- Define an ORDER element -->

<!ELEMENT ORDER (addresses, lineitems, payment)>

<!ATTLIST ORDER

SOURCE (web | phone | retail) #REQUIRED

CUSTOMERTYPE (consumer | business) "consumer"

CURRENCY CDATA "USD"

>

Define an order based on other elements.

Internet Technologies


<!ENTITY % anAddress SYSTEM "address.dtd" > -Dcom.jclark.xsl.sax.parser=com.jclark.

%anAddress;

<!-- Collection of Addresses -->

<!ELEMENT addresses (address+)>

<!ENTITY % aLineItem SYSTEM "lineitem.dtd" >

%aLineItem;

<!-- Collection of LineItems -->

<!ELEMENT lineitems (lineitem+)>

<!ENTITY % aPayment SYSTEM "payment.dtd" >

%aPayment;

External parameter

entity declaration %

External parameter

entity reference %

Internet Technologies


Address dtd
address.dtd -Dcom.jclark.xsl.sax.parser=com.jclark.

<!-- Address Structure -->

<!ELEMENT address (firstname, middlename?, lastname, street+,

city, state,postal,country)>

<!ELEMENT firstname (#PCDATA)>

<!ELEMENT middlename (#PCDATA)>

<!ELEMENT lastname (#PCDATA)>

<!ELEMENT street (#PCDATA)>

<!ELEMENT city (#PCDATA)>

<!ELEMENT state (#PCDATA)>

<!ELEMENT postal (#PCDATA)>

<!ELEMENT country (#PCDATA)>

<!ATTLIST address

ADDTYPE (bill | ship | billship) "billship">

<!ATTLIST street

ORDER CDATA #IMPLIED>

Internet Technologies


Lineitem dtd
lineitem.dtd -Dcom.jclark.xsl.sax.parser=com.jclark.

<!ELEMENT lineitem (product,quantity,unitprice)>

<!ATTLIST lineitem

ID ID #REQUIRED>

<!ELEMENT product (#PCDATA)>

<!ATTLIST product

CAT (CDROM|MBoard|RAM) #REQUIRED>

<!ELEMENT quantity (#PCDATA)>

<!ELEMENT unitprice (#PCDATA)>

Internet Technologies


Payment dtd
payment.dtd -Dcom.jclark.xsl.sax.parser=com.jclark.

<!ELEMENT payment (card | PO)>

<!ELEMENT card (cardholder, cardnumber, expiration)>

<!ELEMENT cardholder (#PCDATA)>

<!ELEMENT cardnumber (#PCDATA)>

<!ELEMENT expiration (#PCDATA)>

<!ELEMENT PO (number,authorization*)>

<!ELEMENT number (#PCDATA)>

<!ELEMENT authorization (#PCDATA)>

<!ATTLIST card

CARDTYPE (VISA|MasterCard|Amex) #REQUIRED>

Internet Technologies


ad