<?xml version="1.0" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="contents.xsl"?>
<!DOCTYPE tableOfContents SYSTEM "contents.dtd">

<tableOfContents>
  <chapter num="1" pages="28">
    <title>Introduction to XML</title>
    <contents>
      <section pnum="1">
        <title>Course Overview</title>
        <subsection pnum="1">Extensible Markup Language</subsection>
        <subsection pnum="1">Document Type Definitions</subsection>
        <subsection pnum="2">XML Schemas</subsection>
        <subsection pnum="2">Relax NG</subsection>
        <subsection pnum="2">Document Object Model</subsection>
        <subsection pnum="2">Simple API for XML</subsection>
        <subsection pnum="3">JDOM</subsection>
        <subsection pnum="3">XSL Transformations</subsection>
        <subsection pnum="3">XPath</subsection>
        <subsection pnum="3">XQuery</subsection>
        <subsection pnum="4">XML Remote Procedure Call</subsection>
        <subsection pnum="4">Simple Object Access Protocol</subsection>
        <subsection pnum="4">Java Architectyure for XML Binding</subsection>
        <subsection pnum="4">Extensible Hypertext Markup Language</subsection>
      </section>
      <section pnum="5">
        <title>What is XML?</title>
        <subsection pnum="5">Example</subsection>
        <subsection pnum="6">Problems</subsection>
        <subsection pnum="7">An Alternative:XML</subsection>
        <subsection pnum="7" kind="xml">An XML File: phone.xml</subsection>
        <subsection pnum="8" kind="xml">Another XML File: phone2.xml</subsection>
      </section>
      <section pnum="9">
        <title>Structure of an XML Document</title>
        <subsection pnum="11">Predefined entity references</subsection>
        <subsection pnum="11" kind="xml">File: code.xml</subsection>
        <subsection pnum="12">File Displayed in Firefox</subsection>
      </section>
      <section pnum="13">
        <title>Why not just use HTML?</title>
        <subsection pnum="14">Purposes of HTML and XML</subsection>
        <subsection pnum="14">Differences between XML and HTML</subsection>
        <subsection pnum="15" kind="html">File: badphone.html</subsection>
      </section>
      <section pnum="16">
        <title>Some XML Details</title>
        <subsection pnum="16">Element Identifiers and Attribute Names</subsection>
        <subsection pnum="16">Attributes</subsection>
        <subsection pnum="17" kind="xml">File: phoneAtt.xml</subsection>
        <subsection pnum="18">Which are Better: Elements or Attributes</subsection>
        <subsection pnum="18">XML Declaration</subsection>
        <subsection pnum="19">Tree Structure of XML</subsection>
        <subsection pnum="20">Relationships between Elements</subsection>
        <subsection pnum="20" kind="xml">File: tree.xml</subsection>
      </section>
      <section pnum="21">
        <title>Well-Formed XML Documents</title>
        <subsection pnum="22">A Software Tool: xmlwf</subsection>
      </section>
      <section pnum="23">
        <title>Namespaces</title>
        <subsection pnum="23">Namespaces are Common</subsection>
        <subsection pnum="25" kind="xml">File: phoneNS.xml</subsection>
        <subsection pnum="26">Default Namespaces</subsection>
        <subsection pnum="26">Components of Names</subsection>
        <subsection pnum="27">Existing Namespaces</subsection>
      </section>
      <section pnum="28">
        <title>XML Design Principles</title>
      </section>
   </contents>
  </chapter>
  <chapter num="2" pages="30">
    <title>Document Type Definitions</title>
    <contents>
      <section pnum="1">
        <title>Schemas</title>
        <subsection pnum="1">Advantages of Schemas</subsection>
        <subsection pnum="2">Document Type Definitions</subsection>
      </section>
      <section pnum="2">
        <title>Element Specification</title>
        <subsection pnum="4" kind="xml">File: phoneD.xml</subsection>
      </section>
      <section pnum="6">
        <title>Validation</title>
        <subsection pnum="7" kind="xml">File: phoneED.xml</subsection>
        <subsection pnum="7" kind="xml">File: phoneWD.xml</subsection>
        <subsection pnum="8" kind="xml">Element Example: elems.dtd</subsection>
        <subsection pnum="9">Instances</subsection>
      </section>
      <section pnum="10">
        <title>Attributes</title>
        <subsection pnum="11">Attribute Types</subsection>
        <subsection pnum="12">Restrictions and Default Values</subsection>
        <subsection pnum="13" kind="dtd">Attribute Example: product.dtd</subsection>
        <subsection pnum="14" kind="xml">An Instance of product.dtd: product.xml</subsection>
        <subsection pnum="15">Other Validators</subsection>
      </section>
      <section pnum="15">
        <title>Validating with Java</title>
        <subsection pnum="16" kind="java">Program: DomCheck.java</subsection>
        <subsection pnum="18" kind="java">Error Handling</subsection>
        <subsection pnum="19">Registering the Error Handler</subsection>
        <subsection pnum="20">Example of a Fatal Error</subsection>
        <subsection pnum="20">Example of an Error</subsection>
        <subsection pnum="21">Warnings</subsection>
        <subsection pnum="22">Using an Alias in Unix</subsection>
      </section>
      <section pnum="23">
        <title>Public DTDs</title>
        <subsection pnum="24" kind="xml">Example: MusicXML</subsection>
        <subsection pnum="25">Testing Validity</subsection>
      </section>
      <section pnum="25">
        <title>Entities in DTDs</title>
        <subsection pnum="26">Entity References</subsection>
        <subsection pnum="26" kind="xml">Example: ent.xml</subsection>
        <subsection pnum="26">Expanding the Entities</subsection>
        <subsection pnum="27">Parameter Entities</subsection>
        <subsection pnum="28">Example</subsection>
      </section>
      <section pnum="29">
        <title>Sharing DTDs</title>
        <subsection pnum="29">Example: A DTD in Three Parts</subsection>
        <subsection pnum="29" kind="dtd">File 1: name.dtd</subsection>
        <subsection pnum="30" kind="dtd">File 2: entry.dtd</subsection>
        <subsection pnum="30" kind="dtd">File 3: phonePE.dtd</subsection>
        <subsection pnum="30" kind="xml">XML Document: phonePE.xml</subsection>
        <subsection pnum="30">Test Validity</subsection>
      </section>
   </contents>
  </chapter>
  <chapter num="3" pages="50">
    <title>Document Object Model</title>
    <contents>
      <section pnum="1">
        <title>DOM</title>
        <subsection pnum="1">Tasks that can be performed with DOM</subsection>
        <subsection pnum="2" kind="xml">File: root.xml</subsection>
      </section>
      <section pnum="3">
        <title>The Node Hierarchy</title>
        <subsection pnum="4">Interface Names and Their Constants</subsection>
        <subsection pnum="5">Node Interfaces, Their Names, Their Values</subsection>
      </section>
      <section pnum="6">
        <title>Methods for Inspecting a DOM Tree</title>
        <subsection pnum="6">Methods in Element</subsection>
        <subsection pnum="6">Methods in Attr</subsection>
        <subsection pnum="7">Methods in CharacterData</subsection>
        <subsection pnum="7">Methods in ProcessingInstruction</subsection>
        <subsection pnum="7">Methods in DocumentType</subsection>
        <subsection pnum="7">Methods in NodeList</subsection>
        <subsection pnum="7">Methods in NamedNodeMap</subsection>
        <subsection pnum="7">Methods in DocumentBuilderFactory</subsection>
      </section>
      <section pnum="8">
        <title>Displaying a DOM Tree</title>
        <subsection pnum="8" kind="java">File: DomParse.java</subsection>
        <subsection pnum="13" kind="output">java DomParse root.xml</subsection>
      </section>
      <section pnum="14">
        <title>Entity References</title>
        <subsection pnum="15">Ignorable WhiteSpace</subsection>
        <subsection pnum="17">Coalescing CDATA and Removing Comments</subsection>
        <subsection pnum="17" kind="output">The Result</subsection>
      </section>
      <section pnum="18">
        <title>Extracting Information from an XML Document</title>
        <subsection pnum="18" kind="dtd">File: phoneA.dtd</subsection>
        <subsection pnum="19" kind="xml">File: phoneA.xml</subsection>
        <subsection pnum="20" kind="java">Java Classes</subsection>
        <subsection pnum="22">Document</subsection>
      </section>
      <section pnum="22">
        <title>Version 1: PhoneParser.java</title>
        <subsection pnum="23">Part of phoneA.xml</subsection>
        <subsection pnum="24" kind="java">File: PhoneParser.java</subsection>
        <subsection pnum="28" kind="output">Output</subsection>
        <subsection pnum="28">Alternative for Command (Java 1.5)</subsection>
      </section>
      <section pnum="29">
        <title>Version 2: TagPhoneParser.java</title>
        <subsection pnum="29" kind="java">New parse Method</subsection>
      </section>
      <section pnum="30">
        <title>Version 3: VPhoneParser.java</title>
        <subsection pnum="30" kind="java">Methods That Change</subsection>
      </section>
      <section pnum="32">
        <title>Version 4: XPhoneParser.java</title>
        <subsection pnum="33">An Introduction to XPath</subsection>
        <subsection pnum="33">Location Steps</subsection>
        <subsection pnum="34">Simple XPath Expressions</subsection>
        <subsection pnum="35">Displaying XPath Expressions</subsection>
        <subsection pnum="37">XPath in Java</subsection>
        <subsection pnum="38">Version 4 Continued</subsection>
        <subsection pnum="38" kind="java">File: XPhoneParser.java</subsection>
      </section>
      <section pnum="40">
        <title>Creating XML Documents Dynamically</title>
        <subsection pnum="41" kind="java">File: ValidFib.java</subsection>
        <subsection pnum="42" kind="output">Output</subsection>
        <subsection pnum="43">Problems with Using Text Output to Build XML</subsection>
        <subsection pnum="43">Methods for Creating a DOM Tree</subsection>
        <subsection pnum="45">Example: XMLBuilder.java</subsection>
        <subsection pnum="46" kind="java">File: XMLBuilder.java</subsection>
        <subsection pnum="49">Displaying the Tree</subsection>
        <subsection pnum="50" kind="output">Formatted Output</subsection>
      </section>
   </contents>
  </chapter>
  <chapter num="4" pages="52">
    <title>XML Schemas</title>
    <contents>
      <section pnum="1">
        <title>Problems with DTDs</title>
      </section>
      <section pnum="1">
        <title>Form of an XML Schema Definition</title>
        <subsection pnum="2">Element Specification</subsection>
        <subsection pnum="3">Example: Translate phone.dtd into an XSD </subsection>
        <subsection pnum="4" kind="xsd">File: phone.xsd</subsection>
        <subsection pnum="5">Notes on phone.xsd</subsection>
        <subsection pnum="5">Alternate Strategy: Named Types</subsection>
        <subsection pnum="6" kind="xsd">File: phoneT.xsd</subsection>
      </section>
      <section pnum="7">
        <title>Validation</title>
        <subsection pnum="7">Example: bp.xml</subsection>
      </section>
      <section pnum="8">
        <title>Combining Elements in Complex Types</title>
        <subsection pnum="8">Alternation: Use xs:choice</subsection>
        <subsection pnum="8">Ignoring Order: Use xs:all</subsection>
        <subsection pnum="9">Example: Using Element Combinations</subsection>
        <subsection pnum="10" kind="xsd">File: elem.xsd</subsection>
        <subsection pnum="11" kind="xsd">File: ele.xsd</subsection>
        <subsection pnum="12">Referencing Elements</subsection>
        <subsection pnum="13" kind="xsd">File: eleref.xsd</subsection>
        <subsection pnum="14">Grouping Elements</subsection>
        <subsection pnum="14" kind="xsd">File: products.xsd</subsection>
        <subsection pnum="15">Summary of Strategies</subsection>
        <subsection pnum="15">Mixed Content</subsection>
        <subsection pnum="16">Example Fragment</subsection>
      </section>
      <section pnum="17">
        <title>Attribute Specifications</title>
        <subsection pnum="17">Example: Specification of phoneA.xml</subsection>
        <subsection pnum="18">Attributes with Empty Elements</subsection>
        <subsection pnum="18">Attributes for Elements with Only Text Content</subsection>
        <subsection pnum="19">Other Attributes of xs:attribute</subsection>
        <subsection pnum="20">Example: Attribute Definitions</subsection>
        <subsection pnum="20">Other Attributes for xs:element</subsection>
      </section>
      <section pnum="21">
        <title>Derived Complex Types</title>
        <subsection pnum="21">Restrictions</subsection>
        <subsection pnum="22">Example: Restriction</subsection>
        <subsection pnum="22" kind="xsd">File: restrict.xsd</subsection>
        <subsection pnum="24" kind="xml">File: restrict.xml</subsection>
        <subsection pnum="25">Validation</subsection>
        <subsection pnum="25">Alternate: XSD Schema Validator</subsection>
      </section>
      <section pnum="26">
        <title>Extensions</title>
        <subsection pnum="26" kind="xsd">File: expand.xsd</subsection>
        <subsection pnum="27" kind="xml">File: expand.xml</subsection>
      </section>
      <section pnum="28">
        <title>Simple Types</title>
        <subsection pnum="29">Numeric Types</subsection>
        <subsection pnum="30">Date, Time, and Duration Types</subsection>
        <subsection pnum="31">XML Types</subsection>
        <subsection pnum="32">String Types</subsection>
        <subsection pnum="32">Miscellaneous Types</subsection>
        <subsection pnum="33">Base 64 Encoding</subsection>
      </section>
      <section pnum="34">
        <title>Simple Type Restrictions</title>
        <subsection pnum="35">Facets</subsection>
        <subsection pnum="36">Restrictions on Range</subsection>
        <subsection pnum="37">Restrictions on Digits</subsection>
        <subsection pnum="37">Restrictions on Length</subsection>
        <subsection pnum="38">Restrictions to a Set of Values</subsection>
        <subsection pnum="39">Patterns</subsection>
        <subsection pnum="39">Basic Regular Expressions</subsection>
        <subsection pnum="40">Regular Expression Extensions</subsection>
        <subsection pnum="41">Examples</subsection>
        <subsection pnum="43">Restrictions on White Space</subsection>
        <subsection pnum="43">Lists of Items</subsection>
        <subsection pnum="44">Unions</subsection>
        <subsection pnum="45">Example</subsection>
      </section>
      <section pnum="46">
        <title>XML Schema Validation</title>
        <subsection pnum="46" kind="xml">File: phoneX.xml</subsection>
        <subsection pnum="48" kind="xsd">File: phoneX.xsd</subsection>
      </section>
      <section pnum="50">
        <title>Validating with SAX</title>
        <subsection pnum="50" kind="java">File: SaxCheck.java</subsection>
        <subsection pnum="51">Execution</subsection>
      </section>
      <section pnum="52">
        <title>Type Hierarchy</title>
      </section>
   </contents>
  </chapter>
  <chapter num="5" pages="44">
    <title>Simple API for XML</title>
    <contents>
      <section pnum="1">
        <title>SAX</title>
        <subsection pnum="1">Event-based Parsing</subsection>
        <subsection pnum="2">ContentHandler Interface</subsection>
        <subsection pnum="3">Attributes Interface</subsection>
        <subsection pnum="4">Example: SAX Parser Reports</subsection>
        <subsection pnum="4" kind="java">File: ReportHandler.java</subsection>
        <subsection pnum="6" kind="java">File: SaxParse.java</subsection>
        <subsection pnum="7">Executing SAXParse</subsection>
        <subsection pnum="7" kind="xml">File: rt.xml</subsection>
        <subsection pnum="8" kind="output">java SaxParse rt.xml</subsection>
        <subsection pnum="9" kind="xml">File: root.xml</subsection>
        <subsection pnum="9" kind="dtd">File: root.dtd</subsection>
        <subsection pnum="9" kind="output">java SaxParse root.xml</subsection>
        <subsection pnum="10">Observations</subsection>
        <subsection pnum="11">DefaultHandler</subsection>
        <subsection pnum="11">When to Use SAX</subsection>
        <subsection pnum="12">Disadvantages of SAX</subsection>
      </section>
      <section pnum="12">
        <title>Problem Solving with SAX</title>
        <subsection pnum="13" kind="java">SAX Driver</subsection>
        <subsection pnum="15" kind="java">Entry Class</subsection>
        <subsection pnum="16" kind="java">Name Class</subsection>
        <subsection pnum="17" kind="java">Phone Handler</subsection>
        <subsection pnum="20">Execution</subsection>
        <subsection pnum="20">A Problem</subsection>
        <subsection pnum="21" kind="xml">File: pnums.xml</subsection>
        <subsection pnum="22" kind="dtd">File: pnums.dtd</subsection>
        <subsection pnum="22" kind="output">Execution of SaxPhone</subsection>
        <subsection pnum="22">A Problem</subsection>
        <subsection pnum="23">Solution</subsection>
        <subsection pnum="25" kind="output">Execution</subsection>
        <subsection pnum="25">Another Problem</subsection>
        <subsection pnum="26">Solution</subsection>
        <subsection pnum="27">Mixed Content</subsection>
        <subsection pnum="27">String Concatenation</subsection>
        <subsection pnum="28">Alternate Formatting</subsection>
      </section>
      <section pnum="29">
        <title>Namespaces and SAX</title>
        <subsection pnum="29" kind="xml">File: ns.xml</subsection>
        <subsection pnum="29">Identifying Namespaces</subsection>
        <subsection pnum="30" kind="java">File: NHandler.java</subsection>
        <subsection pnum="31" kind="output">Execution</subsection>
        <subsection pnum="32">Observations</subsection>
        <subsection pnum="33">Processing Namespaces</subsection>
        <subsection pnum="33" kind="java">File: THandler.java</subsection>
        <subsection pnum="33" kind="output">Execution</subsection>
      </section>
      <section pnum="34">
        <title>Using a Stack to Process Elements</title>
        <subsection pnum="34">Basic Strategy</subsection>
        <subsection pnum="35">Stacks in Java</subsection>
        <subsection pnum="35">XML Document to Process</subsection>
        <subsection pnum="36" kind="xml">File: library.xml</subsection>
        <subsection pnum="37" kind="java">Java Classes for the Complex Elements</subsection>
        <subsection pnum="40" kind="java">File: SaxCatalog.java</subsection>
        <subsection pnum="43" kind="output">Execution</subsection>
        <subsection pnum="44">Stack Trace</subsection>
      </section>
   </contents>
  </chapter>
  <chapter num="6" pages="126">
    <title>XSL Transformations</title>
    <contents>
      <section pnum="1">
        <title>Features of XSLT</title>
        <subsection pnum="2">XSLT Process</subsection>
        <subsection pnum="2">Structure of an XSLT Document</subsection>
        <subsection pnum="3">Simple XSLT Examples</subsection>
        <subsection pnum="3">An XSLT Processor</subsection>
        <subsection pnum="4">Two Top-level Items</subsection>
        <subsection pnum="4" kind="xsl">File: ph1.xsl</subsection>
        <subsection pnum="5" kind="xsl">File: ph2.xsl</subsection>
        <subsection pnum="6" kind="output">Applying ph2.xsl to phoneA.xml</subsection>
        <subsection pnum="6" kind="xsl">File: ph3.xsl</subsection>
        <subsection pnum="7" kind="output">Applying ph3.xsl to phoneA.xml</subsection>
        <subsection pnum="8" kind="xsl">File: ph4.xsl</subsection>
        <subsection pnum="8" kind="output">Applying ph4.xsl to phoneA.xml</subsection>
        <subsection pnum="9" kind="xsl">File: ph5.xsl</subsection>
        <subsection pnum="10" kind="output">Applying ph5.xsl to phoneA.xml</subsection>
        <subsection pnum="10">Alter the Logic</subsection>
        <subsection pnum="11" kind="xsl">File: ph5a.xsl</subsection>
        <subsection pnum="12" kind="output">Applying ph5a.xsl to phoneA.xml</subsection>
        <subsection pnum="12">An Experiment</subsection>
        <subsection pnum="12" kind="xsl">File: ph6.xsl</subsection>
        <subsection pnum="13" kind="output">Applying ph6.xsl to phoneA.xml</subsection>
      </section>
      <section pnum="14">
        <title>Default Template Rules</title>
        <subsection pnum="14" kind="xsl">File: nothing.xsl</subsection>
        <subsection pnum="15" kind="output">Applying nothing.xsl to phoneA.xml</subsection>
        <subsection pnum="17">Removing the White Space</subsection>
        <subsection pnum="17" kind="xsl">File: default.xsl</subsection>
        <subsection pnum="18">Abbreviations Used</subsection>
      </section>
      <section pnum="19">
        <title>XSLT Processing</title>
        <subsection pnum="19">Conditional Processing 1</subsection>
        <subsection pnum="20">XPath expresion result types</subsection>
        <subsection pnum="21">Sample Boolean Expressions</subsection>
        <subsection pnum="21">Applying Decision Making</subsection>
        <subsection pnum="22" kind="xsl">File: phif.xsl</subsection>
        <subsection pnum="23" kind="output">Applying phif.xsl to phoneA.xml</subsection>
        <subsection pnum="23">Controlling Whitespace</subsection>
        <subsection pnum="24" kind="xsl">File: phtext.xsl</subsection>
        <subsection pnum="25" kind="output">Applying phtext.xsl to phoneA.xml</subsection>
        <subsection pnum="25">Iteration</subsection>
        <subsection pnum="26" kind="xsl">File: phfor.xsl</subsection>
      </section>
      <section pnum="27">
        <title>Transforming to XML</title>
        <subsection pnum="28">Strategy</subsection>
        <subsection pnum="29" kind="xsl">File: german.xsl</subsection>
        <subsection pnum="31">Notes on german.xsl</subsection>
        <subsection pnum="31">Conditional Processing 2</subsection>
        <subsection pnum="32">More on Attribute Value Templates</subsection>
      </section>
      <section pnum="33">
        <title>Another Way to Create Elements</title>
        <subsection pnum="34" kind="xsl">File: g.xsl</subsection>
        <subsection pnum="36">Creating Elements and Attributes Dynamically</subsection>
        <subsection pnum="36" kind="xml">File: dynamic.xml</subsection>
        <subsection pnum="37" kind="xsl">File: mkElements.xsl</subsection>
        <subsection pnum="38" kind="output">Applying mkElements.xsl to dynamic.xml</subsection>
        <subsection pnum="39" kind="xsl">File: mkEandA.xsl</subsection>
        <subsection pnum="40">Notes on mkEandA.xsl</subsection>
        <subsection pnum="40" kind="output">Applying mkEandA.xsl to dynamic.xml</subsection>
      </section>
      <section pnum="41">
        <title>XSLT in Java</title>
        <subsection pnum="41">XSLT Processing Step-by-Step</subsection>
        <subsection pnum="42" kind="java">File: MyTransform.java</subsection>
        <subsection pnum="43">Running MyTransform.java</subsection>
      </section>
      <section pnum="44">
        <title>XSLT in Saxon</title>
        <subsection pnum="44">Installing Saxon</subsection>
        <subsection pnum="44">Executing Saxon</subsection>
        <subsection pnum="46">XSLT Processors: Information</subsection>
        <subsection pnum="46">Three Results</subsection>
      </section>
      <section pnum="47">
        <title>Using XSLT to Produce HTML</title>
        <subsection pnum="47">Cascading Stylesheets (CSS)</subsection>
        <subsection pnum="48">Presenting Phone Numbers using CSS</subsection>
        <subsection pnum="48" kind="css">File: phone.css</subsection>
        <subsection pnum="49" kind="xml">XML Document: phonecss.xml</subsection>
        <subsection pnum="50">Resulting Web Page</subsection>
        <subsection pnum="51">Transforming XML into HTML</subsection>
        <subsection pnum="51">HTML Translation Template</subsection>
        <subsection pnum="51">Example</subsection>
        <subsection pnum="52" kind="xsl">File: html.xsl</subsection>
        <subsection pnum="54" kind="output">Applying html.xsl to phoneA.xml</subsection>
        <subsection pnum="55">Notes on HTML Translations</subsection>
        <subsection pnum="56">Linking XML Document and XSL Document</subsection>
        <subsection pnum="56">Example: phoneH.xml</subsection>
        <subsection pnum="56">Table Shown in a Browser</subsection>
        <subsection pnum="57">Hiding Information</subsection>
        <subsection pnum="57">Table Shown in a Browser</subsection>
        <subsection pnum="58">A Question</subsection>
        <subsection pnum="58">Table Shown in a Browser</subsection>
        <subsection pnum="58">Viewing the Source</subsection>
        <subsection pnum="59">Browsers that Perform XSLT Correctly</subsection>
        <subsection pnum="59">Variation on html.xsl</subsection>
        <subsection pnum="59">Tools Required to Solve Problem</subsection>
        <subsection pnum="60">XSLT Variables</subsection>
        <subsection pnum="61">Scope of Variables</subsection>
        <subsection pnum="62">Table Shown in a Browser</subsection>
      </section>
      <section pnum="63">
        <title>XPath Continued</title>
        <subsection pnum="63">XPath Expressions</subsection>
        <subsection pnum="64">Location Definitions</subsection>
        <subsection pnum="64">The Context</subsection>
        <subsection pnum="65">Axis: 13 Axes</subsection>
        <subsection pnum="66">Axis Selection</subsection>
        <subsection pnum="67">Abbreviations</subsection>
        <subsection pnum="67">Kinds of Nodes</subsection>
        <subsection pnum="68">Node Test</subsection>
        <subsection pnum="68">Predicate Tests</subsection>
        <subsection pnum="69">Examples</subsection>
        <subsection pnum="69">Boolean Operators</subsection>
        <subsection pnum="70">Union Operator</subsection>
        <subsection pnum="70">Boolean Functions</subsection>
        <subsection pnum="71">Number Operatoion</subsection>
        <subsection pnum="71">Number Functions</subsection>
        <subsection pnum="72">Strings</subsection>
        <subsection pnum="73">Conversions and Coercions</subsection>
      </section>
      <section pnum="74">
        <title>Some Examples</title>
        <subsection pnum="74" kind="xml">File: roster.xml</subsection>
        <subsection pnum="77" kind="dtd">File: roster.dtd</subsection>
        <subsection pnum="77">Problem 1</subsection>
        <subsection pnum="78" kind="xsl">File: mean.xsl</subsection>
        <subsection pnum="78" kind="output">Applying mean.xsl to roster.xml</subsection>
        <subsection pnum="79">Problem 2</subsection>
        <subsection pnum="79" kind="xsl">File: means.xsl</subsection>
        <subsection pnum="80" kind="output">Applying means.xsl to roster.xml</subsection>
        <subsection pnum="81">Problem 3</subsection>
        <subsection pnum="81" kind="xsl">File: fifty.xsl</subsection>
        <subsection pnum="81" kind="output">Applying fifty.xsl to roster.xml</subsection>
        <subsection pnum="82">Problem 4</subsection>
        <subsection pnum="82" kind="xsl">File: higher.xsl</subsection>
        <subsection pnum="83" kind="output">Applying higher.xsl to roster.xml</subsection>
        <subsection pnum="83">Problem 5</subsection>
        <subsection pnum="83" kind="xsl">File: ge80.xsl</subsection>
        <subsection pnum="84" kind="output">Applying ge80.xsl to roster.xml</subsection>
        <subsection pnum="84" kind="xsl">File: gef.xsl</subsection>
        <subsection pnum="85">Problem 6</subsection>
        <subsection pnum="85" kind="xsl">File: geall.xsl</subsection>
        <subsection pnum="85" kind="output">Applying geall.xsl to roster.xml</subsection>
        <subsection pnum="86" kind="xsl">File: getemp.xsl</subsection>
        <subsection pnum="87" kind="xsl">Excerpts from File: geconcat.xsl</subsection>
        <subsection pnum="87" kind="output">Applying geconcat.xsl to roster.xml</subsection>
        <subsection pnum="88">Sorting</subsection>
        <subsection pnum="88">Problem 7</subsection>
        <subsection pnum="88" kind="xsl">File: npro.xsl</subsection>
        <subsection pnum="89" kind="output">Applying npro.xsl to roster.xml</subsection>
        <subsection pnum="90" kind="output">Applying snpro.xsl to roster.xml</subsection>
        <subsection pnum="91" kind="output">Applying slnpro.xsl to roster.xml</subsection>
        <subsection pnum="92" kind="output">Applying slfnpro.xsl to roster.xml</subsection>
        <subsection pnum="93" kind="output">Applying sipro.xsl to roster.xml</subsection>
        <subsection pnum="94" kind="output">Applying nsipro.xsl to roster.xml</subsection>
      </section>
      <section pnum="94">
        <title>Named Templates</title>
        <subsection pnum="95">Example: A Delimiter Line</subsection>
        <subsection pnum="95">Formal Parameters</subsection>
        <subsection pnum="96">Actual Parameters</subsection>
        <subsection pnum="96">Example: Find Average of Numbers in a Node Set </subsection>
        <subsection pnum="97">Problem 8</subsection>
        <subsection pnum="97" kind="xsl">File: average.xsl</subsection>
        <subsection pnum="98" kind="output">Applying average.xsl to roster.xml</subsection>
        <subsection pnum="98">Repetition in Methods</subsection>
        <subsection pnum="99">Example: Simulate a for Loop</subsection>
        <subsection pnum="99" kind="xsl">File: for.xsl</subsection>
        <subsection pnum="100">Scoping Issues</subsection>
        <subsection pnum="100" kind="xml">File: empty.xml</subsection>
        <subsection pnum="101" kind="output">Applying for.xsl to empty.xml</subsection>
      </section>
      <section pnum="101">
        <title>Global Parameters</title>
        <subsection pnum="102">Specifying Global Parameters</subsection>
        <subsection pnum="103">Problem: Day of the Week</subsection>
        <subsection pnum="104" kind="xsl">File: dow.xsl</subsection>
        <subsection pnum="106">Global Parameters in Java</subsection>
        <subsection pnum="106" kind="java">File: XsltParams.java</subsection>
        <subsection pnum="107">Executing the Program</subsection>
        <subsection pnum="107">Fibonacci Numbers</subsection>
        <subsection pnum="108" kind="xsl">File: fib.xsl</subsection>
        <subsection pnum="109">Tail Recursion</subsection>
        <subsection pnum="110" kind="xsl">File: tfib.xsl</subsection>
      </section>
      <section pnum="111">
        <title>XSLT as a Programming Language</title>
        <subsection pnum="111">Some Language Properties</subsection>
        <subsection pnum="112">Some Other Useful XSLT Elements</subsection>
      </section>
      <section pnum="113">
        <title>XPath 2.0</title>
        <subsection pnum="113">Sequences</subsection>
        <subsection pnum="113">Operations and Functions on Sequences</subsection>
        <subsection pnum="115" kind="output">Output</subsection>
        <subsection pnum="117">Additional String Functions</subsection>
        <subsection pnum="117" kind="output">Output</subsection>
        <subsection pnum="119">XSLT 2.0</subsection>
        <subsection pnum="119">xsl:for-each-group Element</subsection>
        <subsection pnum="120">Examples</subsection>
        <subsection pnum="120" kind="xml">XML Document: staff.xml</subsection>
        <subsection pnum="120" kind="xsl">Stylesheet: group-by-dept.xsl</subsection>
        <subsection pnum="121" kind="output">Output</subsection>
        <subsection pnum="122" kind="xml">XML Document: othello.xml</subsection>
        <subsection pnum="124" kind="xsl">Stylesheet: wordcount.xsl</subsection>
        <subsection pnum="124" kind="output">Output</subsection>
        <subsection pnum="126">More Information</subsection>
      </section>
   </contents>
  </chapter>
  <chapter num="7" pages="26">
    <title>Relax NG</title>
    <contents>
      <section pnum="1">
        <title>Relax New Generation</title>
        <subsection pnum="1">Three Kinds of Schema Languages</subsection>
        <subsection pnum="1">Key Features of Relax NG</subsection>
        <subsection pnum="2">Basic Components of Compact Relax NGe</subsection>
        <subsection pnum="2">Example: Translate phoneA.dtd into Relax NG</subsection>
        <subsection pnum="2" kind="dtd">File: phoneA.dtd</subsection>
        <subsection pnum="3" kind="rnc">File: phoneA.rnc</subsection>
        <subsection pnum="3">Validation</subsection>
        <subsection pnum="4" kind="rng">File: phoneA.rng</subsection>
        <subsection pnum="5">Validation with xmllint</subsection>
        <subsection pnum="5">Alternate Validation</subsection>
        <subsection pnum="6">Notes</subsection>
        <subsection pnum="6">Example: Using Element Combination</subsection>
        <subsection pnum="7" kind="rnc">File: elems.rnc</subsection>
        <subsection pnum="8" kind="rnc">File: elems2.rnc</subsection>
        <subsection pnum="8">Using Choice</subsection>
        <subsection pnum="9" kind="rnc">File: phoneC.rnc</subsection>
        <subsection pnum="9">Comments</subsection>
        <subsection pnum="10">Mixed Content</subsection>
        <subsection pnum="10">Relax NG Specification</subsection>
        <subsection pnum="11">Interleaving</subsection>
        <subsection pnum="11" kind="rnc">File: phoneI.rnc</subsection>
        <subsection pnum="12" kind="rnc">File: narrative.rnc</subsection>
        <subsection pnum="12" kind="rnc">File: interleave.rnc</subsection>
        <subsection pnum="13">Enumerations</subsection>
        <subsection pnum="13">Note on String Matching</subsection>
        <subsection pnum="14">Lists</subsection>
      </section>
      <section pnum="15">
        <title>XML Schema Datatypes</title>
        <subsection pnum="15">Restrictions</subsection>
        <subsection pnum="16">Facets</subsection>
        <subsection pnum="16">Examples</subsection>
        <subsection pnum="17" kind="rnc">File: phoneX.rnc</subsection>
      </section>
      <section pnum="18">
        <title>Recursion in Relax NG</title>
        <subsection pnum="18" kind="rnc">File: rec.rnc</subsection>
        <subsection pnum="18" kind="xml">File: rec.xml</subsection>
      </section>
      <section pnum="19">
        <title>Namespaces in Relax NG</title>
        <subsection pnum="19" kind="xml">File: phoneNS.xml</subsection>
        <subsection pnum="20" kind="rnc">File: phoneNS.rnc</subsection>
        <subsection pnum="20" kind="rnc">File: phoneNSD.rnc</subsection>
      </section>
      <section pnum="21">
        <title>Two Additional Features</title>
        <subsection pnum="21">Merging Grammars: include</subsection>
        <subsection pnum="21">Annotations</subsection>
        <subsection pnum="22" kind="dtd">File: product.dtd</subsection>
        <subsection pnum="23">Relax NG Version</subsection>
        <subsection pnum="23" kind="rnc">File: product.rnc</subsection>
        <subsection pnum="24" kind="rnc">File: pdefs.rnc</subsection>
        <subsection pnum="25">Notes on the Example</subsection>
        <subsection pnum="26">Keywords in Compact Relax NG</subsection>
      </section>
   </contents>
  </chapter>
  <chapter num="8" pages="88">
    <title>XQuery</title>
    <contents>
      <section pnum="1">
        <title>XQuery Data Model</title>
        <subsection pnum="1">Sequences</subsection>
        <subsection pnum="2">Examples of Sequences</subsection>
      </section>
      <section pnum="3">
        <title>XQuery Expressions</title>
        <subsection pnum="3">Varieties of XQuery Expressions</subsection>
        <subsection pnum="3">Examples: Simple Expressions</subsection>
        <subsection pnum="4">Path Expressions</subsection>
        <subsection pnum="4">Running XQuery</subsection>
        <subsection pnum="5" kind="output">Execution</subsection>
        <subsection pnum="7">Example: Fetch name elements</subsection>
        <subsection pnum="7" kind="output">Results</subsection>
        <subsection pnum="7">Example: Fetch names only</subsection>
        <subsection pnum="7" kind="output">Results</subsection>
        <subsection pnum="8">Alternate Version</subsection>
        <subsection pnum="8">Saxon Options</subsection>
      </section>
      <section pnum="9">
        <title>FLWOR</title>
        <subsection pnum="9">Example 1</subsection>
        <subsection pnum="10">Example 2</subsection>
        <subsection pnum="10" kind="output">Results</subsection>
        <subsection pnum="11">Problem 1</subsection>
        <subsection pnum="11" kind="xquery">File: p1.xq</subsection>
        <subsection pnum="11" kind="output">Results from p1.xq</subsection>
        <subsection pnum="12">Problem 2</subsection>
        <subsection pnum="12" kind="xquery">File: p2.xq</subsection>
        <subsection pnum="13" kind="output">Results from p2.xq</subsection>
        <subsection pnum="14">Problem 3</subsection>
        <subsection pnum="14" kind="xquery">File: p3.xq</subsection>
        <subsection pnum="14" kind="output">Results from p3.xq</subsection>
        <subsection pnum="15">Value Comparison Operators</subsection>
        <subsection pnum="16">Problem 4</subsection>
        <subsection pnum="16" kind="xquery">File: p4a.xq</subsection>
        <subsection pnum="17" kind="xquery">File: p4b.xq</subsection>
        <subsection pnum="17" kind="output">Results from p4a.xq and p4b.xq</subsection>
        <subsection pnum="18">Problem 5</subsection>
        <subsection pnum="18" kind="xquery">File: p5.xq</subsection>
        <subsection pnum="19" kind="output">Results from p5vc.xq</subsection>
        <subsection pnum="19" kind="output">Results from p5.xq (revised)</subsection>
        <subsection pnum="20">General Comparisons</subsection>
        <subsection pnum="20" kind="xquery">Example: p4a.xq</subsection>
        <subsection pnum="20" kind="xquery">Example: p4b.xq</subsection>
        <subsection pnum="20" kind="xquery">Example: p5.xq</subsection>
        <subsection pnum="21">Node Comparison: is</subsection>
        <subsection pnum="21">Problem</subsection>
        <subsection pnum="21" kind="xquery">File: pairs.xq</subsection>
        <subsection pnum="22" kind="output">Results from pairs.xq</subsection>
        <subsection pnum="23">Node Comparison: deep-equal</subsection>
        <subsection pnum="24">Order Comparison Operators</subsection>
        <subsection pnum="24">Problem</subsection>
        <subsection pnum="24" kind="xquery">File: pairsA.xq</subsection>
        <subsection pnum="25" kind="output">Results from pairsA.xq</subsection>
        <subsection pnum="26">Finding Positions in Sequences</subsection>
        <subsection pnum="26">Problem 6</subsection>
        <subsection pnum="26" kind="xquery">File: p6.xq</subsection>
        <subsection pnum="27" kind="output">Results from p6.xq</subsection>
        <subsection pnum="28">Sorting</subsection>
        <subsection pnum="28">Problem 7</subsection>
        <subsection pnum="28" kind="xquery">File: p7a.xq</subsection>
        <subsection pnum="29" kind="output">Results from p7a.xq</subsection>
        <subsection pnum="29" kind="xquery">File: p7b.xq</subsection>
        <subsection pnum="30" kind="output">Results from p7b.xq</subsection>
        <subsection pnum="31" kind="xquery">File: p7c.xq</subsection>
        <subsection pnum="31" kind="output">Results from p7c.xq</subsection>
        <subsection pnum="32" kind="xquery">File: p7d.xq</subsection>
        <subsection pnum="32" kind="output">Results from p7d.xq</subsection>
        <subsection pnum="33">Problem 8</subsection>
        <subsection pnum="33" kind="xquery">File: p8.xq</subsection>
        <subsection pnum="34" kind="output">Results from p8.xq</subsection>
      </section>
      <section pnum="34">
        <title>Function Definitions</title>
        <subsection pnum="34">Basic Syntax</subsection>
        <subsection pnum="35" kind="xquery">File: p8f.xq</subsection>
        <subsection pnum="36">Creating Elements and Attributes</subsection>
        <subsection pnum="36" kind="xquery">File: p8fa.xq</subsection>
        <subsection pnum="37" kind="output">Results from p8fa.xq</subsection>
        <subsection pnum="38">Element and Attribute Constructors</subsection>
        <subsection pnum="38" kind="xquery">File: p8fb.xq</subsection>
        <subsection pnum="39">Creating Element and Attribute Dynamically</subsection>
        <subsection pnum="39" kind="xml">File: dynamic.xml</subsection>
        <subsection pnum="40">Building Attributes</subsection>
        <subsection pnum="40" kind="xquery">File: da.xq</subsection>
        <subsection pnum="40" kind="output">Results from da.xq</subsection>
        <subsection pnum="41">Building Elements and Attributes</subsection>
        <subsection pnum="41" kind="xquery">File: dea.xq</subsection>
        <subsection pnum="41" kind="output">Results from dea.xq</subsection>
        <subsection pnum="42">Quantified Expressions</subsection>
        <subsection pnum="43">Problem</subsection>
        <subsection pnum="43" kind="xquery">File: p95.xq</subsection>
        <subsection pnum="43" kind="output">Results from p95.xq</subsection>
        <subsection pnum="44">Problem</subsection>
        <subsection pnum="44" kind="xquery">File: higher.xq</subsection>
        <subsection pnum="45" kind="output">Results from higher.xq</subsection>
        <subsection pnum="46">Problem: Prime Numbers</subsection>
        <subsection pnum="46" kind="xquery">File: primes.xq</subsection>
        <subsection pnum="47" kind="output">Results from primes.xq</subsection>
      </section>
      <section pnum="48">
        <title>Joins</title>
        <subsection pnum="48" kind="xml">File: phone.xml</subsection>
        <subsection pnum="49">Cartesain Product</subsection>
        <subsection pnum="49">Problem</subsection>
        <subsection pnum="50" kind="xquery">File: cartesian.xq</subsection>
        <subsection pnum="50" kind="output">Results from cartesian.xq</subsection>
        <subsection pnum="51">Inner Joins</subsection>
        <subsection pnum="51">Problem</subsection>
        <subsection pnum="51" kind="xquery">File: equi-join.xq</subsection>
        <subsection pnum="52" kind="output">Results from equi-join.xq</subsection>
        <subsection pnum="53">Problem</subsection>
        <subsection pnum="53" kind="xquery">File: coralville.xq</subsection>
        <subsection pnum="53" kind="output">Results from coralville.xq</subsection>
        <subsection pnum="54">Problem</subsection>
        <subsection pnum="54" kind="xquery">File: project20.xq</subsection>
        <subsection pnum="54" kind="output">Results from project20.xq</subsection>
        <subsection pnum="55">Problem</subsection>
        <subsection pnum="55" kind="xquery">File: max3.xq</subsection>
        <subsection pnum="56" kind="output">Results from max3.xq</subsection>
        <subsection pnum="56">Self-Joins</subsection>
        <subsection pnum="56">Problem</subsection>
        <subsection pnum="57" kind="xquery">File: samecity.xq</subsection>
        <subsection pnum="57" kind="output">Results from samecity.xq</subsection>
        <subsection pnum="58">Problem</subsection>
        <subsection pnum="59" kind="xquery">File: higherp.xq</subsection>
        <subsection pnum="59" kind="output">Results from higherp.xq</subsection>
      </section>
      <section pnum="61">
        <title>Imperative Programming: Day of the Week</title>
        <subsection pnum="61" kind="xquery">File: dow.xq</subsection>
        <subsection pnum="62" kind="output">Results from dow.xq</subsection>
        <subsection pnum="62">Square Roots with Newton's Method</subsection>
        <subsection pnum="62">Sqrt in Java</subsection>
        <subsection pnum="64">Sqrt in XQuery</subsection>
        <subsection pnum="64" kind="xquery">File: sqrt.xq</subsection>
        <subsection pnum="65" kind="output">Results from sqrt.xq</subsection>
        <subsection pnum="65">Static Typing and Dynamic Typing</subsection>
        <subsection pnum="66">Strong Typing in XQuery</subsection>
        <subsection pnum="66" kind="xquery">File: dowt.xq</subsection>
        <subsection pnum="67" kind="xquery">File: sqrtt.xq</subsection>
        <subsection pnum="67">Notes on Typing</subsection>
        <subsection pnum="68">XQuery as a Programming Language</subsection>
        <subsection pnum="69">Example: Translating to German</subsection>
        <subsection pnum="69" kind="xquery">File: german.xq</subsection>
      </section>
      <section pnum="71">
        <title>XQuery in Java</title>
        <subsection pnum="71">Classes and Interfaces</subsection>
        <subsection pnum="75" kind="java">File: Execute.java</subsection>
        <subsection pnum="76">Testing Execute.java</subsection>
        <subsection pnum="77" kind="xquery">File: table.xq</subsection>
        <subsection pnum="78" kind="html">Result: table.html</subsection>
        <subsection pnum="79">Producing Text Output</subsection>
        <subsection pnum="79" kind="xquery">File: phoneText.xq</subsection>
        <subsection pnum="80" kind="output">Resulting text: phoneText.text</subsection>
        <subsection pnum="80">Observations</subsection>
        <subsection pnum="81">Building Java Objects from XML</subsection>
        <subsection pnum="82" kind="java">File: QueryPhone.java</subsection>
        <subsection pnum="84">Creating an XML Document</subsection>
        <subsection pnum="84" kind="java">File: QueryBuilder.java</subsection>
        <subsection pnum="87">Query String Built by QueryBuilder</subsection>
        <subsection pnum="88" kind="xml">File: newPhone.xml</subsection>
      </section>
   </contents>
  </chapter>
  <chapter num="9" pages="26">
    <title>JDOM</title>
    <contents>
      <section pnum="1">
        <title>JDOM</title>
        <subsection pnum="1">Installing JDOM</subsection>
        <subsection pnum="2">Creating a JDOM Tree</subsection>
        <subsection pnum="3">Processing the Content</subsection>
        <subsection pnum="3">General instance methods in Element</subsection>
        <subsection pnum="4">Specific instance methods in Element</subsection>
        <subsection pnum="4">Instance Methods in Attribute</subsection>
        <subsection pnum="4">Displaying a JDOM Tree</subsection>
        <subsection pnum="5" kind="xml">File: rt.xml</subsection>
        <subsection pnum="6" kind="java">File: JDomParse.java</subsection>
        <subsection pnum="9" kind="output">java JDomParse rt.xml</subsection>
        <subsection pnum="10">First Method: Validation</subsection>
        <subsection pnum="10" kind="dtd">File: root.dtd</subsection>
        <subsection pnum="10" kind="xml">File: root.xml</subsection>
        <subsection pnum="11" kind="output">java JDomParse root.xml true</subsection>
        <subsection pnum="12">Second Method: Trim</subsection>
        <subsection pnum="13" kind="output">Resulting Output</subsection>
      </section>
      <section pnum="13">
        <title>Extracting Information from an XML Document</title>
        <subsection pnum="14" kind="java">File: JPhoneParse.java</subsection>
        <subsection pnum="17" kind="output">java JPhoneParser phoneA.xml</subsection>
        <subsection pnum="17">Alternate name Method</subsection>
        <subsection pnum="18">Another Approach</subsection>
        <subsection pnum="19" kind="java">File: JFilter.java</subsection>
      </section>
      <section pnum="21">
        <title>Creating XML Documents Dynamically</title>
        <subsection pnum="21">Methods for Creating a JDOM Tree</subsection>
        <subsection pnum="23">Instance Methods in XMLOutputter</subsection>
        <subsection pnum="23">Methods in Format</subsection>
        <subsection pnum="23" kind="java">File: JXMLBuilder.java</subsection>
        <subsection pnum="26" kind="output">Output</subsection>
      </section>
   </contents>
  </chapter>
  <chapter num="10" pages="40">
    <title>XML-RPC</title>
    <contents>
      <section pnum="1">
        <title>XML-RPC</title>
        <subsection pnum="1">Other Solutions to this Problem</subsection>
        <subsection pnum="2">Properties of XML-RPC</subsection>
        <subsection pnum="3">XML-RPC Lifecyle</subsection>
        <subsection pnum="4">Data Types in XML-RPC</subsection>
        <subsection pnum="6">Correspondence with Types in Java</subsection>
        <subsection pnum="7">Method Calls</subsection>
        <subsection pnum="8">Method Responses</subsection>
        <subsection pnum="10">DTD for XML-RPC</subsection>
        <subsection pnum="11">XSL Schema for XML-RPC</subsection>
        <subsection pnum="15">Using HTTP for XML-RPC</subsection>
      </section>
      <section pnum="16">
        <title>Implementing XML-RPC</title>
        <subsection pnum="16">Server Side</subsection>
        <subsection pnum="16" kind="java">File: Server.java</subsection>
        <subsection pnum="18" kind="java">File: Handler.java</subsection>
        <subsection pnum="27" kind="java">File: Request.java</subsection>
        <subsection pnum="28" kind="java">File: RpcMethods.java</subsection>
        <subsection pnum="31">Client Side</subsection>
        <subsection pnum="32" kind="java">File: Test.java</subsection>
        <subsection pnum="35" kind="java">File: RpcClient.java</subsection>
        <subsection pnum="40">Limitations of XML-RPC</subsection>
      </section>
    </contents>
  </chapter>
</tableOfContents>
