Another abandoned server code base... this is kind of an ancestor of taskrambler.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

9708 lines
357 KiB

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 14 February 2006), see www.w3.org" />
<title>XQuery 1.0 and XPath 2.0 Data Model (XDM) (Second
Edition)</title>
<style type="text/css">
/*<![CDATA[*/
code { font-family: monospace; }
div.constraint,
div.issue,
div.note,
div.notice { margin-left: 2em; }
div.issue
p.title { margin-left: -2em; }
ol.enumar { list-style-type: decimal; }
ol.enumla { list-style-type: lower-alpha; }
ol.enumlr { list-style-type: lower-roman; }
ol.enumua { list-style-type: upper-alpha; }
ol.enumur { list-style-type: upper-roman; }
li p { margin-top: 0.3em;
margin-bottom: 0.3em; }
sup small { font-style: italic;
color: #8F8F8F;
}
div.exampleInner pre { margin-left: 1em;
margin-top: 0em; margin-bottom: 0em}
div.exampleOuter {border: 4px double gray;
margin: 0em; padding: 0em}
div.exampleInner { background-color: #d5dee3;
border-top-width: 4px;
border-top-style: double;
border-top-color: #d3d3d3;
border-bottom-width: 4px;
border-bottom-style: double;
border-bottom-color: #d3d3d3;
padding: 4px; margin: 0em }
div.exampleWrapper { margin: 4px }
div.exampleHeader { font-weight: bold;
margin: 4px}
div.issue { border-bottom-color: black;
border-bottom-style: solid;
border-bottom-width: 1pt;
margin-bottom: 20pt;
}
th.issue-toc-head { border-bottom-color: black;
border-bottom-style: solid;
border-bottom-width: 1pt;
}
/*]]>*/
</style>
<link type="text/css" rel="stylesheet" href=
"http://www.w3.org/StyleSheets/TR/W3C-REC.css" />
</head>
<body>
<div class="head">
<p><a href="http://www.w3.org/"><img width="72" height="48" alt=
"W3C" src="http://www.w3.org/Icons/w3c_home" /></a></p>
<h1><a id="title" name="title"></a>XQuery 1.0 and XPath 2.0 Data
Model (XDM) (Second Edition)</h1>
<h2><a id="w3c-doctype" name="w3c-doctype"></a>W3C Recommendation
14 December 2010</h2>
<dl>
<dt>This version:</dt>
<dd><a href=
"http://www.w3.org/TR/2010/REC-xpath-datamodel-20101214/">http://www.w3.org/TR/2010/REC-xpath-datamodel-20101214/</a></dd>
<dt>Latest version:</dt>
<dd><a href=
"http://www.w3.org/TR/xpath-datamodel/">http://www.w3.org/TR/xpath-datamodel/</a></dd>
<dt>Previous versions:</dt>
<dd><a href=
"http://www.w3.org/TR/2009/PER-xpath-datamodel-20090421/">http://www.w3.org/TR/2009/PER-xpath-datamodel-20090421/,</a>
<a href=
"http://www.w3.org/TR/2007/REC-xpath-datamodel-20070123/">http://www.w3.org/TR/2007/REC-xpath-datamodel-20070123/</a></dd>
<dt>Editors:</dt>
<dd>Anders Berglund (XSL WG), BC&amp;TF <a href=
"http://www.albconsults.com">&lt;http://www.albconsults.com&gt;</a>
- Second Edition</dd>
<dd>Mary Fernández (XML Query WG), AT&amp;T Labs <a href=
"mailto:mff@research.att.com">&lt;mff@research.att.com&gt;</a></dd>
<dd>Ashok Malhotra (XML Query and XSL WGs), Oracle Corporation
<a href=
"mailto:ashok.malhotra@alum.mit.edu">&lt;ashok.malhotra@alum.mit.edu&gt;</a></dd>
<dd>Jonathan Marsh (XSL WG), Microsoft <a href=
"mailto:jmarsh@microsoft.com">&lt;jmarsh@microsoft.com&gt;</a></dd>
<dd>Marton Nagy (XML Query WG), Science Applications International
Corporation (SAIC) <a href=
"mailto:marton.nagy@saic.com">&lt;marton.nagy@saic.com&gt;</a></dd>
<dd>Norman Walsh (XSL WG), Mark Logic <a href=
"mailto:Norman.Walsh@marklogic.com">&lt;Norman.Walsh@marklogic.com&gt;</a></dd>
</dl>
<p>Please refer to the <a href=
"http://www.w3.org/XML/2010/qt-errata/xpath-datamodel-errata2e.html">
<strong>errata</strong></a> for this document, which may include
some normative corrections.</p>
<p>See also <a href=
"http://www.w3.org/2003/03/Translations/byTechnology?technology=xpath-datamodel">
<strong>translations</strong></a>.</p>
<p>This document is also available in these non-normative formats:
<a href=
"http://www.w3.org/TR/2010/REC-xpath-datamodel-20101214/xpath-datamodel-20101214.xml">
XML</a> and&#160;<a href=
"http://www.w3.org/TR/2010/REC-xpath-datamodel-20101214/xpath-datamodel-diff-from-REC20070123.html">Change
markings relative to first edition</a>.</p>
<p class="copyright"><a href=
"http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a>&#160;©&#160;2010&#160;<a href="http://www.w3.org/"><acronym title="World Wide Web Consortium">W3C</acronym></a><sup>®</sup>
(<a href="http://www.csail.mit.edu/"><acronym title=
"Massachusetts Institute of Technology">MIT</acronym></a>, <a href=
"http://www.ercim.eu/"><acronym title=
"European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>,
<a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved.
W3C <a href=
"http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
<a href=
"http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>
and <a href=
"http://www.w3.org/Consortium/Legal/copyright-documents">document
use</a> rules apply.</p>
</div>
<hr />
<div>
<h2><a id="abstract" name="abstract"></a>Abstract</h2>
<p>This document defines the W3C XQuery 1.0 and XPath 2.0 Data
Model (XDM), which is the data model of <a href="#xpath20">[XML
Path Language (XPath) 2.0 (Second Edition)]</a>, <a href=
"#xslt20">[XSLT 2.0 (Second Edition)]</a>, and <a href=
"#xquery">[XQuery]</a>, and any other specifications that reference
it. This data model is based on the <a href="#xpath">[XPath
1.0]</a> data model and earlier work on an <a href="#XQDM00">[XML
Query Data Model]</a>. This document is the result of joint work by
the <a href="#XSLWG">[XSL Working Group]</a> and the <a href=
"#XQWG">[XML Query Working Group]</a>.</p>
</div>
<div>
<h2><a id="status" name="status"></a>Status of this Document</h2>
<p><em>This section describes the status of this document at the
time of its publication. Other documents may supersede this
document. A list of current W3C publications and the latest
revision of this technical report can be found in the <a href=
"http://www.w3.org/TR/">W3C technical reports index</a> at
http://www.w3.org/TR/.</em></p>
<p>This is one document in a set of eight documents that are being
progressed to Edited Recommendation together (XPath 2.0, XQuery
1.0, XQueryX 1.0, XSLT 2.0, Data Model (XDM), Functions and
Operators, Formal Semantics, Serialization).</p>
<p>This document, published on 14 December 2010, is an Edited
<a href=
"http://www.w3.org/2004/02/Process-20040205/tr.html#RecsW3C">Recommendation</a>
of the W3C. It supersedes the previous W3C Recommendation of 23
January 2007. This second edition is not a new version of this
specification; its purpose is to clarify a number of issues that
have become apparent since the first edition was published. All of
these clarifications (excepting trivial editorial fixes) have been
published in a separate errata document, and published in a
<a href="http://www.w3.org/2004/02/Process-20040205/tr.html#ProposedEditedRec">
Proposed Edited Recommendation</a> in April 2009. The changes are
summarized in an appendix. This document has been jointly developed
by the W3C <a href="http://www.w3.org/XML/Query/">XML Query Working
Group</a> and the W3C <a href="http://www.w3.org/Style/XSL/">XSL
Working Group</a>, each of which is part of the <a href=
"http://www.w3.org/XML/Activity">XML Activity</a>.</p>
<p>This document has been reviewed by W3C Members, by software
developers, and by other W3C groups and interested parties, and is
endorsed by the Director as a W3C Recommendation. It is a stable
document and may be used as reference material or cited from
another document. W3C's role in making the Recommendation is to
draw attention to the specification and to promote its widespread
deployment. This enhances the functionality and interoperability of
the Web.</p>
<p>This document incorporates changes made against the <a href=
"http://www.w3.org/2004/02/Process-20040205/tr.html#RecsW3C">Recommendation</a>
of 23 January 2007 that resolve all errata known at the date of
publication. Changes to this document since the first edition are
detailed in the <a href="#ChangeLog"><b>G Changes since the First
Edition</b></a>. This document supersedes the <a href=
"http://www.w3.org/TR/2007/REC-xpath-datamodel-20070123/">first
edition</a>.</p>
<p>This specification is designed to be referenced normatively from
other specifications defining a host language for it; it is not
intended to be implemented outside a host language. The
implementability of this specification has been tested in the
context of its normative inclusion in host languages defined by the
<a href="http://www.w3.org/TR/xquery/">XQuery 1.0</a> and <a href=
"http://www.w3.org/TR/xslt20/">XSLT 2.0</a> specifications; see the
<a href=
"http://www.w3.org/XML/Query/test-suite/XQTSReport.html">XQuery 1.0
implementation report</a> and the <a href=
"http://www.w3.org/XML/Group/xslt20-test/Documentation/reportSummary.html">
XSLT 2.0 implementation report</a> (member-only) for details.</p>
<p>Please report errors in and submit comments on this document
using W3C's <a href="http://www.w3.org/Bugs/Public/">public
Bugzilla system</a> (instructions can be found at <a href=
"http://www.w3.org/XML/2005/04/qt-bugzilla">http://www.w3.org/XML/2005/04/qt-bugzilla</a>).
If access to that system is not feasible, you may send your
comments to the W3C XSLT/XPath/XQuery public comments mailing list,
<a href=
"mailto:public-qt-comments@w3.org">public-qt-comments@w3.org</a>.
It will be very helpful if you include the string “[DM]” in the
subject line of your report, whether made in Bugzilla or in email.
Each Bugzilla entry and email message should contain only one error
report. Archives of the comments and responses are available at
<a href=
"http://lists.w3.org/Archives/Public/public-qt-comments/">http://lists.w3.org/Archives/Public/public-qt-comments/</a>.</p>
<p>This document was produced by groups operating under the
<a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5
February 2004 W3C Patent Policy</a>. W3C maintains a <a href=
"http://www.w3.org/2004/01/pp-impl/18797/status#disclosures">public
list of any patent disclosures</a> made in connection with the
deliverables of the XML Query Working Group and also maintains a
<a href=
"http://www.w3.org/2004/01/pp-impl/19552/status#disclosures">public
list of any patent disclosures</a> made in connection with the
deliverables of the XSL Working Group; those pages also include
instructions for disclosing a patent. An individual who has actual
knowledge of a patent which the individual believes contains
<a href=
"http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">
Essential Claim(s)</a> must disclose the information in accordance
with <a href=
"http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">
section 6 of the W3C Patent Policy</a>.</p>
</div>
<div class="toc">
<h2><a id="contents" name="contents"></a>Table of Contents</h2>
<p class="toc">1 <a href="#intro">Introduction</a><br />
2 <a href="#concepts">Concepts</a><br />
&#160;&#160;&#160;&#160;2.1 <a href=
"#terminology">Terminology</a><br />
&#160;&#160;&#160;&#160;2.2 <a href="#notation">Notation</a><br />
&#160;&#160;&#160;&#160;2.3 <a href="#node-identity">Node
Identity</a><br />
&#160;&#160;&#160;&#160;2.4 <a href="#document-order">Document
Order</a><br />
&#160;&#160;&#160;&#160;2.5 <a href=
"#sequences">Sequences</a><br />
&#160;&#160;&#160;&#160;2.6 <a href="#types">Types</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;2.6.1 <a href=
"#types-representation">Representation of Types</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;2.6.2 <a href=
"#types-predefined">Predefined Types</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;2.6.3 <a href=
"#types-hierarchy">Type Hierarchy</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;2.6.4 <a href=
"#AtomicValue">Atomic Values</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;2.6.5 <a href=
"#StringValue">String Values</a><br />
3 <a href="#construction">Data Model Construction</a><br />
&#160;&#160;&#160;&#160;3.1 <a href="#const-other">Direct
Construction</a><br />
&#160;&#160;&#160;&#160;3.2 <a href="#const-infoset">Construction
from an Infoset</a><br />
&#160;&#160;&#160;&#160;3.3 <a href="#const-psvi">Construction from
a PSVI</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;3.3.1 <a href=
"#PSVI2Types">Mapping PSVI Additions to Node Properties</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;3.3.1.1
<a href="#PSVI2NodeTypes">Element and Attribute Node Type
Names</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;3.3.1.2
<a href="#TypedValueDetermination">Typed Value
Determination</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;3.3.1.3
<a href="#typed-string-relationships">Relationship Between
Typed-Value and String-Value</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;3.3.1.4
<a href="#pattern-facets">Pattern Facets</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;3.3.2 <a href=
"#dates-and-times">Dates and Times</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;3.3.3 <a href=
"#qnames-and-notations">QNames and NOTATIONS</a><br />
4 <a href="#infoset-mapping">Infoset Mapping</a><br />
5 <a href="#accessors">Accessors</a><br />
&#160;&#160;&#160;&#160;5.1 <a href="#dm-attributes">attributes
Accessor</a><br />
&#160;&#160;&#160;&#160;5.2 <a href="#dm-base-uri">base-uri
Accessor</a><br />
&#160;&#160;&#160;&#160;5.3 <a href="#dm-children">children
Accessor</a><br />
&#160;&#160;&#160;&#160;5.4 <a href="#dm-document-uri">document-uri
Accessor</a><br />
&#160;&#160;&#160;&#160;5.5 <a href="#dm-is-id">is-id
Accessor</a><br />
&#160;&#160;&#160;&#160;5.6 <a href="#dm-is-idrefs">is-idrefs
Accessor</a><br />
&#160;&#160;&#160;&#160;5.7 <a href=
"#dm-namespace-bindings">namespace-bindings Accessor</a><br />
&#160;&#160;&#160;&#160;5.8 <a href=
"#dm-namespace-nodes">namespace-nodes Accessor</a><br />
&#160;&#160;&#160;&#160;5.9 <a href="#dm-nilled">nilled
Accessor</a><br />
&#160;&#160;&#160;&#160;5.10 <a href="#dm-node-kind">node-kind
Accessor</a><br />
&#160;&#160;&#160;&#160;5.11 <a href="#dm-node-name">node-name
Accessor</a><br />
&#160;&#160;&#160;&#160;5.12 <a href="#dm-parent">parent
Accessor</a><br />
&#160;&#160;&#160;&#160;5.13 <a href=
"#dm-string-value">string-value Accessor</a><br />
&#160;&#160;&#160;&#160;5.14 <a href="#dm-type-name">type-name
Accessor</a><br />
&#160;&#160;&#160;&#160;5.15 <a href="#dm-typed-value">typed-value
Accessor</a><br />
&#160;&#160;&#160;&#160;5.16 <a href=
"#dm-unparsed-entity-public-id">unparsed-entity-public-id
Accessor</a><br />
&#160;&#160;&#160;&#160;5.17 <a href=
"#dm-unparsed-entity-system-id">unparsed-entity-system-id
Accessor</a><br />
6 <a href="#Node">Nodes</a><br />
&#160;&#160;&#160;&#160;6.1 <a href="#DocumentNode">Document
Nodes</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.1.1 <a href=
"#DocumentNodeOverview">Overview</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.1.2 <a href=
"#DocumentNodeAccessors">Accessors</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.1.3 <a href=
"#const-infoset-document">Construction from an Infoset</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.1.4 <a href=
"#const-psvi-document">Construction from a PSVI</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.1.5 <a href=
"#infoset-mapping-document">Infoset Mapping</a><br />
&#160;&#160;&#160;&#160;6.2 <a href="#ElementNode">Element
Nodes</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.2.1 <a href=
"#ElementNodeOverview">Overview</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.2.2 <a href=
"#ElementNodeAccessors">Accessors</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.2.3 <a href=
"#const-infoset-element">Construction from an Infoset</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.2.4 <a href=
"#const-psvi-element">Construction from a PSVI</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.2.5 <a href=
"#infoset-mapping-element">Infoset Mapping</a><br />
&#160;&#160;&#160;&#160;6.3 <a href="#AttributeNode">Attribute
Nodes</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.3.1 <a href=
"#AttributeNodeOverview">Overview</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.3.2 <a href=
"#AttributeNodeAccessors">Accessors</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.3.3 <a href=
"#const-infoset-attribute">Construction from an Infoset</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.3.4 <a href=
"#const-psvi-attribute">Construction from a PSVI</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.3.5 <a href=
"#infoset-mapping-attribute">Infoset Mapping</a><br />
&#160;&#160;&#160;&#160;6.4 <a href="#NamespaceNode">Namespace
Nodes</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.4.1 <a href=
"#NamespaceNodeOverview">Overview</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.4.2 <a href=
"#NamespaceNodeAccessors">Accessors</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.4.3 <a href=
"#const-infoset-namespace">Construction from an Infoset</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.4.4 <a href=
"#const-psvi-namespace">Construction from a PSVI</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.4.5 <a href=
"#infoset-mapping-namespace">Infoset Mapping</a><br />
&#160;&#160;&#160;&#160;6.5 <a href=
"#ProcessingInstructionNode">Processing Instruction Nodes</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.5.1 <a href=
"#ProcessingInstructionNodeOverview">Overview</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.5.2 <a href=
"#ProcessingInstructionNodeAccessors">Accessors</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.5.3 <a href=
"#const-infoset-pi">Construction from an Infoset</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.5.4 <a href=
"#const-psvi-pi">Construction from a PSVI</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.5.5 <a href=
"#infoset-mapping-processing-instruction">Infoset Mapping</a><br />
&#160;&#160;&#160;&#160;6.6 <a href="#CommentNode">Comment
Nodes</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.6.1 <a href=
"#CommentNodeOverview">Overview</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.6.2 <a href=
"#CommentNodeAccessors">Accessors</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.6.3 <a href=
"#const-infoset-comment">Construction from an Infoset</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.6.4 <a href=
"#const-psvi-comment">Construction from a PSVI</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.6.5 <a href=
"#infoset-mapping-comment">Infoset Mapping</a><br />
&#160;&#160;&#160;&#160;6.7 <a href="#TextNode">Text
Nodes</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.7.1 <a href=
"#TextNodeOverview">Overview</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.7.2 <a href=
"#TextNodeAccessors">Accessors</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.7.3 <a href=
"#const-infoset-text">Construction from an Infoset</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.7.4 <a href=
"#const-psvi-text">Construction from a PSVI</a><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6.7.5 <a href=
"#infoset-mapping-text">Infoset Mapping</a><br />
7 <a href="#conformance">Conformance</a><br /></p>
<h3><a id="appendices" name="appendices"></a>Appendices</h3>
<p class="toc">A <a href="#infoset-conformance">XML Information Set
Conformance</a><br />
B <a href="#references">References</a><br />
&#160;&#160;&#160;&#160;B.1 <a href=
"#normative-references">Normative References</a><br />
&#160;&#160;&#160;&#160;B.2 <a href="#informative-references">Other
References</a><br />
C <a href="#xdtschema">Schema for the Extended XS
Namespace</a><br />
D <a href="#glossary">Glossary</a> (Non-Normative)<br />
E <a href="#example">Example</a> (Non-Normative)<br />
F <a href="#impl-summary">Implementation-Defined and
Implementation-Dependent Items</a> (Non-Normative)<br />
&#160;&#160;&#160;&#160;F.1 <a href=
"#implementation-defined">Implementation-Defined Items</a><br />
&#160;&#160;&#160;&#160;F.2 <a href=
"#implementation-dependent">Implementation-Dependent
Items</a><br />
G <a href="#ChangeLog">Changes since the First Edition</a>
(Non-Normative)<br />
H <a href="#accessors-list">Accessor Summary</a>
(Non-normative)<br />
I <a href="#infoset-construction-summary">Infoset Construction
Summary</a> (Non-normative)<br />
J <a href="#psvi-construction-summary">PSVI Construction
Summary</a> (Non-normative)<br />
K <a href="#infoset-mapping-summary">Infoset Mapping Summary</a>
(Non-normative)<br /></p>
</div>
<hr />
<div class="body">
<div class="div1">
<h2><a id="intro" name="intro"></a>1 Introduction</h2>
<p>This document defines the XQuery 1.0 and XPath 2.0 Data Model,
which is the data model of <a href="#xpath20">[XML Path Language
(XPath) 2.0 (Second Edition)]</a>, <a href="#xslt20">[XSLT 2.0
(Second Edition)]</a> and <a href="#xquery">[XQuery]</a></p>
<p>The XQuery 1.0 and XPath 2.0 Data Model (henceforth "data
model") serves two purposes. First, it defines the information
contained in the input to an XSLT or XQuery processor. Second, it
defines all permissible values of expressions in the XSLT, XQuery,
and XPath languages. A language is <em>closed</em> with respect to
a data model if the value of every expression in the language is
guaranteed to be in the data model. XSLT 2.0, XQuery 1.0, and XPath
2.0 are all closed with respect to the data model.</p>
<p>The data model is based on the <a href=
"#xml-infoset">[Infoset]</a> (henceforth "Infoset"), but it
requires the following new features to meet the <a href=
"#xpath20req">[XPath 2.0 Requirements]</a> and <a href=
"#xquery-requirements">[XML Query Requirements]</a>:</p>
<ul>
<li>
<p>Support for XML Schema types. The XML Schema recommendations
define features, such as structures (<a href="#xmlschema-1">[Schema
Part 1]</a>) and simple data types (<a href="#xmlschema-2">[Schema
Part 2]</a>), that extend the XML Information Set with precise type
information.</p>
</li>
<li>
<p>Representation of collections of documents and of complex
values. (<a href="#xquery-requirements">[XML Query
Requirements]</a>)</p>
</li>
<li>
<p>Support for typed atomic values.</p>
</li>
<li>
<p>Support for ordered, heterogeneous sequences.</p>
</li>
</ul>
<p>As with the Infoset, the XQuery 1.0 and XPath 2.0 Data Model
specifies what information in the documents is accessible, but it
does not specify the programming-language interfaces or bindings
used to represent or access the data.</p>
<p>The data model can represent various values including not only
the input and the output of a stylesheet or query, but all values
of expressions used during the intermediate calculations. Examples
include the input document or document repository (represented as a
Document Node or a sequence of Document Nodes), the result of a
path expression (represented as a sequence of nodes), the result of
an arithmetic or a logical expression (represented as an atomic
value), a sequence expression resulting in a sequence of items,
etc.</p>
<p>This document provides a precise definition of the properties of
nodes in the XQuery 1.0 and XPath 2.0 Data Model, how they are
accessed, and how they relate to values in the Infoset and
PSVI.</p>
</div>
<div class="div1">
<h2><a id="concepts" name="concepts"></a>2 Concepts</h2>
<p>This section outlines a number of general concepts that apply
throughout this specification.</p>
<p>In this document, examples and material labeled as "Note" are
provided for explanatory purposes and are not normative.</p>
<div class="div2">
<h3><a id="terminology" name="terminology"></a>2.1 Terminology</h3>
<p>For a full glossary of terms, see <a href="#glossary"><b>D
Glossary</b></a>.</p>
<p>In this specification the words <strong>must</strong>,
<strong>must not</strong>, <strong>should</strong>, <strong>should
not</strong>, <strong>may</strong> and <strong>recommended</strong>
are to be interpreted as described in <a href="#RFC2119">[RFC
2119]</a>.</p>
<p>This specification distinguishes between the data model as a
general concept and specific items (documents, elements, atomic
values, etc.) that are concrete examples of the data model by
identifying all concrete examples as <a title=
"instance of the data model" href="#dt-instance">instances of the
data model</a>.</p>
<p>[<a title="instance of the data model" id="dt-instance" name=
"dt-instance">Definition</a>: Every <b>instance of the data
model</b> is a <a title="sequence" href=
"#dt-sequence">sequence</a>.].</p>
<p>[<a title="sequence" id="dt-sequence" name=
"dt-sequence">Definition</a>: A <b>sequence</b> is an ordered
collection of zero or more <a title="item" href=
"#dt-item">items</a>.] A sequence cannot be a member of a sequence.
A single item appearing on its own is modeled as a sequence
containing one item. Sequences are defined in <a href=
"#sequences"><b>2.5 Sequences</b></a>.</p>
<p>[<a title="item" id="dt-item" name="dt-item">Definition</a>: An
<b>item</b> is either a <a title="Node" href="#dt-node">node</a> or
an <a title="atomic value" href="#dt-atomic-value">atomic
value</a>],</p>
<p>[<a title="item" id="dt-root-node" name=
"dt-root-node">Definition</a>: The topmost node of a tree is called
the <b>root node</b>.]</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>Thus the root node is merely a designator, based on position,
for one of the nodes in the tree without implying what kind of a
node it is. In the XPath 1.0 datamodel the root node was a kind of
node.</p>
</td>
</tr>
</table>
</blockquote>
<p>Every node is one of the seven kinds of nodes defined in
<a href="#Node"><b>6 Nodes</b></a>. Nodes form a tree that consists
of a root node plus all the nodes that are reachable directly or
indirectly from the root node via the <span class=
"function"><a href="#dm-children"><span class=
"prefix">dm:</span>children</a></span>, <span class=
"function"><a href="#dm-attributes"><span class=
"prefix">dm:</span>attributes</a></span>, and <span class=
"function"><a href="#dm-namespace-nodes"><span class=
"prefix">dm:</span>namespace-nodes</a></span> accessors. Every node
belongs to exactly one tree, and every tree has exactly one root
node.</p>
<p>[<a title="document" id="dt-document" name=
"dt-document">Definition</a>: A tree whose root node is a Document
Node is referred to as a <b>document</b>.]</p>
<p>[<a title="fragment" id="dt-fragment" name=
"dt-fragment">Definition</a>: A tree whose root node is not a
Document Node is referred to as a <b>fragment</b>.]</p>
<p>[<a title="atomic value" id="dt-atomic-value" name=
"dt-atomic-value">Definition</a>: An <b>atomic value</b> is a value
in the value space of an <a title="atomic type" href=
"#dt-atomic-type">atomic type</a> and is labeled with the name of
that atomic type.]</p>
<p>[<a title="atomic type" id="dt-atomic-type" name=
"dt-atomic-type">Definition</a>: An <b>atomic type</b> is a
<a title="primitive simple type" href=
"#dt-primitive-simple-type">primitive simple type</a> or a type
derived by restriction from another atomic type.] (Types derived by
list or union are not atomic.)</p>
<p>[<a title="primitive simple type" id="dt-primitive-simple-type"
name="dt-primitive-simple-type">Definition</a>: There are 21
<b>primitive simple types</b>: the 19 defined in <a href=
"http://www.w3.org/TR/xmlschema-2/#built-in-primitive-datatypes">Section
3.2 Primitive datatypes</a><sup><small>XS2</small></sup> of
<a href="#xmlschema-2">[Schema Part 2]</a> and
<code>xs:untypedAtomic</code> and <code>xs:anyAtomicType</code>],
defined in <a href="#types"><b>2.6 Types</b></a>.</p>
<p>A type is represented in the data model by an <a title=
"expanded-QName" href="#dt-expanded-qname">expanded-QName</a>.</p>
<p>[<a title="expanded-QName" id="dt-expanded-qname" name=
"dt-expanded-qname">Definition</a>: An <b>expanded-QName</b> is a
set of three values consisting of a possibly empty prefix, a
possibly empty namespace URI, and a local name.] See <a href=
"#qnames-and-notations"><b>3.3.3 QNames and NOTATIONS</b></a>.</p>
<p>[<a title="implementation defined" id=
"dt-implementation-defined" name=
"dt-implementation-defined">Definition</a>:
<b>Implementation-defined</b> indicates an aspect that may differ
between implementations, but must be specified by the implementor
for each particular implementation.]</p>
<p>[<a title="implementation dependent" id=
"dt-implementation-dependent" name=
"dt-implementation-dependent">Definition</a>:
<b>Implementation-dependent</b> indicates an aspect that may differ
between implementations, is not specified by this or any W3C
specification, and is not required to be specified by the
implementor for any particular implementation.]</p>
<p>[<a title="undefined" id="dt-undefined" name=
"dt-undefined">Definition</a>: In certain situations a value is
said to be <b>undefined</b> (for example, the typed value of an
element node). This term indicates that the property in question
has no value and that any attempt to use its value results in an
error.]</p>
<p>Within this specification, the term URI refers to a Universal
Resource Identifier as defined in <a href="#RFC3986">[RFC 3986]</a>
and extended in <a href="#RFC3987">[RFC 2987]</a> with the new name
IRI. The term URI has been retained in preference to IRI to avoid
introducing new names for concepts such as “Base URI” that are
defined or referenced across the whole family of XML
specifications.</p>
<p>In all cases where this specification leaves the behavior
implementation-defined or implementation-dependent, the
implementation has the option of providing mechanisms that allow
the user to influence the behavior.</p>
</div>
<div class="div2">
<h3><a id="notation" name="notation"></a>2.2 Notation</h3>
<p>In addition to prose, this specification defines a set of
accessor functions to explain the data model. The accessors are
shown with the prefix <em>dm:</em>. This prefix is always shown in
italics to emphasize that these functions are abstract; they exist
to explain the interface between the data model and specifications
that rely on the data model: they are not accessible directly from
the host language.</p>
<p>Several prefixes are used throughout this document for
notational convenience. The following bindings are assumed.</p>
<ol class="enumar">
<li>
<p><code>xs:</code> bound to
<code>http://www.w3.org/2001/XMLSchema</code></p>
</li>
<li>
<p><code>xsi:</code> bound to
<code>http://www.w3.org/2001/XMLSchema-instance</code></p>
</li>
<li>
<p><code>fn:</code> bound to
<code>http://www.w3.org/2005/xpath-functions</code></p>
</li>
</ol>
<p>In practice, any prefix that is bound to the appropriate URI may
be used.</p>
<p>The signature of accessor functions is shown using the same
style as <a href="#xpath-functions">[XQuery 1.0 and XPath 2.0
Functions and Operators (Second Edition)]</a>, described in
<a href="http://www.w3.org/TR/xpath-functions/#func-signatures">Section
1.4 Function Signatures and
Descriptions</a><sup><small>FO</small></sup>.</p>
<p>This document relies on the <a href="#xml-infoset">[Infoset]</a>
and <a href=
"http://www.w3.org/TR/xmlschema-1/#key-psvi">Post-Schema-Validation
Infoset</a> (PSVI). Information items and properties are indicated
by the styles <b class="info-item">information item</b> and
<b class="infoset-property">[infoset property]</b>,
respectively.</p>
<p>Some aspects of type assignment rely on the ability to access
properties of the schema components. Such properties are indicated
by the style {component property}. Note that this does not mean a
lightweight schema processor cannot be used, it only means that the
application must have some mechanism to access the necessary
properties.</p>
</div>
<div class="div2">
<h3><a id="node-identity" name="node-identity"></a>2.3 Node
Identity</h3>
<p>Each node has a unique identity. Every <a title="Node" href=
"#dt-node">node</a> in an instance of the data model is unique:
identical to itself, and not identical to any other node.
(<a title="atomic value" href="#dt-atomic-value">Atomic values</a>
do not have identity; every instance of the value “5” as an integer
is identical to every other instance of the value “5” as an
integer.)</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>The concept of node identity should not be confused with the
concept of a unique ID, which is a unique name assigned to an
element by the author to represent references using ID/IDREF
correlation.</p>
</td>
</tr>
</table>
</blockquote>
</div>
<div class="div2">
<h3><a id="document-order" name="document-order"></a>2.4 Document
Order</h3>
<p>[<a title="document order" id="dt-document-order" name=
"dt-document-order">Definition</a>: A <b>document order</b> is
defined among all the nodes accessible during a given query or
transformation. Document order is a total ordering, although the
relative order of some nodes is implementation-dependent.
Informally, document order is the order in which nodes appear in
the XML serialization of a document.] [<a title="stable" id=
"dt-stable" name="dt-stable">Definition</a>: Document order is
<b>stable</b>, which means that the relative order of two nodes
will not change during the processing of a given query or
transformation, even if this order is
implementation-dependent.]</p>
<p>Within a tree, document order satisfies the following
constraints:</p>
<ol class="enumar">
<li>
<p>The root node is the first node.</p>
</li>
<li>
<p>Every node occurs before all of its children and
descendants.</p>
</li>
<li>
<p>Namespace Nodes immediately follow the Element Node with which
they are associated. The relative order of Namespace Nodes is
stable but implementation-dependent.</p>
</li>
<li>
<p>Attribute Nodes immediately follow the Namespace Nodes of the
element with which they are associated. If there are no Namespace
Nodes associated with a given element, then the Attribute Nodes
associated with that element immediately follow the element. The
relative order of Attribute Nodes is stable but
implementation-dependent.</p>
</li>
<li>
<p>The relative order of siblings is the order in which they occur
in the <b class="dm-node-prop">children</b> property of their
parent node.</p>
</li>
<li>
<p>Children and descendants occur before following siblings.</p>
</li>
</ol>
<p>The relative order of nodes in distinct trees is stable but
implementation-dependent, subject to the following constraint: If
any node in a given tree, <code>T1</code>, occurs before any node
in a different tree, <code>T2</code>, then all nodes in
<code>T1</code> are before all nodes in <code>T2</code>.</p>
</div>
<div class="div2">
<h3><a id="sequences" name="sequences"></a>2.5 Sequences</h3>
<p>An important characteristic of the data model is that there is
no distinction between an item (a node or an atomic value) and a
singleton sequence containing that item. An item is equivalent to a
singleton sequence containing that item and vice versa.</p>
<p>A sequence may contain nodes, atomic values, or any mixture of
nodes and atomic values. When a node is added to a sequence its
identity remains the same. Consequently a node may occur in more
than one sequence and a sequence may contain duplicate items.</p>
<p>Sequences never contain other sequences; if sequences are
combined, the result is always a “flattened” sequence. In other
words, appending “(d e)” to “(a b c)” produces a sequence of length
5: “(a b c d e)”. It <em>does not</em> produce a sequence of length
4: “(a b c (d e))”, such a nested sequence never occurs.</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>Sequences replace node-sets from XPath 1.0. In XPath 1.0,
node-sets do not contain duplicates. In generalizing node-sets to
sequences in XPath 2.0, duplicate removal is provided by functions
on node sequences.</p>
</td>
</tr>
</table>
</blockquote>
</div>
<div class="div2">
<h3><a id="types" name="types"></a>2.6 Types</h3>
<p>The data model supports strongly typed languages such as
<a href="#xpath20">[XML Path Language (XPath) 2.0 (Second
Edition)]</a> and <a href="#xquery">[XQuery]</a> that have a type
system based on <a href="#xmlschema-1">[Schema Part 1]</a>. The
type system is formally defined in <a href=
"#xquery-semantics">[XQuery 1.0 and XPath 2.0 Formal Semantics
(Second Edition)]</a>.</p>
<p>Every <a title="item" href="#dt-item">item</a> in the data model
has both a value and a type. In addition to nodes, the data model
can represent atomic values like the number 5 or the string “Hello
World.” For each of these atomic values, the data model contains
both the value of the item (such as 5 or “Hello World”) and its
type name (such as <code>xs:integer</code> or
<code>xs:string</code>).</p>
<div class="div3">
<h4><a id="types-representation" name=
"types-representation"></a>2.6.1 Representation of Types</h4>
<p>The data model uses <a title="expanded-QName" href=
"#dt-expanded-qname">expanded-QNames</a> to represent the names of
schema types, which include the built-in types defined by <a href=
"#xmlschema-2">[Schema Part 2]</a>, five additional types defined
by this specification, and may include other user- or
implementation-defined types.</p>
<p>For XML Schema types, the namespace name of the expanded-QName
is the {target namespace} property of the type definition, and its
local name is the {name} property of the type definition.</p>
<p>The data model relies on the fact that an expanded-QName
uniquely identifies every named type. Although it is possible for
different schemas to define different types with the same
expanded-QName, at most one of them can be used in any given
validation episode. The data model cannot support environments
where different types with the same expanded-QName are
available.</p>
<p>For anonymous types, the processor <strong>must</strong>
construct an <a title="anonymous type name" href=
"#dt-anonymous-type-name">anonymous type name</a> that is distinct
from the name of every named type and the name of every other
anonymous type. [<a title="anonymous type name" id=
"dt-anonymous-type-name" name=
"dt-anonymous-type-name">Definition</a>: An <b>anonymous type
name</b> is an implementation dependent, unique type name provided
by the processor for every anonymous type declared in the schemas
available.] Anonymous type names <strong>must</strong> be globally
unique across all anonymous types that are accessible to the
processor. In the formalism of this specification, the anonymous
type names are assumed to be <code>xs:QNames</code>, but in
practice implementations are not required to use
<code>xs:QNames</code> to represent the implementation-dependent
names of anonymous types.</p>
<p>The scope over which the names of anonymous types must be
meaningful and distinct is depends on the processing context. It is
the responsibility of the host language to define the size and
scope of the processing context.</p>
<p>The data model does not represent element or attribute
declaration schema components, but it supports various type-related
operations. The semantics of other operations, for example,
checking if a particular instance of an Element Node has a given
schema type is defined in <a href="#xquery-semantics">[XQuery 1.0
and XPath 2.0 Formal Semantics (Second Edition)]</a>.</p>
</div>
<div class="div3">
<h4><a id="types-predefined" name="types-predefined"></a>2.6.2
Predefined Types</h4>
<p>In addition to the 19 types defined in <a href=
"http://www.w3.org/TR/xmlschema-2/#built-in-primitive-datatypes">Section
3.2 Primitive datatypes</a><sup><small>XS2</small></sup> of
<a href="#xmlschema-2">[Schema Part 2]</a>, the data model defines
five additional types: <code>xs:anyAtomicType</code>,
<code>xs:untyped</code>, <code>xs:untypedAtomic</code>,
<code>xs:dayTimeDuration</code>, and
<code>xs:yearMonthDuration</code>. These types are defined in the
XML Schema namespace with permission of the XML Schema Working
Group, which is expected to add them to some future version of XML
Schema.</p>
<dl>
<dt class="label"><code>xs:untyped</code></dt>
<dd>
<p>The datatype <b>xs:untyped</b> denotes the dynamic type of an
element node that has not been validated, or has been validated in
skip mode. No predefined types are derived from xs:untyped.</p>
</dd>
<dt class="label"><code>xs:untypedAtomic</code></dt>
<dd>
<p>The datatype <b>xs:untypedAtomic</b> denotes untyped atomic
data, such as text that has not been assigned a more specific type.
An attribute that has been validated in skip mode is represented in
the Data Model by an attribute node with the type
<code>xs:untypedAtomic</code>. No predefined types are derived from
<code>xs:untypedAtomic</code>.</p>
</dd>
<dt class="label"><code>xs:anyAtomicType</code></dt>
<dd>
<p>The datatype <b>xs:anyAtomicType</b> is an atomic type that
includes all atomic values (and no values that are not atomic). Its
base type is <code>xs:anySimpleType</code> from which all simple
types, including atomic, list, and union types are derived. All
primitive atomic types, such as <code>xs:decimal</code> and
<code>xs:string</code>, have <code>xs:anyAtomicType</code> as their
base type.</p>
</dd>
<dt class="label"><code>xs:dayTimeDuration</code></dt>
<dd>
<p>The type <code>xs:dayTimeDuration</code> is derived from
<code>xs:duration</code> by restricting its lexical representation
to contain only the days, hours, minutes and seconds components.
The value space of <code>xs:dayTimeDuration</code> is the set of
fractional second values. The components of
<code>xs:dayTimeDuration</code> correspond to the day, hour, minute
and second components defined in Section 5.5.3.2 of <a href=
"#ISO8601">[ISO 8601]</a>. An <code>xs:dayTimeDuration</code> is
derived from <code>xs:duration</code> as follows:</p>
<div class="exampleInner">
<pre>
&lt;xs:simpleType name='dayTimeDuration'&gt;
&lt;xs:restriction base='xs:duration'&gt;
&lt;xs:pattern value="[^YM]*[DT].*"/&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
</pre></div>
</dd>
<dt class="label"><code>xs:yearMonthDuration</code></dt>
<dd>
<p>The type <code>xs:yearMonthDuration</code> is derived from
<code>xs:duration</code> by restricting its lexical representation
to contain only the year and month components. The value space of
<code>xs:yearMonthDuration</code> is the set of
<code>xs:integer</code> month values. The year and month components
of <code>xs:yearMonthDuration</code> correspond to the Gregorian
year and month components defined in section 5.5.3.2 of <a href=
"#ISO8601">[ISO 8601]</a>, respectively.</p>
<p>The type <code>xs:yearMonthDuration</code> is derived from
<code>xs:duration</code> as follows:</p>
<div class="exampleInner">
<pre>
&lt;xs:simpleType name='yearMonthDuration'&gt;
&lt;xs:restriction base='xs:duration'&gt;
&lt;xs:pattern value="[^DT]*"/&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
</pre></div>
</dd>
</dl>
<p>A schema for these types is provided in <a href=
"#xdtschema"><b>C Schema for the Extended XS Namespace</b></a>.</p>
</div>
<div class="div3">
<h4><a id="types-hierarchy" name="types-hierarchy"></a>2.6.3 Type
Hierarchy</h4>
<p>The diagram below shows how the nodes, <a title=
"primitive simple type" href="#dt-primitive-simple-type">primitive
simple types</a>, and user defined types fit together into a
hierarchy.</p>
<p>The <code>xs:IDREFS</code>, <code>xs:NMTOKENS</code>,
<code>xs:ENTITIES</code> and <code>user-defined list and union
types</code> are special types in that these types are lists or
unions rather than true subtypes.</p>
<img src="type-hierarchy.png" alt="Type hierarchy graphic" /></div>
<div class="div3">
<h4><a id="AtomicValue" name="AtomicValue"></a>2.6.4 Atomic
Values</h4>
<p>An atomic value can be constructed from a lexical
representation. Given a string and an atomic type, the atomic value
is constructed in such a way as to be <a href=
"#typed-string-relationships">consistent with schema
validation</a>. If the string does not represent a valid value of
the type, an error is raised. When <code>xs:untypedAtomic</code> is
specified as the type, no validation takes place. The details of
the construction are described in <a href=
"http://www.w3.org/TR/xpath-functions/#constructor-functions">Section
5 Constructor Functions</a><sup><small>FO</small></sup> and the
related <a href=
"http://www.w3.org/TR/xpath-functions/#casting">Section 17
Casting</a><sup><small>FO</small></sup> section of <a href=
"#xpath-functions">[XQuery 1.0 and XPath 2.0 Functions and
Operators (Second Edition)]</a>.</p>
</div>
<div class="div3">
<h4><a id="StringValue" name="StringValue"></a>2.6.5 String
Values</h4>
<p>A string value can be constructed from an atomic value. Such a
value is constructed by converting the atomic value to its string
representation as described in <a href=
"http://www.w3.org/TR/xpath-functions/#casting">Section 17
Casting</a><sup><small>FO</small></sup>. Using the canonical
lexical representation for atomic values is not always compatible
with XPath 1.0. These and other backwards incompatibilities are
described in <a href=
"http://www.w3.org/TR/xpath20/#id-backwards-compatibility">Section
I Backwards Compatibility with XPath 1.0
(Non-Normative)</a><sup><small>XP</small></sup>.</p>
</div>
</div>
</div>
<div class="div1">
<h2><a id="construction" name="construction"></a>3 Data Model
Construction</h2>
<p>This section describes the constraints on instances of the data
model.</p>
<p>The data model supports well-formed XML documents conforming to
<a href="#xml-names">[Namespaces in XML]</a> or <a href=
"#xml-names11">[Namespaces in XML 1.1]</a>. Documents that are not
well-formed are, by definition, not XML. XML documents that do not
conform to <a href="#xml-names">[Namespaces in XML]</a> or <a href=
"#xml-names11">[Namespaces in XML 1.1]</a> are not supported (nor
are they supported by <a href="#xml-infoset">[Infoset]</a>).</p>
<p>In other words, the data model supports the following classes of
XML documents:</p>
<ul>
<li>
<p>Well-formed documents conforming to <a href=
"#xml-names">[Namespaces in XML]</a> or <a href=
"#xml-names11">[Namespaces in XML 1.1]</a>.</p>
</li>
<li>
<p>DTD-valid documents conforming to <a href=
"#xml-names">[Namespaces in XML]</a> or <a href=
"#xml-names11">[Namespaces in XML 1.1]</a>, and</p>
</li>
<li>
<p>W3C XML Schema-validated documents.</p>
</li>
</ul>
<p>This document describes how to construct an instance of the data
model from an infoset (<a href="#xml-infoset">[Infoset]</a>) or a
Post Schema Validation Infoset (PSVI), the augmented infoset
produced by an XML Schema validation episode.</p>
<p>An instance of the data model can also be constructed directly
through application APIs, or from non-XML sources such as
relational tables in a database. Regardless of how an instance of
the data model is constructed, every node and atomic value in the
data model must have a typed-value that is consistent with its
type.</p>
<p>The data model supports some kinds of values that are not
supported by <a href="#xml-infoset">[Infoset]</a>. Examples of
these are <a title="fragment" href="#dt-fragment">document
fragments</a> and sequences of Document Nodes. The data model also
supports values that are not nodes. Examples of these are sequences
of <a title="atomic value" href="#dt-atomic-value">atomic
values</a>, or sequences mixing nodes and atomic values. These are
necessary to be able to represent the results of intermediate
expressions in the data model during expression processing.</p>
<div class="div2">
<h3><a id="const-other" name="const-other"></a>3.1 Direct
Construction</h3>
<p>Although this document describes construction of an instance of
the data model in terms of infoset properties, an infoset is not a
necessary precondition for building an instance of the data
model.</p>
<p>There are no constraints on how an instance of the data model
may be constructed directly, save that the resulting instance
<strong>must</strong> satisfy all of the constraints described in
this document.</p>
</div>
<div class="div2">
<h3><a id="const-infoset" name="const-infoset"></a>3.2 Construction
from an Infoset</h3>
<p>An instance of the data model can be constructed from an infoset
that satisfies the following general constraints:</p>
<ul>
<li>
<p>All general and external parsed entities must be fully expanded.
The Infoset must not contain any <b class="info-item">unexpanded
entity reference information items</b>.</p>
</li>
<li>
<p>The infoset <strong>must</strong> provide all of the properties
identified as "required" in this document. The properties
identified as "optional" may be used, if they are present. All
other properties are ignored.</p>
</li>
</ul>
<p>An instance of the data model constructed from an information
set <strong>must</strong> be consistent with the description
provided for each node kind.</p>
</div>
<div class="div2">
<h3><a id="const-psvi" name="const-psvi"></a>3.3 Construction from
a PSVI</h3>
<p>An instance of the data model can be constructed from a PSVI,
whose element and attribute information items have been strictly
assessed, laxly assessed, or have not been assessed. Constructing
an instance of the data model from a PSVI <strong>must</strong> be
consistent with the description provided in this section and with
the description provided for each node kind.</p>
<p>Data model construction requires that the PSVI provide unique
names for all anonymous schema types.</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p><a href="#xmlschema-1">[Schema Part 1]</a> does not require all
schema processors to provide unique names for anonymous schema
types. In order to build an instance of the data model from a PSVI
produced by a processor that does not provide the names, some
post-processing will be required in order to assure that they are
all uniquely identified before construction begins.</p>
</td>
</tr>
</table>
</blockquote>
<p>[<a title="incompletely validated" id=
"dt-incompletely-validated" name=
"dt-incompletely-validated">Definition</a>: An <b>incompletely
validated</b> document is an XML document that has a corresponding
schema but whose schema-validity assessment has resulted in one or
more element or attribute information items being assigned values
other than 'valid' for the <b class=
"infoset-property">[validity]</b> property in the PSVI.]</p>
<p>The data model supports incompletely validated documents.
Elements and attributes that are not valid are treated as having
unknown types.</p>
<p>The most significant difference between Infoset construction and
PSVI construction occurs in the area of schema type assignment.
Other differences can also arise from schema processing: default
attribute and element values may be provided, white space
normalization of element content may occur, and the user-supplied
lexical form of elements and attributes with atomic schema types
may be lost.</p>
<div class="div3">
<h4><a id="PSVI2Types" name="PSVI2Types"></a>3.3.1 Mapping PSVI
Additions to Node Properties</h4>
<p>A PSVI element or attribute information item may have a
<b class="infoset-property">[validity]</b> property. The <b class=
"infoset-property">[validity]</b> property may be "<em>valid</em>",
"<em>invalid</em>", or "<em>notKnown</em>" and reflects the outcome
of schema-validity assessment. In the data model, precise schema
type information is exposed for Element and Attribute Nodes that
are "<em>valid</em>". Nodes that are not "<em>valid</em>" are
treated as if they were simply well-formed XML and only very
general schema type information is associated with them.</p>
<div class="div4">
<h5><a id="PSVI2NodeTypes" name="PSVI2NodeTypes"></a>3.3.1.1
Element and Attribute Node Type Names</h5>
<p>The precise definition of the schema type of an element or
attribute information item depends on the properties of the PSVI.
In the PSVI, <a href="#xmlschema-1">[Schema Part 1]</a> defines a
<b class="infoset-property">[type definition]</b> property as well
as the <b class="infoset-property">[type definition namespace]</b>,
<b class="infoset-property">[type definition name]</b> and
<b class="infoset-property">[type definition anonymous]</b>
properties, which are effectively short-cut terms for properties of
the type definition. Further, the <b class=
"infoset-property">[element declaration]</b> and <b class=
"infoset-property">[attribute declaration]</b> properties are
defined for elements and attributes, respectively. These
declarations in turn will identify the <b class=
"infoset-property">[type definition]</b> declared for the element
or attribute. To distinguish the <b class="infoset-property">[type
definition]</b> given in the PSVI for the element or attribute
instance from the <b class="infoset-property">[type definition]</b>
associated with the declaration, the former is referred to below as
the actual type and the latter as the declared type of the element
or attribute instance in question.</p>
<p>The type depends on the declared type, the actual type, and the
<b class="infoset-property">[validity]</b> and <b class=
"infoset-property">[validation attempted]</b> properties in the
PSVI. If:</p>
<ul>
<li>
<p>The <b class="infoset-property">[validity]</b> and <b class=
"infoset-property">[validation attempted]</b> properties exist and
have the values "<em>valid</em>" and "<em>full</em>", respectively,
the schema type of an element or attribute information item is
represented by an <a title="expanded-QName" href=
"#dt-expanded-qname">expanded-QName</a> whose namespace and local
name correspond to the first applicable items in the following
list:</p>
<ul>
<li>
<p>If the declared type exists and is a union and the actual type
is (not the same as the declared type, and not a type derived from
the declared type, but) one of the member types of the union, or
derived from one of its member types:</p>
<ul>
<li>
<p>If the {name} property of the declared type is present: the
{target namespace} and {name} properties of the declared type.</p>
</li>
<li>
<p>If the {name} property of the declared type is absent: the
namespace and local name of the anonymous type name supplied for
the declared type.</p>
</li>
</ul>
</li>
<li>
<p>If there is no declared type, and the actual type is a union,
then:</p>
<ul>
<li>
<p>If the {name} property of the actual type is present: the
{target namespace} and {name} properties of the actual type.</p>
</li>
<li>
<p>If the {name} property of the actual type is absent: the
namespace and local name of the anonymous type name supplied for
the actual type.</p>
</li>
</ul>
</li>
<li>
<p>Otherwise:</p>
<ul>
<li>
<p>If <b class="infoset-property">[type definition anonymous]</b>
is false: the {target namespace} and {name} properties of the
actual type.</p>
</li>
<li>
<p>If <b class="infoset-property">[type definition anonymous]</b>
is true: the namespace and local name of the anonymous type name
supplied for the actual type.</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>The <b class="infoset-property">[validity]</b> property exists
and is "<em>invalid</em>", or the <b class=
"infoset-property">[validation attempted]</b> property exists and
is "<em>partial</em>", the schema type of an element is
<code>xs:anyType</code> and the type of an attribute is
<code>xs:anySimpleType</code>.</p>
</li>
<li>
<p>The <b class="infoset-property">[validity]</b> property exists
and is "<em>notKnown</em>", and the <b class=
"infoset-property">[validation attempted]</b> property exists and
is "<em>none</em>", the schema type of an element is
<code>xs:untyped</code> and the type of an attribute is
<code>xs:untypedAtomic</code>.</p>
</li>
<li>
<p>The <b class="infoset-property">[validity]</b> or <b class=
"infoset-property">[validation attempted]</b> properties do not
exist, the schema type of an element is <code>xs:untyped</code> and
the type of an attribute is <code>xs:untypedAtomic</code>.</p>
</li>
</ul>
<p>The prefix associated with the type names is
implementation-dependent.</p>
</div>
<div class="div4">
<h5><a id="TypedValueDetermination" name=
"TypedValueDetermination"></a>3.3.1.2 Typed Value
Determination</h5>
<p>This section describes how the typed value of an Element or
Attribute Node is computed from an element or attribute PSVI
information item, where the information item has either a simple
type or a complex type with simple content. For other kinds of
Element Nodes, see <a href="#const-psvi-element"><b>6.2.4
Construction from a PSVI</b></a>; for other kinds of Attribute
Nodes, see <a href="#const-psvi-attribute"><b>6.3.4 Construction
from a PSVI</b></a>.</p>
<p>The typed value of Attribute Nodes and some Element Nodes is a
sequence of atomic values. The types of the items in the typed
value of a node may differ from the type of the node itself. This
section describes how the typed value of a node is derived from the
properties of an information item in a PSVI.</p>
<p>The types of the items in the typed value of a node are
determined as follows. The process begins with a type,
<code>T</code>. If the schema type of the node itself, as
represented in the PSVI, is a complex type with simple content,
then <code>T</code> is the {content type} of the schema type of the
node; otherwise, <code>T</code> is the schema type of the node
itself. For each primitive or ordinary simple type <code>T</code>,
the W3C XML Schema specification defines a function <code>M</code>
mapping the lexical representation of a value onto the value
itself.</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>For atomic and list types, the mapping is the “lexical mapping”
defined for <code>T</code> in <a href="#xmlschema-2">[Schema Part
2]</a>; for union types, the mapping is the lexical mapping defined
in <a href="#xmlschema-2">[Schema Part 2]</a> modified as
appropriate by any applicable rules in <a href=
"#xmlschema-1">[Schema Part 1]</a>. The mapping, so modified, is a
function (in the mathematical sense) which maps to a single value
even in cases where the lexical mapping proper maps to multiple
values.</p>
</td>
</tr>
</table>
</blockquote>
<p>The typed value is determined as follows:</p>
<ul>
<li>
<p>If the <b class="dm-node-prop">nilled</b> property of the node
in question is <code>true</code>, then the typed value is the empty
sequence.</p>
</li>
<li>
<p>If <code>T</code> is <code>xs:anySimpleType</code> or
<code>xs:anyAtomicType</code>, the typed value is the <b class=
"infoset-property">[schema normalized value]</b> as an instance of
<code>xs:untypedAtomic</code>.</p>
</li>
<li>
<p>Otherwise, the typed value is the result of applying
<code>M</code> to the string value as an instance of the
appropriate value type, where the appropriate value type is the
<b class="infoset-property">[member type definition]</b> if
<code>T</code> is a union type, otherwise it is simply
<code>T</code>.</p>
</li>
</ul>
<p>The typed value determination process is guaranteed to result in
a sequence of atomic values, each having a well-defined atomic
type. This sequence of atomic values, in turn, determines the
typed-value property of the node in the data model.</p>
</div>
<div class="div4">
<h5><a id="typed-string-relationships" name=
"typed-string-relationships"></a>3.3.1.3 Relationship Between
Typed-Value and String-Value</h5>
<p>Element and attribute nodes have both typed-value and
string-value properties. However, implementations are allowed some
flexibility in how these properties are stored. An implementation
may choose to store the string-value only and derive the
typed-value from it, or to store the typed-value only and derive
the string-value from it, or to store both the string-value and the
typed-value.</p>
<p>In order to permit these various implementation strategies, some
variations in the string value of a node are defined as
insignificant. Implementations that store only the typed value of a
node are permitted to return a string value that is different from
the original lexical form of the node content. For example,
consider the following element:</p>
<div class="exampleInner">
<pre>
&lt;offset xsi:type="xs:integer"&gt;0030&lt;/offset&gt;
</pre></div>
<p>Assuming that the node is valid, it has a typed value of 30 as
an <code>xs:integer</code>. An implementation may return either
"30" or "0030" as the string value of the node. Any string that is
a valid lexical representation of the typed value is acceptable. In
this specification, we express this rule by saying that the
relationship between the string value of a node and its typed value
must be "consistent with schema validation."</p>
<p>If an implementation stores only the string-value of a node, the
following considerations apply:</p>
<ul>
<li>
<p>Where union types occur, the implementation must be able to
deliver the typed-value as an instance of the appropriate member
type. For example, if the type an element node is
my:integer-or-string, which is defined as a union of xs:integer and
xs:string, and the string-value of the node is "47", the
implementation must be able to deliver the typed-value of the node
as either the integer 47 or the string "47", depending on which
member type validated the element.</p>
</li>
<li>
<p>Where types of <code>xs:QName</code>, <code>xs:NOTATION</code>,
or types derived from one of these types occur, the implementation
must be able to deliver the typed-value as a triple including a
local name, a namespace prefix, and a namespace URI, even though
the namespace URI is not part of the string-value (see <a href=
"#qnames-and-notations"><b>3.3.3 QNames and NOTATIONS</b></a>).</p>
</li>
<li>
<p>Where an element with a complex type and element-only content
occurs, it is an error to attempt to access the typed-value of the
Element Node.</p>
</li>
</ul>
<p>If an implementation stores only the typed-value of a node, it
must be prepared to construct string values from not only the node,
but in some cases also the descendants of that node. For example,
an element with a complex type and element-only content has no
typed-value but does have a string-value that is the concatenation
of the string-values of all its Text Node descendants in document
order.</p>
</div>
<div class="div4">
<h5><a id="pattern-facets" name="pattern-facets"></a>3.3.1.4
Pattern Facets</h5>
<p>Creating a subtype by restriction generally reduces the
<em>value</em> space of the original schema type. For example,
expressing a hat size as a restriction of decimal with a minimum
value of 6.5 and maximum value of 8.0 creates a schema type whose
legal values are only those in the range 6.5 to 8.0.</p>
<p>The pattern facet is different because it restricts the
<em>lexical</em> space of the schema type, not its value space.
Expressing a three-digit number as a restriction of integer with
the pattern facet “[0-9]{3}” creates a schema type whose legal
values are only those with a lexical form consisting of three
digits.</p>
<p>The pattern facet is not reversible in practice. A given point
in the value space might have several lexical representations. In
general, there's no practical way to determine which, if any, of
these representations satisfies the pattern facet of the type.</p>
<p>As a consequence, pattern facets are not respected when mapping
to an Infoset or during serialization and values in the data model
that were originally valid with respect to a schema that contains
pattern-based restrictions may be invalid after serialization.</p>
</div>
</div>
<div class="div3">
<h4><a id="dates-and-times" name="dates-and-times"></a>3.3.2 Dates
and Times</h4>
<p>The date and time types require special attention. This section
applies to implementations that store the typed value of
<code>xs:dateTime</code>, <code>xs:date</code>,
<code>xs:time</code>, <code>xs:gYearMonth</code>,
<code>xs:gYear</code>, <code>xs:gMonthDay</code>,
<code>xs:gMonth</code>, <code>xs:gDay</code>, and types that are
derived from them. These are known collectively as the date/time
types in this specification.</p>
<p>The values of the date/time types are represented in the data
model using seven components:</p>
<dl>
<dt class="label">year</dt>
<dd>
<p>An <code>xs:integer</code>.</p>
</dd>
<dt class="label">month</dt>
<dd>
<p>An <code>xs:integer</code> between 1 and 12, inclusive.</p>
</dd>
<dt class="label">day</dt>
<dd>
<p>An <code>xs:integer</code> between 1 and 31, inclusive, possibly
restricted further depending on the values of month and year.</p>
</dd>
<dt class="label">hour</dt>
<dd>
<p>An <code>xs:integer</code> between 0 and 23, inclusive.</p>
</dd>
<dt class="label">minute</dt>
<dd>
<p>An <code>xs:integer</code> between 0 and 59, inclusive.</p>
</dd>
<dt class="label">second</dt>
<dd>
<p>An <code>xs:decimal</code> greater than or equal to zero and
less than 60. Leap seconds are not supported.</p>
</dd>
<dt class="label">timezone</dt>
<dd>
<p>An <code>xs:dayTimeDuration</code> between -PT14H00M and
PT14H00M, inclusive. All timezone values must be an integral number
of minutes.</p>
</dd>
</dl>
<p>Components that are intrinsic to the datatype (for example, day,
month, and year in a <code>xs:date</code>) are required; components
that can never be part of a datatype (for example, years in a
<code>xs:time</code>) must be missing. Missing components are
represented by the empty sequence. When a component is present, it
contains the “local value” that has not been normalized in any way.
The timezone component is optional for all the date/time
datatypes.</p>
<p>Thus, the lexical <code>xs:dateTime</code> representation
<code>2003-01-02T11:30:00-05:00</code>” is stored as
<code>{2003,&#160;1,&#160;2,&#160;11,&#160;30,&#160;0.0,&#160;-PT05H00M}</code>”.
The value of the lexical representation
<code>2003-01-16T16:30:00</code>” is stored as
<code>{2003,&#160;1,&#160;16,&#160;16,&#160;30,&#160;0,&#160;()}</code>
because it has no timezone. The value of the lexical
<code>xs:gDay</code> representation “<code>---30+10:30</code>” is
stored as
<code>{(),&#160;(),&#160;30,&#160;(),&#160;(),&#160;(),&#160;PT10H30M}</code>”.</p>
<p>The lexical form “<code>24:00:00</code>” is normalized in the
component model. As a <code>xs:time</code>, it is stored as
<code>{(),&#160;(),&#160;(),&#160;0,&#160;0,&#160;0.0,&#160;()}</code>
and the <code>xs:dateTime</code> representation
<code>1999-12-31T24:00:00</code>” is stored as
<code>{2000,&#160;1,&#160;1,&#160;0,&#160;0,&#160;0.0,&#160;()}</code>”.</p>
<p>Note: Implementations are permitted to store date/time values in
any representation that's convenient for them, provided that the
individual properties can be accessed and modified.</p>
</div>
<div class="div3">
<h4><a id="qnames-and-notations" name=
"qnames-and-notations"></a>3.3.3 QNames and NOTATIONS</h4>
<p>The <code>QName</code> and <code>NOTATION</code> data types
require special attention. The following sections apply to
<code>xs:QName</code>, <code>xs:NOTATION</code>, and types derived
from them. These types are referred to collectively as “qualified
names”.</p>
<p>As defined in XML Schema, the lexical space for qualified names
includes a local name and an optional namespace prefix. The value
space for qualified names contains a local name and an optional
namespace URI. Therefore, it is not possible to derive a lexical
value from the typed value, or vice versa, without access to some
context that defines the namespace bindings.</p>
<p>When qualified names exist as values of nodes in a well-formed
document, it is always possible to determine such a namespace
context. However, the data model also allows qualified names to
exist as freestanding atomic values, or as the name or value of a
parentless attribute node, and in these cases no namespace context
is available.</p>
<p>In this Data Model, therefore, the value space for qualified
names contains a local-name, an optional namespace URI, and an
optional prefix. The prefix is used only when producing a lexical
representation of the value, that is, when casting the value to a
string. The prefix plays no part in other operations involving
qualified names: in particular, two qualified names are equal if
their local names and namespace URIs match, regardless whether they
have the same prefix.</p>
<p>The following consistency constraints apply:</p>
<ul>
<li>
<p>If the namespace URI of a qualified name is absent, then the
prefix must also be absent.</p>
</li>
<li>
<p>For every element node whose name has a prefix, the prefix must
be one that has a binding to the namespace URI of the element name
in the namespaces property of the element.</p>
</li>
<li>
<p>For every element node whose name has no prefix, the element
must have a a binding for the empty prefix to the namespace URI of
the element name, or must have no binding for the empty prefix in
the case where the name of the element has no namespace URI.</p>
</li>
<li>
<p>For every attribute node whose name has a prefix, the attribute
node must either be parentless, or the prefix must be one that has
a binding to the namespace URI of the attribute name in the
namespaces property of the parent element.</p>
</li>
<li>
<p>For every qualified name that contains a prefix and that is
included in the typed value of an element node, or of an attribute
node that has an element node as its parent, the prefix must be one
that is bound to the namespace URI of the qualified name in the
namespaces property of that element.</p>
</li>
<li>
<p>For every qualified name that contains a namespace URI and no
prefix, and that is included in the typed value of an element node,
or of an attribute node that has an element node as its parent,
that element node must have a binding for the empty prefix to that
namespace URI in its namespace property.</p>
</li>
<li>
<p>For every qualified name that contains neither a namespace URI
nor a prefix, and that is included in the typed value of an element
node, or of an attribute node that has an element node as its
parent, that node must not have a binding for the empty prefix.</p>
</li>
<li>
<p>No qualified name that contains a prefix may be included in the
typed value of an attribute node that has no parent.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="div1">
<h2><a id="infoset-mapping" name="infoset-mapping"></a>4 Infoset
Mapping</h2>
<p>This specification describes how to map each kind of node to the
corresponding information item. This mapping produces an Infoset;
it does not and cannot produce a PSVI. Validation must be used to
obtain a PSVI for a (portion of a) data model instance.</p>
</div>
<div class="div1">
<h2><a id="accessors" name="accessors"></a>5 Accessors</h2>
<p>A set of accessors is defined on <a href="#Node">nodes</a> in
the data model. For consistency, all the accessors are defined on
every kind of node, although several accessors return a constant
empty sequence on some kinds of nodes.</p>
<p>In order for processors to be able to operate on instances of
the data model, the model must expose the properties of the items
it contains. The data model does this by defining a family of
accessor functions. These are not functions in the literal sense;
they are not available for users or applications to call directly.
Rather they are descriptions of the information that an
implementation of the data model must expose to applications.
Functions and operators available to end-users are described in
<a href="#xpath-functions">[XQuery 1.0 and XPath 2.0 Functions and
Operators (Second Edition)]</a>.</p>
<p>Some typed values in the data model are <a title="undefined"
href="#dt-undefined">undefined</a>. Attempting to access an
undefined property is always an error. Behavior in these cases is
implementation-defined and the host language is responsible for
determining the result.</p>
<div class="div2">
<h3><a id="dm-attributes" name="dm-attributes"></a>5.1
<code>attributes</code> Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>attributes</code>(<code class=
"arg">$n</code><code class="as">&#160;as&#160;</code><code class=
"type">node()</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">attribute()*</code></div>
</div>
<p>The <span class="function"><a href="#dm-attributes"><span class=
"prefix">dm:</span>attributes</a></span> accessor returns the
attributes of a node as a sequence containing zero or more
Attribute Nodes. The order of Attribute Nodes is stable but
implementation dependent.</p>
<p>It is defined on <a href="#acc-summ-attributes">all seven</a>
node kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-base-uri" name="dm-base-uri"></a>5.2
<code>base-uri</code> Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>base-uri</code>(<code class=
"arg">$n</code><code class="as">&#160;as&#160;</code><code class=
"type">node()</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">xs:anyURI?</code></div>
</div>
<p>The <span class="function"><a href="#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span> accessor returns the base
URI of a node as a sequence containing zero or one URI reference.
For more information about base URIs, see <a href="#xmlbase">[XML
Base]</a>.</p>
<p>It is defined on <a href="#acc-summ-base-uri">all seven</a> node
kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-children" name="dm-children"></a>5.3
<code>children</code> Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>children</code>(<code class=
"arg">$n</code><code class="as">&#160;as&#160;</code><code class=
"type">node()</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">node()*</code></div>
</div>
<p>The <span class="function"><a href="#dm-children"><span class=
"prefix">dm:</span>children</a></span> accessor returns the
children of a node as a sequence containing zero or more nodes.</p>
<p>It is defined on <a href="#acc-summ-children">all seven</a> node
kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-document-uri" name="dm-document-uri"></a>5.4
<code>document-uri</code> Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>document-uri</code>(<code class=
"arg">$node</code><code class=
"as">&#160;as&#160;</code><code class="type">node()</code>)<code class="as">&#160;as&#160;</code><code class="return-type">xs:anyURI?</code></div>
</div>
<p>The <span class="function"><a href=
"#dm-document-uri"><span class=
"prefix">dm:</span>document-uri</a></span> accessor returns the
absolute URI of the resource from which the Document Node was
constructed, if the absolute URI is available. If there is no URI
available, or if it cannot be made absolute when the Document Node
is constructed, or if it is used on a node other than a Document
Node, the empty sequence is returned.</p>
<p>It is defined on <a href="#acc-summ-document-uri">all seven</a>
node kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-is-id" name="dm-is-id"></a>5.5 <code>is-id</code>
Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>is-id</code>(<code class=
"arg">$node</code><code class=
"as">&#160;as&#160;</code><code class="type">node()</code>)<code class="as">&#160;as&#160;</code><code class="return-type">xs:boolean?</code></div>
</div>
<p>The <span class="function"><a href="#dm-is-id"><span class=
"prefix">dm:</span>is-id</a></span> accessor returns true if the
node is an XML ID. Exactly what constitutes an ID depends in part
on how the data model was constructed, see <a href=
"#ElementNode"><b>6.2 Element Nodes</b></a> and <a href=
"#AttributeNode"><b>6.3 Attribute Nodes</b></a>.</p>
<p>It is defined on <a href="#acc-summ-is-id">all seven</a> node
kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-is-idrefs" name="dm-is-idrefs"></a>5.6
<code>is-idrefs</code> Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>is-idrefs</code>(<code class=
"arg">$node</code><code class=
"as">&#160;as&#160;</code><code class="type">node()</code>)<code class="as">&#160;as&#160;</code><code class="return-type">xs:boolean?</code></div>
</div>
<p>The <span class="function"><a href="#dm-is-idrefs"><span class=
"prefix">dm:</span>is-idrefs</a></span> accessor returns true if
the node is an XML IDREF or IDREFS. Exactly what constitutes an
IDREF or IDREFS depends in part on how the data model was
constructed, see <a href="#ElementNode"><b>6.2 Element
Nodes</b></a> and <a href="#AttributeNode"><b>6.3 Attribute
Nodes</b></a>.</p>
<p>It is defined on <a href="#acc-summ-is-idrefs">all seven</a>
node kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-namespace-bindings" name=
"dm-namespace-bindings"></a>5.7 <code>namespace-bindings</code>
Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>namespace-bindings</code>(<code class=
"arg">$node</code><code class=
"as">&#160;as&#160;</code><code class="type">node()</code>)<code class="as">&#160;as&#160;</code><code class="return-type">xs:string*</code></div>
</div>
<p>The <span class="function"><a href=
"#dm-namespace-bindings"><span class=
"prefix">dm:</span>namespace-bindings</a></span> accessor returns
the dynamic, in-scope namespaces associated with a node as a set of
prefix/URI pairs, using an implementation-dependent
representation.</p>
<p>The prefix for the default namespace is the zero length
string.</p>
<p>The <span class="function"><a href=
"#dm-namespace-bindings"><span class=
"prefix">dm:</span>namespace-bindings</a></span> accessor is
defined on <a href="#acc-summ-namespace-bindings">all seven</a>
node kinds.</p>
<p>Note: this accessor and the <code>namespace-nodes</code>
accessor provide two views of the same information.</p>
</div>
<div class="div2">
<h3><a id="dm-namespace-nodes" name="dm-namespace-nodes"></a>5.8
<code>namespace-nodes</code> Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>namespace-nodes</code>(<code class=
"arg">$n</code><code class="as">&#160;as&#160;</code><code class=
"type">node()</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">node()*</code></div>
</div>
<p>The <span class="function"><a href=
"#dm-namespace-nodes"><span class=
"prefix">dm:</span>namespace-nodes</a></span> accessor returns the
dynamic, in-scope namespaces associated with a node as a sequence
containing zero or more Namespace Nodes. The order of Namespace
Nodes is stable but implementation dependent.</p>
<p>It is defined on <a href="#acc-summ-namespace-nodes">all
seven</a> node kinds.</p>
<p>Note: this accessor and the <code>namespace-bindings</code>
accessor provide two views of the same information. Implementations
that do not need to expose Namespace Nodes might choose not to
implement this accessor.</p>
</div>
<div class="div2">
<h3><a id="dm-nilled" name="dm-nilled"></a>5.9 <code>nilled</code>
Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>nilled</code>(<code class=
"arg">$n</code><code class="as">&#160;as&#160;</code><code class=
"type">node()</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">xs:boolean?</code></div>
</div>
<p>The <span class="function"><a href="#dm-nilled"><span class=
"prefix">dm:</span>nilled</a></span> accessor returns true if the
node is "nilled". <a href="#xmlschema-1">[Schema Part 1]</a>
introduced the nilled mechanism to signal that an element should be
accepted as valid when it has no content even when it has a content
type which does not require or even necessarily allow empty
content.</p>
<p>It is defined on <a href="#acc-summ-nilled">all seven</a> node
kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-node-kind" name="dm-node-kind"></a>5.10
<code>node-kind</code> Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>node-kind</code>(<code class=
"arg">$n</code><code class="as">&#160;as&#160;</code><code class=
"type">node()</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">xs:string</code></div>
</div>
<p>The <span class="function"><a href="#dm-node-kind"><span class=
"prefix">dm:</span>node-kind</a></span> accessor returns a string
identifying the kind of node. It will be one of the following,
depending on the kind of node: “attribute”, “comment”, “document”,
“element”, “namespace” “processing-instruction”, or “text”.</p>
<p>It is defined on <a href="#acc-summ-node-kind">all seven</a>
node kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-node-name" name="dm-node-name"></a>5.11
<code>node-name</code> Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>node-name</code>(<code class=
"arg">$n</code><code class="as">&#160;as&#160;</code><code class=
"type">node()</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">xs:QName?</code></div>
</div>
<p>The <span class="function"><a href="#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span> accessor returns the name
of the node as a sequence of zero or one <code>xs:QName</code>s.
Note that the QName value includes an optional prefix as described
in <a href="#qnames-and-notations"><b>3.3.3 QNames and
NOTATIONS</b></a>.</p>
<p>It is defined on <a href="#acc-summ-node-name">all seven</a>
node kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-parent" name="dm-parent"></a>5.12 <code>parent</code>
Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>parent</code>(<code class=
"arg">$n</code><code class="as">&#160;as&#160;</code><code class=
"type">node()</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">node()?</code></div>
</div>
<p>The <span class="function"><a href="#dm-parent"><span class=
"prefix">dm:</span>parent</a></span> accessor returns the parent of
a node as a sequence containing zero or one nodes.</p>
<p>It is defined on <a href="#acc-summ-parent">all seven</a> node
kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-string-value" name="dm-string-value"></a>5.13
<code>string-value</code> Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>string-value</code>(<code class=
"arg">$n</code><code class="as">&#160;as&#160;</code><code class=
"type">node()</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">xs:string</code></div>
</div>
<p>The <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> accessor returns the
string value of a node.</p>
<p>It is defined on <a href="#acc-summ-string-value">all seven</a>
node kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-type-name" name="dm-type-name"></a>5.14
<code>type-name</code> Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>type-name</code>(<code class=
"arg">$n</code><code class="as">&#160;as&#160;</code><code class=
"type">node()</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">xs:QName?</code></div>
</div>
<p>The <span class="function"><a href="#dm-type-name"><span class=
"prefix">dm:</span>type-name</a></span> accessor returns the name
of the schema type of a node as a sequence of zero or one
<code>xs:QName</code>s.</p>
<p>It is defined on <a href="#acc-summ-type-name">all seven</a>
node kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-typed-value" name="dm-typed-value"></a>5.15
<code>typed-value</code> Accessor</h3>
<div class="exampleInner">
<div class="proto"><code class="function"><span class=
"prefix">dm:</span>typed-value</code>(<code class=
"arg">$n</code><code class="as">&#160;as&#160;</code><code class=
"type">node()</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">xs:anyAtomicType*</code></div>
</div>
<p>The <span class="function"><a href=
"#dm-typed-value"><span class="prefix">dm:</span>typed-value</a></span>
accessor returns the typed-value of the node as a sequence of zero
or more atomic values.</p>
<p>It is defined on <a href="#acc-summ-typed-value">all seven</a>
node kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-unparsed-entity-public-id" name=
"dm-unparsed-entity-public-id"></a>5.16
<code>unparsed-entity-public-id</code> Accessor</h3>
<div class="exampleInner">
<div class="proto">
<table summary="Function prototype" cellspacing="0" cellpadding="0"
border="0">
<tr>
<td valign="baseline" rowspan="2"><code class=
"function"><span class=
"prefix">dm:</span>unparsed-entity-public-id</code>(</td>
<td valign="baseline"><code class="arg">$node</code></td>
<td valign="baseline"><code class=
"as">&#160;as&#160;</code><code class="type">node()</code>,</td>
</tr>
<tr>
<td valign="baseline"><code class="arg">$entityname</code></td>
<td valign="baseline"><code class=
"as">&#160;as&#160;</code><code class=
"type">xs:string</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">xs:string?</code></td>
</tr>
</table>
</div>
</div>
<p>The <span class="function"><a href=
"#dm-unparsed-entity-public-id"><span class=
"prefix">dm:</span>unparsed-entity-public-id</a></span> accessor
returns the public identifier of an unparsed external entity
declared in the specified document. If no entity with the name
specified in <code>$entityname</code> exists, or if the entity is
not an external unparsed entity, or if the entity has no public
identifier, the empty sequence is returned.</p>
<p>It is defined on <a href=
"#acc-summ-unparsed-entity-public-id">all seven</a> node kinds.</p>
</div>
<div class="div2">
<h3><a id="dm-unparsed-entity-system-id" name=
"dm-unparsed-entity-system-id"></a>5.17
<code>unparsed-entity-system-id</code> Accessor</h3>
<div class="exampleInner">
<div class="proto">
<table summary="Function prototype" cellspacing="0" cellpadding="0"
border="0">
<tr>
<td valign="baseline" rowspan="2"><code class=
"function"><span class=
"prefix">dm:</span>unparsed-entity-system-id</code>(</td>
<td valign="baseline"><code class="arg">$node</code></td>
<td valign="baseline"><code class=
"as">&#160;as&#160;</code><code class="type">node()</code>,</td>
</tr>
<tr>
<td valign="baseline"><code class="arg">$entityname</code></td>
<td valign="baseline"><code class=
"as">&#160;as&#160;</code><code class=
"type">xs:string</code>)<code class=
"as">&#160;as&#160;</code><code class=
"return-type">xs:anyURI?</code></td>
</tr>
</table>
</div>
</div>
<p>The <span class="function"><a href=
"#dm-unparsed-entity-system-id"><span class=
"prefix">dm:</span>unparsed-entity-system-id</a></span> accessor
returns the system identifier of an unparsed external entity
declared in the specified document. The value is an absolute URI,
and is obtained by resolving the <b class=
"infoset-property">[system identifier]</b> of the unparsed entity
information item against the <b class=
"infoset-property">[declaration base URI]</b> of the same item. If
no entity with the name specified in <code>$entityname</code>
exists, or if the entity is not an external unparsed entity, the
empty sequence is returned.</p>
<p>It is defined on <a href=
"#acc-summ-unparsed-entity-system-id">all seven</a> node kinds.</p>
</div>
</div>
<div class="div1">
<h2><a id="Node" name="Node"></a>6 Nodes</h2>
<p>[<a title="Node" id="dt-node" name="dt-node">Definition</a>:
There are seven kinds of <b>Nodes</b> in the data model: <a href=
"#DocumentNode">document</a>, <a href="#ElementNode">element</a>,
<a href="#AttributeNode">attribute</a>, <a href=
"#TextNode">text</a>, <a href="#NamespaceNode">namespace</a>,
<a href="#ProcessingInstructionNode">processing instruction</a>,
and <a href="#CommentNode">comment</a>.] Each kind of node is
described in the following sections.</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>A host language based on the Data Model may specify that its
usage of the Data Model does not include namespace nodes. Namespace
nodes are used only in the "namespaces" property of an element
node, which records the bindings of namespace prefixes to namespace
URIs. These bindings may be represented either by means of
namespace nodes or by using an alternative,
implementation-dependent representation.</p>
</td>
</tr>
</table>
</blockquote>
<p id="constraints-general">All nodes <strong>must</strong> satisfy
the following general constraints:</p>
<ol class="enumar">
<li>
<p>Every node <strong>must</strong> have a unique identity,
distinct from all other nodes.</p>
</li>
<li>
<p>The <b class="dm-node-prop">children</b> property of a node
<strong>must not</strong> contain two consecutive Text Nodes.</p>
</li>
<li>
<p>The <b class="dm-node-prop">children</b> property of a node
<strong>must not</strong> contain any empty Text Nodes.</p>
</li>
<li>
<p>The <b class="dm-node-prop">children</b> and <b class=
"dm-node-prop">attributes</b> properties of a node <strong>must
not</strong> contain two nodes with the same identity.</p>
</li>
</ol>
<div class="div2">
<h3><a id="DocumentNode" name="DocumentNode"></a>6.1 Document
Nodes</h3>
<div class="div3">
<h4><a id="DocumentNodeOverview" name=
"DocumentNodeOverview"></a>6.1.1 Overview</h4>
<p>Document Nodes encapsulate XML documents. Documents have the
following properties:</p>
<ul>
<li>
<p><b class="dm-node-prop">base-uri</b>, possibly empty.</p>
</li>
<li>
<p><b class="dm-node-prop">children</b>, possibly empty.</p>
</li>
<li>
<p><b class="dm-node-prop">unparsed-entities</b>, possibly
empty.</p>
</li>
<li>
<p><b class="dm-node-prop">document-uri</b>, possibly empty.</p>
</li>
<li>
<p><b class="dm-node-prop">string-value</b></p>
</li>
<li>
<p><b class="dm-node-prop">typed-value</b></p>
</li>
</ul>
<p id="constraints-document">Document Nodes <strong>must</strong>
satisfy the following constraints.</p>
<ol class="enumar">
<li>
<p>The <b class="dm-node-prop">children</b> <strong>must</strong>
consist exclusively of Element, Processing Instruction, Comment,
and Text Nodes if it is not empty. Attribute, Namespace, and
Document Nodes can never appear as children</p>
</li>
<li>
<p>If a node <em>N</em> is among the <b class=
"dm-node-prop">children</b> of a Document Node <em>D</em>, then the
<b class="dm-node-prop">parent</b> of <em>N</em>
<strong>must</strong> be <em>D</em>.</p>
</li>
<li>
<p>If a node <em>N</em> has a <b class="dm-node-prop">parent</b>
Document Node <em>D</em>, then <em>N</em> <strong>must</strong> be
among the <b class="dm-node-prop">children</b> of <em>D</em>.</p>
</li>
<li>
<p>The <b class="dm-node-prop">string-value</b> property of a
Document Node must be the concatenation of the <b class=
"dm-node-prop">string-value</b>s of all its Text Node descendants
in document order or, if the document has no such descendants, the
zero-length string.</p>
</li>
</ol>
<p>In the <a href="#xml-infoset">[Infoset]</a>, a <b class=
"info-item">document information item</b> must have at least one
child, its children must consist exclusively of <b class=
"info-item">element information item</b>s, <b class=
"info-item">processing instruction information item</b>s and
<b class="info-item">comment information item</b>s, and exactly one
of the children must be an <b class="info-item">element information
item</b>. This data model is more permissive: a Document Node may
be empty, it may have more than one Element Node as a child, and it
also permits Text Nodes as children.</p>
<p>Implementations that support DTD processing and access to the
unparsed entity accessors use the <b class=
"dm-node-prop">unparsed-entities</b> property to associate
information about an unordered collection of unparsed entities with
a Document Node. This property is accessed indirectly through the
<span class="function"><a href=
"#dm-unparsed-entity-system-id"><span class=
"prefix">dm:</span>unparsed-entity-system-id</a></span> and
<span class="function"><a href=
"#dm-unparsed-entity-public-id"><span class=
"prefix">dm:</span>unparsed-entity-public-id</a></span>
functions.</p>
</div>
<div class="div3">
<h4><a id="DocumentNodeAccessors" name=
"DocumentNodeAccessors"></a>6.1.2 Accessors</h4>
<dl>
<dt class="label"><span class="function"><a href=
"#dm-attributes"><span class=
"prefix">dm:</span>attributes</a></span></dt>
<dd>
<p>Returns the empty sequence</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">base-uri</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-children"><span class=
"prefix">dm:</span>children</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">children</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-document-uri"><span class=
"prefix">dm:</span>document-uri</a></span></dt>
<dd>
<p>Returns the absolute URI of the resource from which the Document
Node was constructed, or the empty sequence if no such absolute URI
is available.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-id"><span class="prefix">dm:</span>is-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-idrefs"><span class=
"prefix">dm:</span>is-idrefs</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-bindings"><span class=
"prefix">dm:</span>namespace-bindings</a></span></dt>
<dd>
<p>Returns the empty sequence</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-nodes"><span class=
"prefix">dm:</span>namespace-nodes</a></span></dt>
<dd>
<p>Returns the empty sequence</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-nilled"><span class="prefix">dm:</span>nilled</a></span></dt>
<dd>
<p>Returns the empty sequence</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-kind"><span class=
"prefix">dm:</span>node-kind</a></span></dt>
<dd>
<p>Returns “<code>document</code>”.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span></dt>
<dd>
<p>Returns the empty sequence</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span></dt>
<dd>
<p>Returns the value of the <b class=
"dm-node-prop">string-value</b> property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-type-name"><span class=
"prefix">dm:</span>type-name</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-typed-value"><span class=
"prefix">dm:</span>typed-value</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">typed-value</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-public-id"><span class=
"prefix">dm:</span>unparsed-entity-public-id</a></span></dt>
<dd>
<p>Returns the public identifier of the specified unparsed entity
or the empty sequence if no such entity exists.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-system-id"><span class=
"prefix">dm:</span>unparsed-entity-system-id</a></span></dt>
<dd>
<p>Returns the system identifier of the specified unparsed entity
or the empty sequence if no such entity exists.</p>
</dd>
</dl>
</div>
<div class="div3">
<h4><a id="const-infoset-document" name=
"const-infoset-document"></a>6.1.3 Construction from an
Infoset</h4>
<p>The <b class="info-item">document information item</b> is
required. A Document Node is constructed for each <b class=
"info-item">document information item</b>.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[children]</b> and <b class=
"infoset-property">[base URI]</b>.</p>
<p>The following infoset properties are optional: <b class=
"infoset-property">[unparsed entities]</b>.</p>
<p>Document Node properties are derived from the infoset as
follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">base-uri</b></dt>
<dd>
<p>The value of the <b class="infoset-property">[base URI]</b>
property, if available. Note that the base URI property, if
available, is always an absolute URI (if an absolute URI can be
computed) though it may contain Unicode characters that are not
allowed in URIs. These characters, if they occur, are present in
the <b class="dm-node-prop">base-uri</b> property and will have to
be encoded and escaped by the application to obtain a URI suitable
for retrieval, if retrieval is required.</p>
<p>In practice a <b class="infoset-property">[base URI]</b> is not
always known. In this case the value of the <b class=
"dm-node-prop">base-uri</b> property of the document node will be
the empty sequence. This is not intrinsically an error, though it
may cause some operations that depend on the base URI to fail.</p>
</dd>
<dt class="label"><b class="dm-node-prop">children</b></dt>
<dd>
<p>The sequence of nodes constructed from the information items
found in the <b class="infoset-property">[children]</b>
property.</p>
<p>For each element, processing instruction, and comment found in
the <b class="infoset-property">[children]</b> property, a
corresponding Element, Processing Instruction, or Comment Node is
constructed and that sequence of nodes is used as the value of the
<b class="dm-node-prop">children</b> property.</p>
<p>If present among the <b class="infoset-property">[children]</b>,
the <b class="info-item">document type declaration information
item</b> is ignored.</p>
</dd>
<dt class="label"><b class=
"dm-node-prop">unparsed-entities</b></dt>
<dd>
<p>If the <b class="infoset-property">[unparsed entities]</b>
property is present and is not the empty set, the values of the
<b class="info-item">unparsed entity information items</b> must be
used to support the <span class="function"><a href=
"#dm-unparsed-entity-system-id"><span class=
"prefix">dm:</span>unparsed-entity-system-id</a></span> and
<span class="function"><a href=
"#dm-unparsed-entity-public-id"><span class=
"prefix">dm:</span>unparsed-entity-public-id</a></span>
accessors.</p>
<p>The internal structure of the values of the <b class=
"dm-node-prop">unparsed-entities</b> property is implementation
defined.</p>
</dd>
<dt class="label"><b class="dm-node-prop">string-value</b></dt>
<dd>
<p>The concatenation of the string-values of all its Text Node
descendants in document order. If the document has no such
descendants, the zero-length string.</p>
</dd>
<dt class="label"><b class="dm-node-prop">typed-value</b></dt>
<dd>
<p>The <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> of the node as an
<code>xs:untypedAtomic</code> value.</p>
</dd>
<dt class="label"><b class="dm-node-prop">document-uri</b></dt>
<dd>
<p>The <b class="dm-node-prop">document-uri</b> property holds the
absolute URI for the resource from which the document node was
constructed, if one is available and can be made absolute. For
example, if a collection of documents is returned by the
<span class="function">fn:collection</span> function, the <b class=
"dm-node-prop">document-uri</b> property may serve to distinguish
between them even though each has the same <b class=
"dm-node-prop">base-uri</b> property.</p>
<p>If the <b class="dm-node-prop">document-uri</b> is not the empty
sequence, then the following constraint must hold: the node
returned by evaluating <code>fn:doc()</code> with the <b class=
"dm-node-prop">document-uri</b> as its argument must return the
document node that provided the value of the <b class=
"dm-node-prop">document-uri</b> property.</p>
<p>In other words, for any Document Node <code>$arg</code>, either
<code>fn:document-uri($arg)</code> must return the empty sequence
or <code>fn:doc(fn:document-uri($arg))</code> must return
<code>$arg</code>.</p>
</dd>
</dl>
</div>
<div class="div3">
<h4><a id="const-psvi-document" name=
"const-psvi-document"></a>6.1.4 Construction from a PSVI</h4>
<p>Construction from a PSVI is identical to construction from the
Infoset.</p>
</div>
<div class="div3">
<h4><a id="infoset-mapping-document" name=
"infoset-mapping-document"></a>6.1.5 Infoset Mapping</h4>
<p>A Document Node maps to a <b class="info-item">document
information item</b>. The mapping fails and produces no value if
the Document Node contains Text Node children that do not consist
entirely of white space or if the Document Node contains more than
one Element Node child.</p>
<p>The following properties are specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[children]</b></dt>
<dd>
<p>A list of information items obtained by processing each of the
<span class="function"><a href="#dm-children"><span class=
"prefix">dm:</span>children</a></span> in order and mapping each to
the appropriate information item(s).</p>
</dd>
<dt class="label"><b class="infoset-property">[document
element]</b></dt>
<dd>
<p>The <b class="info-item">element information item</b> that is
among the <b class="infoset-property">[children]</b>.</p>
</dd>
<dt class="label"><b class="infoset-property">[unparsed
entities]</b></dt>
<dd>
<p>An unordered set of <b class="info-item">unparsed entity
information item</b>s constructed from the <b class=
"dm-node-prop">unparsed-entities</b>.</p>
<p>Each unparsed entity maps to an <b class="info-item">unparsed
entity information item</b>. The following properties are specified
by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[name]</b></dt>
<dd>
<p>The name of the entity.</p>
</dd>
<dt class="label"><b class="infoset-property">[system
identifier]</b></dt>
<dd>
<p>The system identifier of the entity.</p>
</dd>
<dt class="label"><b class="infoset-property">[public
identifier]</b></dt>
<dd>
<p>The public identifier of the entity.</p>
</dd>
<dt class="label"><b class="infoset-property">[declaration base
URI]</b></dt>
<dd>
<p>Implementation defined. In the many cases, the <b class=
"dm-node-prop">document-uri</b> is the correct answer and
implementations <strong>must</strong> use this value if they have
no better information. Implementations that keep track of the
original <b class="infoset-property">[declaration base URI]</b> for
entities should use that value.</p>
</dd>
</dl>
<p>The following properties of the <b class="info-item">unparsed
entity information item</b> have no value: <b class=
"infoset-property">[notation name]</b>, <b class=
"infoset-property">[notation]</b>.</p>
</dd>
</dl>
<p>The following properties of the <b class="info-item">document
information item</b> have no value: <b class=
"infoset-property">[notations]</b> <b class=
"infoset-property">[character encoding scheme]</b> <b class=
"infoset-property">[standalone]</b> <b class=
"infoset-property">[version]</b> <b class="infoset-property">[all
declarations processed]</b>.</p>
</div>
</div>
<div class="div2">
<h3><a id="ElementNode" name="ElementNode"></a>6.2 Element
Nodes</h3>
<div class="div3">
<h4><a id="ElementNodeOverview" name=
"ElementNodeOverview"></a>6.2.1 Overview</h4>
<p>Element Nodes encapsulate XML elements. Elements have the
following properties:</p>
<ul>
<li>
<p><b class="dm-node-prop">base-uri</b>, possibly empty.</p>
</li>
<li>
<p><b class="dm-node-prop">node-name</b></p>
</li>
<li>
<p><b class="dm-node-prop">parent</b>, possibly empty</p>
</li>
<li>
<p><b class="dm-node-prop">type-name</b></p>
</li>
<li>
<p><b class="dm-node-prop">children</b>, possibly empty</p>
</li>
<li>
<p><b class="dm-node-prop">attributes</b>, possibly empty</p>
</li>
<li>
<p><b class="dm-node-prop">namespaces</b></p>
</li>
<li>
<p><b class="dm-node-prop">nilled</b></p>
</li>
<li>
<p><b class="dm-node-prop">string-value</b></p>
</li>
<li>
<p><b class="dm-node-prop">typed-value</b></p>
</li>
<li>
<p><b class="dm-node-prop">is-id</b></p>
</li>
<li>
<p><b class="dm-node-prop">is-idrefs</b></p>
</li>
</ul>
<p>Element Nodes <strong>must</strong> satisfy the following
constraints.</p>
<ol class="enumar">
<li>
<p>The <b class="dm-node-prop">children</b> <strong>must</strong>
consist exclusively of Element, Processing Instruction, Comment,
and Text Nodes if it is not empty. Attribute, Namespace, and
Document Nodes can never appear as children</p>
</li>
<li>
<p>The Attribute Nodes of an element <strong>must</strong> have
distinct <code>xs:QName</code>s.</p>
</li>
<li>
<p>If a node <em>N</em> is among the <b class=
"dm-node-prop">children</b> of an element <em>E</em>, then the
<b class="dm-node-prop">parent</b> of <em>N</em>
<strong>must</strong> be <em>E</em>.</p>
</li>
<li>
<p>Exclusive of Attribute and Namespace Nodes, if a node <em>N</em>
has a <b class="dm-node-prop">parent</b> element <em>E</em>, then
<em>N</em> <strong>must</strong> be among the <b class=
"dm-node-prop">children</b> of <em>E</em>. (Attribute and Namespace
Nodes have a parent, but they do not appear among the children of
their parent.)</p>
<p>The data model permits Element Nodes without parents (to
represent partial results during expression processing, for
example). Such Element Nodes <strong>must not</strong> appear among
the <b class="dm-node-prop">children</b> of any other node.</p>
</li>
<li>
<p>If an Attribute Node <em>A</em> is among the <b class=
"dm-node-prop">attributes</b> of an element <em>E</em>, then the
<b class="dm-node-prop">parent</b> of <em>A</em>
<strong>must</strong> be <em>E</em>.</p>
</li>
<li>
<p>If an Attribute Node <em>A</em> has a <b class=
"dm-node-prop">parent</b> element <em>E</em>, then <em>A</em>
<strong>must</strong> be among the <b class=
"dm-node-prop">attributes</b> of <em>E</em>.</p>
<p>The data model permits Attribute Nodes without parents. Such
Attribute Nodes <strong>must not</strong> appear among the
<b class="dm-node-prop">attributes</b> of any Element Node.</p>
</li>
<li>
<p>If a Namespace Node <em>N</em> is among the namespaces of an
element <em>E</em>, then the parent of <em>N</em>
<strong>must</strong> be <em>E</em>.</p>
</li>
<li>
<p>If a Namespace Node <em>N</em> has a parent element <em>E</em>,
then <em>N</em> <strong>must</strong> be among the <b class=
"dm-node-prop">namespaces</b> of <em>E</em>.</p>
<p>The data model permits Namespace Nodes without parents. Such
Namespace Nodes <strong>must not</strong> appear among the
<b class="dm-node-prop">namespaces</b> of any Element Node. This
constraint is irrelevant for implementations that do not support
Namespace Nodes.</p>
</li>
<li>
<p>If the <span class="function"><a href=
"#dm-type-name"><span class="prefix">dm:</span>type-name</a></span>
of an Element Node is <code>xs:untyped</code>, then the
<span class="function"><a href="#dm-type-name"><span class=
"prefix">dm:</span>type-name</a></span> of all its descendant
elements <strong>must</strong> also be <code>xs:untyped</code> and
the <span class="function"><a href="#dm-type-name"><span class=
"prefix">dm:</span>type-name</a></span> of all its Attribute Nodes
<strong>must</strong> be <code>xs:untypedAtomic</code>.</p>
</li>
<li>
<p>If the <span class="function"><a href=
"#dm-type-name"><span class="prefix">dm:</span>type-name</a></span>
of an Element Node is <code>xs:untyped</code>, then the <b class=
"dm-node-prop">nilled</b> property <strong>must</strong> be
<code>false</code>.</p>
</li>
<li>
<p>If the <b class="dm-node-prop">nilled</b> property is
<code>true</code>, then the <b class="dm-node-prop">children</b>
property <strong>must not</strong> contain Element Nodes or Text
Nodes.</p>
</li>
<li>
<p>For every <a title="expanded-QName" href=
"#dt-expanded-qname">expanded QName</a> that appears in the
<span class="function"><a href="#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span> of the element, the
<span class="function"><a href="#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span> of any Attribute Node among
the <b class="dm-node-prop">attributes</b> of the element, or in
any value of type <code>xs:QName</code> or <code>xs:NOTATION</code>
(or any type derived from those types) that appears in the
typed-value of the element or the typed-value of any of its
attributes, if the expanded QName has a non-empty URI, then there
<strong>must</strong> be a prefix binding for this URI among the
<b class="dm-node-prop">namespaces</b> of this Element Node.</p>
<p>If any of the expanded QNames has an empty URI, then there
<strong>must not</strong> be any binding among the <b class=
"dm-node-prop">namespaces</b> of this Element Node which binds the
empty prefix to a URI.</p>
</li>
<li>
<p>Every element must include a Namespace Node and/or namespace
binding for the prefix <code>xml</code> bound to the URI
<code>http://www.w3.org/XML/1998/namespace</code> and there must be
no other prefix bound to that URI.</p>
</li>
<li>
<p>The <b class="dm-node-prop">string-value</b> property of an
Element Node must be the concatenation of the <b class=
"dm-node-prop">string-value</b>s of all its Text Node descendants
in document order or, if the element has no such descendants, the
zero-length string.</p>
</li>
</ol>
</div>
<div class="div3">
<h4><a id="ElementNodeAccessors" name=
"ElementNodeAccessors"></a>6.2.2 Accessors</h4>
<dl>
<dt class="label"><span class="function"><a href=
"#dm-attributes"><span class=
"prefix">dm:</span>attributes</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">attributes</b>
property. The order of Attribute Nodes is stable but implementation
dependent.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">base-uri</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-children"><span class=
"prefix">dm:</span>children</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">children</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-document-uri"><span class=
"prefix">dm:</span>document-uri</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-id"><span class="prefix">dm:</span>is-id</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">is-id</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-idrefs"><span class=
"prefix">dm:</span>is-idrefs</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">is-idrefs</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-bindings"><span class=
"prefix">dm:</span>namespace-bindings</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">namespaces</b>
property as a set of prefix/URI pairs.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-nodes"><span class=
"prefix">dm:</span>namespace-nodes</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">namespaces</b>
property as a sequence of Namespace Nodes. The order of Namespace
Nodes is stable but implementation dependent.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-nilled"><span class="prefix">dm:</span>nilled</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">nilled</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-kind"><span class=
"prefix">dm:</span>node-kind</a></span></dt>
<dd>
<p>Returns “<code>element</code>”.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">node-name</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">parent</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span></dt>
<dd>
<p>Returns the value of the <b class=
"dm-node-prop">string-value</b> property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-type-name"><span class=
"prefix">dm:</span>type-name</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">type-name</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-typed-value"><span class=
"prefix">dm:</span>typed-value</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">typed-value</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-public-id"><span class=
"prefix">dm:</span>unparsed-entity-public-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-system-id"><span class=
"prefix">dm:</span>unparsed-entity-system-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div class="div3">
<h4><a id="const-infoset-element" name=
"const-infoset-element"></a>6.2.3 Construction from an Infoset</h4>
<p>The <b class="info-item">element information items</b> are
required. An Element Node is constructed for each <b class=
"info-item">element information item</b>.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[namespace name]</b>, <b class=
"infoset-property">[local name]</b>, <b class=
"infoset-property">[children]</b>, <b class=
"infoset-property">[attributes]</b>, <b class=
"infoset-property">[in-scope namespaces]</b>, <b class=
"infoset-property">[base URI]</b>, and <b class=
"infoset-property">[parent]</b>.</p>
<p>Element Node properties are derived from the infoset as
follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">base-uri</b></dt>
<dd>
<p>The value of the <b class="infoset-property">[base URI]</b>
property, if available. Note that the base URI property, if
available, is always an absolute URI (if an absolute URI can be
computed) though it may contain Unicode characters that are not
allowed in URIs. These characters, if they occur, are present in
the <b class="dm-node-prop">base-uri</b> property and will have to
be encoded and escaped by the application to obtain a URI suitable
for retrieval, if retrieval is required.</p>
<p>In practice a <b class="infoset-property">[base URI]</b> is not
always known. In this case the value of the <b class=
"dm-node-prop">base-uri</b> property of the document node will be
the empty sequence. This is not intrinsically an error, though it
may cause some operations that depend on the base URI to fail.</p>
</dd>
<dt class="label"><b class="dm-node-prop">node-name</b></dt>
<dd>
<p>An <code>xs:QName</code> constructed from the <b class=
"infoset-property">[prefix]</b>, <b class="infoset-property">[local
name]</b>, and <b class="infoset-property">[namespace name]</b>
properties.</p>
</dd>
<dt class="label"><b class="dm-node-prop">parent</b></dt>
<dd>
<p>The node that corresponds to the value of the <b class=
"infoset-property">[parent]</b> property or the empty sequence if
there is no parent.</p>
</dd>
<dt class="label"><b class="dm-node-prop">type-name</b></dt>
<dd>
<p>All Element Nodes constructed from an infoset have the type
<code>xs:untyped</code>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">children</b></dt>
<dd>
<p>The sequence of nodes constructed from the information items
found in the <b class="infoset-property">[children]</b>
property.</p>
<p>For each element, processing instruction, comment, and maximal
sequence of adjacent <b class="info-item">character information
items</b> found in the <b class="infoset-property">[children]</b>
property, a corresponding Element, Processing Instruction, Comment,
or Text Node is constructed and that sequence of nodes is used as
the value of the <b class="dm-node-prop">children</b> property.</p>
<p>Because the data model requires that all general entities be
expanded, there will never be <b class="info-item">unexpanded
entity reference information item</b> children.</p>
</dd>
<dt class="label"><b class="dm-node-prop">attributes</b></dt>
<dd>
<p>A set of Attribute Nodes constructed from the <b class=
"info-item">attribute information items</b> appearing in the
<b class="infoset-property">[attributes]</b> property. This
includes all of the "special" attributes (<code>xml:lang</code>,
<code>xml:space</code>, <code>xsi:type</code>, etc.) but does not
include namespace declarations (because they are not
attributes).</p>
<p>Default and fixed attributes provided by the DTD are added to
the <b class="infoset-property">[attributes]</b> and are therefore
included in the data model <b class="dm-node-prop">attributes</b>
of an element.</p>
</dd>
<dt class="label"><b class="dm-node-prop">namespaces</b></dt>
<dd>
<p>A set of Namespace Nodes constructed from the <b class=
"info-item">namespace information items</b> appearing in the
<b class="infoset-property">[in-scope namespaces]</b> property.
Implementations that do not support Namespace Nodes may simply
preserve the relevant bindings in this property.</p>
<p>Implementations <strong>may</strong> ignore <b class=
"info-item">namespace information items</b> for namespaces which
are not known to be used. A namespace is known to be used if:</p>
<ul>
<li>
<p>It appears in the <a title="expanded-QName" href=
"#dt-expanded-qname">expanded QName</a> of the <b class=
"dm-node-prop">node-name</b> of the element.</p>
</li>
<li>
<p>It appears in the <a title="expanded-QName" href=
"#dt-expanded-qname">expanded QName</a> of the <b class=
"dm-node-prop">node-name</b> of any of the element's
attributes.</p>
</li>
</ul>
<p>Note: applications may rely on namespaces that are not known to
be used, for example when QNames are used in content and that
content does not have a type of <code>xs:QName</code> Such
applications may have difficulty processing data models where some
namespaces have been ignored.</p>
</dd>
<dt class="label"><b class="dm-node-prop">nilled</b></dt>
<dd>
<p>All Element Nodes constructed from an infoset have a <b class=
"dm-node-prop">nilled</b> property of "<em>false</em>".</p>
</dd>
<dt class="label"><b class="dm-node-prop">string-value</b></dt>
<dd>
<p>The <b class="dm-node-prop">string-value</b> is constructed from
the <b class="info-item">character information item</b> <b class=
"infoset-property">[children]</b> of the element and all its
descendants. The precise rules for selecting significant <b class=
"info-item">character information items</b> and constructing
characters from them is described in <a href=
"#const-infoset-text"><b>6.7.3 Construction from an Infoset</b></a>
of <a href="#TextNode"><b>6.7 Text Nodes</b></a>.</p>
<p>This process is equivalent to concatenating the <span class=
"function"><a href="#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span>s of all of the Text Node
descendants of the resulting Element Node.</p>
<p>If the element has no such descendants, the <b class=
"dm-node-prop">string-value</b> is the empty string.</p>
</dd>
<dt class="label"><b class="dm-node-prop">typed-value</b></dt>
<dd>
<p>The <b class="dm-node-prop">string-value</b> as an
<code>xs:untypedAtomic</code>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">is-id</b></dt>
<dd>
<p>All Element Nodes constructed from an infoset have a <b class=
"dm-node-prop">is-id</b> property of "<em>false</em>".</p>
</dd>
<dt class="label"><b class="dm-node-prop">is-idrefs</b></dt>
<dd>
<p>All Element Nodes constructed from an infoset have a <b class=
"dm-node-prop">is-idrefs</b> property of "<em>false</em>".</p>
</dd>
</dl>
</div>
<div class="div3">
<h4><a id="const-psvi-element" name="const-psvi-element"></a>6.2.4
Construction from a PSVI</h4>
<p>The following Element Node properties are affected by PSVI
properties.</p>
<dl>
<dt class="label"><b class="dm-node-prop">type-name</b></dt>
<dd>
<p>The <b class="dm-node-prop">type-name</b> is determined as
described in <a href="#PSVI2NodeTypes"><b>3.3.1.1 Element and
Attribute Node Type Names</b></a>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">children</b></dt>
<dd>
<p>The sequence of nodes constructed from the information items
found in the <b class="infoset-property">[children]</b>
property.</p>
<p>For each element, processing instruction, comment, and maximal
sequence of adjacent <b class="info-item">character information
items</b> found in the <b class="infoset-property">[children]</b>
property, a corresponding Element, Processing Instruction, Comment,
or Text Node is constructed and that sequence of nodes is used as
the value of the <b class="dm-node-prop">children</b> property.</p>
<p>For elements with schema simple types, or complex types with
simple content, if the <b class="infoset-property">[schema
normalized value]</b> PSVI property exists, the processor
<strong>may</strong> use a sequence of nodes containing the
Processing Instruction and Comment Nodes corresponding to the
<b class="info-item">processing instruction</b> and <b class=
"info-item">comment information items</b> found in the <b class=
"infoset-property">[children]</b> property, plus an optional single
Text Node whose string value is the <b class=
"infoset-property">[schema normalized value]</b> for the <b class=
"dm-node-prop">children</b> property. If the <b class=
"infoset-property">[schema normalized value]</b> is the empty
string, the Text Node <strong>must not</strong> be present,
otherwise it <strong>must</strong> be present.</p>
<p>The relative order of Processing Instruction and Comment Nodes
must be preserved, but the position of the Text Node, if it is
present, among them is implementation defined.</p>
<p>The effect of the above rules is that where a fixed or default
value for an element is defined in the schema, and the element
takes this default value, a text node will be created to contain
the value, even though there are no character information items
representing the value in the PSVI. The position of this text node
relative to any comment or processing instruction children is
implementation-dependent.</p>
<p><a href="#xmlschema-1">[Schema Part 1]</a> also permits an
element with mixed content to take a default or fixed value (which
will always be a simple value), but at the time of this writing it
is unclear how such a defaulted value is represented in the PSVI.
Implementations therefore <strong>may</strong> represent such a
default value by creating a text node, but are not required to do
so.</p>
<p>Because the data model requires that all general entities be
expanded, there will never be <b class="info-item">unexpanded
entity reference information item</b> children.</p>
</dd>
<dt class="label"><b class="dm-node-prop">attributes</b></dt>
<dd>
<p>A set of Attribute Nodes constructed from the <b class=
"info-item">attribute information items</b> appearing in the
<b class="infoset-property">[attributes]</b> property. This
includes all of the "special" attributes (<code>xml:lang</code>,
<code>xml:space</code>, <code>xsi:type</code>, etc.) but does not
include namespace declarations (because they are not
attributes).</p>
<p>Default and fixed attributes provided by XML Schema processing
are added to the <b class="infoset-property">[attributes]</b> and
are therefore included in the data model <b class=
"dm-node-prop">attributes</b> of an element.</p>
</dd>
<dt class="label"><b class="dm-node-prop">namespaces</b></dt>
<dd>
<p>A set of Namespace Nodes constructed from the <b class=
"info-item">namespace information items</b> appearing in the
<b class="infoset-property">[in-scope namespaces]</b> property.
Implementations that do not support Namespace Nodes may simply
preserve the relevant bindings in this property.</p>
<p>Implementations <strong>may</strong> ignore <b class=
"info-item">namespace information items</b> for namespaces which
are not known to be used. A namespace is known to be used if:</p>
<ul>
<li>
<p>It appears in the <a title="expanded-QName" href=
"#dt-expanded-qname">expanded QName</a> of the <b class=
"dm-node-prop">node-name</b> of the element.</p>
</li>
<li>
<p>It appears in the <a title="expanded-QName" href=
"#dt-expanded-qname">expanded QName</a> of the <b class=
"dm-node-prop">node-name</b> of any of the element's
attributes.</p>
</li>
<li>
<p>It appears in the <a title="expanded-QName" href=
"#dt-expanded-qname">expanded QName</a> of any values of type
<code>xs:QName</code> that appear among the element's children or
the typed values of its attributes.</p>
</li>
</ul>
<p>Note: applications may rely on namespaces that are not known to
be used, for example when QNames are used in content and that
content does not have a type of <code>xs:QName</code> Such
applications may have difficulty processing data models where some
namespaces have been ignored.</p>
</dd>
<dt class="label"><b class="dm-node-prop">nilled</b></dt>
<dd>
<p>If the <b class="infoset-property">[validity]</b> property
exists on an information item and is "<em>valid</em>" then if the
<b class="infoset-property">[nil]</b> property exists and is true,
then the <b class="dm-node-prop">nilled</b> property is
"<em>true</em>". In all other cases, including all cases where
schema validity assessment was not attempted or did not succeed,
the <b class="dm-node-prop">nilled</b> property is
"<em>false</em>".</p>
</dd>
<dt class="label"><b class="dm-node-prop">string-value</b></dt>
<dd>
<p>The string-value is calculated as follows:</p>
<ul>
<li>
<p>If the element is empty: its string value is the zero length
string.</p>
</li>
<li>
<p>If the element has a type of <code>xs:untyped</code>, a complex
type with element-only content, or a complex type with mixed
content: its string-value is the concatenation of the <b class=
"dm-node-prop">string-value</b>s of all its Text Node descendants
in document order.</p>
</li>
<li>
<p>If the element has a simple type or a complex type with simple
content: its string-value is the <b class=
"infoset-property">[schema normalized value]</b> of the node.</p>
</li>
</ul>
<p>If an implementation stores only the typed value of an element,
it may use any valid lexical representation of the typed value for
the <b class="dm-node-prop">string-value</b> property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">typed-value</b></dt>
<dd>
<p>The typed-value is calculated as follows:</p>
<ul>
<li>
<p>If the element is of type <code>xs:untyped</code>, its
typed-value is its <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> as an
<code>xs:untypedAtomic</code>.</p>
</li>
<li>
<p>If the element has a complex type with empty content, its
typed-value is the empty sequence.</p>
</li>
<li>
<p>If the element has a simple type or a complex type with simple
content: its typed value is computed as described in <a href=
"#TypedValueDetermination"><b>3.3.1.2 Typed Value
Determination</b></a>. The result is a sequence of zero or more
atomic values. The relationship between the type-name, typed-value,
and string-value of an element node is consistent with XML Schema
validation.</p>
<p>Note that in the case of dates and times, the timezone is
preserved as described in <a href="#dates-and-times"><b>3.3.2 Dates
and Times</b></a>, and in the case of <code>xs:QName</code>s and
<code>xs:NOTATION</code>s, the prefix is preserved as described in
<a href="#qnames-and-notations"><b>3.3.3 QNames and
NOTATIONS</b></a>.</p>
</li>
<li>
<p>If the element has a complex type with mixed content (including
<code>xs:anyType</code>), its typed-value is its <span class=
"function"><a href="#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> as an
<code>xs:untypedAtomic</code>.</p>
</li>
<li>
<p>Otherwise, the element must be a complex type with element-only
content. The typed-value of such an element is undefined.
Attempting to access this property with the <span class=
"function"><a href="#dm-typed-value"><span class=
"prefix">dm:</span>typed-value</a></span> accessor always raises an
error.</p>
</li>
</ul>
</dd>
<dt class="label"><b class="dm-node-prop">is-id</b></dt>
<dd>
<p>If the element has a complex type with element-only content, the
<b class="dm-node-prop">is-id</b> property is <code>false</code>.
Otherwise, if the typed-value of the element consists of exactly
one atomic value and that value is of type <code>xs:ID</code>, or a
type derived from <code>xs:ID</code>, the <b class=
"dm-node-prop">is-id</b> property is <code>true</code>, otherwise
it is <code>false</code>.</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>This means that in the case of a type constructed by list from
<code>xs:ID</code>, the ID is recognized provided that the list is
of length one. A type constructed as a union involving
<code>xs:ID</code> is recognized provided the actual value is of
type <code>xs:ID</code>.</p>
</td>
</tr>
</table>
</blockquote>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>The element that is marked with the <b class=
"dm-node-prop">is-id</b> property, and which will therefore be
retrieved by the fn:id function, is the node whose typed value
contains the <code>xs:ID</code> value. This node is a child of the
element node that, according to XML Schema, is uniquely identified
by this ID.</p>
</td>
</tr>
</table>
</blockquote>
</dd>
<dt class="label"><b class="dm-node-prop">is-idrefs</b></dt>
<dd>
<p>If the element has a complex type with element-only content, the
<b class="dm-node-prop">is-idrefs</b> property is
<code>false</code>. Otherwise, if any of the atomic values in the
typed-value of the element is of type <code>xs:IDREF</code> or
<code>xs:IDREFS</code>, or a type derived from one of those types,
the <b class="dm-node-prop">is-idrefs</b> property is
<code>true</code>, otherwise it is <code>false</code>.</p>
</dd>
</dl>
<p>All other properties have values that are consistent with
construction from an infoset.</p>
</div>
<div class="div3">
<h4><a id="infoset-mapping-element" name=
"infoset-mapping-element"></a>6.2.5 Infoset Mapping</h4>
<p>An Element Node maps to an <b class="info-item">element
information item</b>.</p>
<p>The following properties are specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[namespace
name]</b></dt>
<dd>
<p>The namespace name of the value of <span class=
"function"><a href="#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[local name]</b></dt>
<dd>
<p>The local part of the value of <span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[prefix]</b></dt>
<dd>
<p>The prefix associated with the value of <span class=
"function"><a href="#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[children]</b></dt>
<dd>
<p>A list of information items obtained by processing each of the
<span class="function"><a href="#dm-children"><span class=
"prefix">dm:</span>children</a></span> in order and mapping each to
the appropriate information item(s).</p>
</dd>
<dt class="label"><b class="infoset-property">[attributes]</b></dt>
<dd>
<p>An unordered set of information items obtained by processing
each of the <span class="function"><a href=
"#dm-attributes"><span class=
"prefix">dm:</span>attributes</a></span> and mapping each to the
appropriate information item(s).</p>
</dd>
<dt class="label"><b class="infoset-property">[in-scope
namespaces]</b></dt>
<dd>
<p>An unordered set of <b class="info-item">namespace information
items</b> constructed from the <b class=
"dm-node-prop">namespaces</b>.</p>
<p>Each in-scope namespace maps to a <b class="info-item">namespace
information item</b>. The following properties are specified by
this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[prefix]</b></dt>
<dd>
<p>The prefix associated with the namespace.</p>
</dd>
<dt class="label"><b class="infoset-property">[namespace
name]</b></dt>
<dd>
<p>The URI associated with the namespace.</p>
</dd>
</dl>
</dd>
<dt class="label"><b class="infoset-property">[base URI]</b></dt>
<dd>
<p>The value of <span class="function"><a href=
"#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[parent]</b></dt>
<dd>
<ul>
<li>
<p>If this node is the root of the infoset mapping operation,
<em>unknown</em>.</p>
</li>
<li>
<p>If this node has a parent, the information item that corresponds
to the node returned by <span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span>.</p>
</li>
<li>
<p>Otherwise <em>no value</em>.</p>
</li>
</ul>
</dd>
</dl>
<p>The following property has no value: <b class=
"infoset-property">[namespace attributes]</b>.</p>
</div>
</div>
<div class="div2">
<h3><a id="AttributeNode" name="AttributeNode"></a>6.3 Attribute
Nodes</h3>
<div class="div3">
<h4><a id="AttributeNodeOverview" name=
"AttributeNodeOverview"></a>6.3.1 Overview</h4>
<p>Attribute Nodes represent XML attributes. Attributes have the
following properties:</p>
<ul>
<li>
<p><b class="dm-node-prop">node-name</b></p>
</li>
<li>
<p><b class="dm-node-prop">parent</b>, possibly empty</p>
</li>
<li>
<p><b class="dm-node-prop">type-name</b></p>
</li>
<li>
<p><b class="dm-node-prop">string-value</b></p>
</li>
<li>
<p><b class="dm-node-prop">typed-value</b></p>
</li>
<li>
<p><b class="dm-node-prop">is-id</b></p>
</li>
<li>
<p><b class="dm-node-prop">is-idrefs</b></p>
</li>
</ul>
<p>Attribute Nodes <strong>must</strong> satisfy the following
constraints.</p>
<ol class="enumar">
<li>
<p>If an Attribute Node <em>A</em> is among the <b class=
"dm-node-prop">attributes</b> of an element <em>E</em>, then the
<b class="dm-node-prop">parent</b> of <em>A</em>
<strong>must</strong> be <em>E</em>.</p>
</li>
<li>
<p>If a Attribute Node <em>A</em> has a parent element <em>E</em>,
then <em>A</em> <strong>must</strong> be among the <b class=
"dm-node-prop">attributes</b> of <em>E</em>.</p>
<p>The data model permits Attribute Nodes without parents (to
represent partial results during expression processing, for
example). Such attributes <strong>must not</strong> appear among
the <b class="dm-node-prop">attributes</b> of any Element Node.</p>
</li>
<li>
<p>In the node-name of an attribute node, if a namespace URI is
present then a prefix <strong>must</strong> also be present.</p>
</li>
</ol>
<p>For convenience, the Element Node that owns this attribute is
called its "parent" even though an Attribute Node is not a "child"
of its parent element.</p>
</div>
<div class="div3">
<h4><a id="AttributeNodeAccessors" name=
"AttributeNodeAccessors"></a>6.3.2 Accessors</h4>
<dl>
<dt class="label"><span class="function"><a href=
"#dm-attributes"><span class=
"prefix">dm:</span>attributes</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span></dt>
<dd>
<p>If the attribute has a parent, returns the value of the
<span class="function"><a href="#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span> of its parent; otherwise it
returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-children"><span class=
"prefix">dm:</span>children</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-document-uri"><span class=
"prefix">dm:</span>document-uri</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-id"><span class="prefix">dm:</span>is-id</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">is-id</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-idrefs"><span class=
"prefix">dm:</span>is-idrefs</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">is-idrefs</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-bindings"><span class=
"prefix">dm:</span>namespace-bindings</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-nodes"><span class=
"prefix">dm:</span>namespace-nodes</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-nilled"><span class="prefix">dm:</span>nilled</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-kind"><span class=
"prefix">dm:</span>node-kind</a></span></dt>
<dd>
<p>Returns “<code>attribute</code>”.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">node-name</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">parent</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span></dt>
<dd>
<p>Returns the value of the <b class=
"dm-node-prop">string-value</b> property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-type-name"><span class=
"prefix">dm:</span>type-name</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">type-name</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-typed-value"><span class=
"prefix">dm:</span>typed-value</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">typed-value</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-public-id"><span class=
"prefix">dm:</span>unparsed-entity-public-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-system-id"><span class=
"prefix">dm:</span>unparsed-entity-system-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div class="div3">
<h4><a id="const-infoset-attribute" name=
"const-infoset-attribute"></a>6.3.3 Construction from an
Infoset</h4>
<p>The <b class="info-item">attribute information items</b> are
required. An Attribute Node is constructed for each <b class=
"info-item">attribute information item</b>.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[namespace name]</b>, <b class=
"infoset-property">[local name]</b>, <b class=
"infoset-property">[normalized value]</b>, <b class=
"infoset-property">[attribute type]</b>, and <b class=
"infoset-property">[owner element]</b>.</p>
<p>Attribute Node properties are derived from the infoset as
follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">node-name</b></dt>
<dd>
<p>An <code>xs:QName</code> constructed from the <b class=
"infoset-property">[prefix]</b>, <b class="infoset-property">[local
name]</b>, and <b class="infoset-property">[namespace name]</b>
properties.</p>
</dd>
<dt class="label"><b class="dm-node-prop">parent</b></dt>
<dd>
<p>The Element Node that corresponds to the value of the <b class=
"infoset-property">[owner element]</b> property or the empty
sequence if there is no owner.</p>
</dd>
<dt class="label"><b class="dm-node-prop">type-name</b></dt>
<dd>
<p>The value <code>xs:untypedAtomic</code>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">string-value</b></dt>
<dd>
<p>The <b class="infoset-property">[normalized value]</b> of the
attribute.</p>
</dd>
<dt class="label"><b class="dm-node-prop">typed-value</b></dt>
<dd>
<p>The attribute’s typed-value is its <span class=
"function"><a href="#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> as an
<code>xs:untypedAtomic</code>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">is-id</b></dt>
<dd>
<p>If the attribute is named <code>xml:id</code> and its <b class=
"infoset-property">[attribute type]</b> property does not have the
value <code>ID</code>, then <a href="#xml-id">[xml:id]</a>
processing is performed. This will assure that the value does have
the type <code>ID</code> and that it is properly normalized. If an
error is encountered during xml:id processing, an implementation
<strong>may</strong> raise a dynamic error. The <b class=
"dm-node-prop">is-id</b> property is always <code>true</code> for
attributes named <code>xml:id</code>.</p>
<p>If the <b class="infoset-property">[attribute type]</b> property
has the value <code>ID</code>, <code>true</code>, otherwise
<code>false</code>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">is-idrefs</b></dt>
<dd>
<p>If the <b class="infoset-property">[attribute type]</b> property
has the value <code>IDREF</code> or <code>IDREFS</code>,
<code>true</code>, otherwise <code>false</code>.</p>
</dd>
</dl>
</div>
<div class="div3">
<h4><a id="const-psvi-attribute" name=
"const-psvi-attribute"></a>6.3.4 Construction from a PSVI</h4>
<p>The following Attribute Node properties are affected by PSVI
properties.</p>
<dl>
<dt class="label"><b class="dm-node-prop">string-value</b></dt>
<dd>
<ul>
<li>
<p>The <b class="infoset-property">[schema normalized value]</b>
PSVI property if that exists.</p>
</li>
<li>
<p>Otherwise, the <b class="infoset-property">[normalized
value]</b> property.</p>
</li>
</ul>
<p>If an implementation stores only the typed value of an
attribute, it may use any valid lexical representation of the typed
value for the <b class="dm-node-prop">string-value</b>
property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">type-name</b></dt>
<dd>
<p>The <b class="dm-node-prop">type-name</b> is determined as
described in <a href="#PSVI2NodeTypes"><b>3.3.1.1 Element and
Attribute Node Type Names</b></a>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">typed-value</b></dt>
<dd>
<p>The typed-value is calculated as follows:</p>
<ul>
<li>
<p>If the attribute is of type <code>xs:untypedAtomic</code>: its
typed-value is its <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> as an
<code>xs:untypedAtomic</code>.</p>
</li>
<li>
<p>Otherwise, a sequence of zero or more atomic values as described
in <a href="#TypedValueDetermination"><b>3.3.1.2 Typed Value
Determination</b></a>. The relationship between the type-name,
typed-value, and string-value of an attribute node is consistent
with XML Schema validation.</p>
</li>
</ul>
</dd>
<dt class="label"><b class="dm-node-prop">is-id</b></dt>
<dd>
<p>If the attribute is named <code>xml:id</code> and its <b class=
"infoset-property">[attribute type]</b> property does not have the
value <code>xs:ID</code> or a type derived from <code>xs:ID</code>,
then <a href="#xml-id">[xml:id]</a> processing is performed. This
will assure that the value does have the type <code>xs:ID</code>
and that it is properly normalized. If an error is encountered
during xml:id processing, an implementation <strong>may</strong>
raise a dynamic error. The <b class="dm-node-prop">is-id</b>
property is always true for attributes named
<code>xml:id</code>.</p>
<p>Otherwise, if the typed-value of the attribute consists of
exactly one atomic value and that value is of type
<code>xs:ID</code>, or a type derived from <code>xs:ID</code>, the
<b class="dm-node-prop">is-id</b> property is <code>true</code>,
otherwise it is <code>false</code>.</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>This means that in the case of a type constructed by list from
<code>xs:ID</code>, the ID is recognized provided that the list is
of length one. A type constructed as a union involving
<code>xs:ID</code> is recognized provided the actual value is of
type <code>xs:ID</code>.</p>
</td>
</tr>
</table>
</blockquote>
</dd>
<dt class="label"><b class="dm-node-prop">is-idrefs</b></dt>
<dd>
<p>If any of the atomic values in the typed-value of the attribute
is of type <code>xs:IDREF</code> or <code>xs:IDREFS</code>, or a
type derived from one of those types, the <b class=
"dm-node-prop">is-idrefs</b> property is <code>true</code>,
otherwise it is <code>false</code>.</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>This rule means that a type constructed by list with an item
type of <code>xs:IDREF</code> (or a type derived from
<code>xs:IDREF</code>) has the <b class=
"dm-node-prop">is-idrefs</b> property, whether or not the list type
is named <code>xs:IDREFS</code> or is derived from
<code>xs:IDREFS</code>. Because union types are allowed, it also
means that an element or attribute with the <b class=
"dm-node-prop">is-idrefs</b> property can contain atomic values of
type <code>xs:IDREF</code> alongside values of other types.</p>
</td>
</tr>
</table>
</blockquote>
</dd>
</dl>
<p>All other properties have values that are consistent with
construction from an infoset.</p>
<p>Note: attributes from the XML Schema instance namespace,
"<code>http://www.w3.org/2001/XMLSchema-instance</code>",
(<code>xsi:schemaLocation</code>, <code>xsi:type</code>, etc.)
appear as ordinary attributes in the data model.</p>
</div>
<div class="div3">
<h4><a id="infoset-mapping-attribute" name=
"infoset-mapping-attribute"></a>6.3.5 Infoset Mapping</h4>
<p>An Attribute Node maps to an <b class="info-item">attribute
information item</b>.</p>
<p>The following properties are specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[namespace
name]</b></dt>
<dd>
<p>The namespace name of the value of <span class=
"function"><a href="#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[local name]</b></dt>
<dd>
<p>The local part of the value of <span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[prefix]</b></dt>
<dd>
<p>The prefix associated with the value of <span class=
"function"><a href="#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[normalized
value]</b></dt>
<dd>
<p>The value of <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[owner
element]</b></dt>
<dd>
<ul>
<li>
<p>If this node has a parent, the information item that corresponds
to the node returned by <span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span>.</p>
</li>
<li>
<p>Otherwise <em>no value</em>.</p>
</li>
</ul>
</dd>
</dl>
<p>The following properties have no value: <b class=
"infoset-property">[specified]</b> <b class=
"infoset-property">[attribute type]</b> <b class=
"infoset-property">[references]</b>.</p>
</div>
</div>
<div class="div2">
<h3><a id="NamespaceNode" name="NamespaceNode"></a>6.4 Namespace
Nodes</h3>
<div class="div3">
<h4><a id="NamespaceNodeOverview" name=
"NamespaceNodeOverview"></a>6.4.1 Overview</h4>
<p>Each Namespace Node represents the binding of a namespace URI to
a namespace prefix or to the default namespace. Implementations
that do not use Namespace Nodes may represent the same information
using the <b class="dm-node-prop">namespaces</b> property of an
element node. Namespaces have the following properties:</p>
<ul>
<li>
<p><b class="dm-node-prop">prefix</b>, possibly empty</p>
</li>
<li>
<p><b class="dm-node-prop">uri</b></p>
</li>
<li>
<p><b class="dm-node-prop">parent</b>, possibly empty</p>
</li>
</ul>
<p>Namespace Nodes <strong>must</strong> satisfy the following
constraints.</p>
<ol class="enumar">
<li>
<p>If a Namespace Node <em>N</em> is among the namespaces of an
element <em>E</em>, then the parent of <em>N</em>
<strong>must</strong> be <em>E</em>.</p>
</li>
<li>
<p>If a Namespace Node <em>N</em> has a parent element <em>E</em>,
then <em>N</em> <strong>must</strong> be among the namespaces of
<em>E</em>.</p>
</li>
<li>
<p>A Namespace Node <strong>must</strong> not have the name
<code>xmlns</code> nor the string-value
<code>http://www.w3.org/2000/xmlns/</code>.</p>
</li>
</ol>
<p>The data model permits Namespace Nodes without parents, see
below.</p>
<p>In XPath 1.0, Namespace Nodes were directly accessible by
applications, by means of the namespace axis. In XPath 2.0 the
namespace axis is deprecated, and it is not available at all in
XQuery 1.0. XPath 2.0 implementations are not required to expose
the namespace axis, though they may do so if they wish to offer
backwards compatibility.</p>
<p>The information held in namespace nodes is instead made
available to applications using functions defined in <a href=
"#xpath-functions">[XQuery 1.0 and XPath 2.0 Functions and
Operators (Second Edition)]</a>. Some properties of Namespace Nodes
are not exposed by these functions: in particular, properties
related to the identity of Namespace Nodes, their parentage, and
their position in document order. Implementations that do not
expose the namespace axis can therefore avoid the overhead of
maintaining this information.</p>
<p>Implementations that expose the namespace axis
<strong>must</strong> provide unique Namespace Nodes for each
element. Each element has an associated set of Namespace Nodes, one
for each distinct namespace prefix that is in scope for the element
(including the <code>xml</code> prefix, which is implicitly
declared by <a href="#xml-names">[Namespaces in XML]</a> and one
for the default namespace if one is in scope for the element. The
element is the parent of each of these Namespace Nodes; however, a
Namespace Node is not a child of its parent element. In
implementations that expose the namespace axis, elements never
share namespace nodes.</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>In implementations that do not expose the namespace axis, there
is no means by which the host language can tell if namespace nodes
are shared or not and, in such circumstances, sharing namespace
nodes may be a very reasonable implementation strategy.</p>
</td>
</tr>
</table>
</blockquote>
</div>
<div class="div3">
<h4><a id="NamespaceNodeAccessors" name=
"NamespaceNodeAccessors"></a>6.4.2 Accessors</h4>
<dl>
<dt class="label"><span class="function"><a href=
"#dm-attributes"><span class=
"prefix">dm:</span>attributes</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-children"><span class=
"prefix">dm:</span>children</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-document-uri"><span class=
"prefix">dm:</span>document-uri</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-id"><span class="prefix">dm:</span>is-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-idrefs"><span class=
"prefix">dm:</span>is-idrefs</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-bindings"><span class=
"prefix">dm:</span>namespace-bindings</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-nodes"><span class=
"prefix">dm:</span>namespace-nodes</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-nilled"><span class="prefix">dm:</span>nilled</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-kind"><span class=
"prefix">dm:</span>node-kind</a></span></dt>
<dd>
<p>Returns “<code>namespace</code>”.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span></dt>
<dd>
<p>If the <b class="dm-node-prop">prefix</b> is not empty, returns
an <code>xs:QName</code> with the value of the <b class=
"dm-node-prop">prefix</b> property in the local-name and an empty
namespace name, otherwise returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">parent</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">uri</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-type-name"><span class=
"prefix">dm:</span>type-name</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-typed-value"><span class=
"prefix">dm:</span>typed-value</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">uri</b>
property as an <code>xs:string</code>.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-public-id"><span class=
"prefix">dm:</span>unparsed-entity-public-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-system-id"><span class=
"prefix">dm:</span>unparsed-entity-system-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div class="div3">
<h4><a id="const-infoset-namespace" name=
"const-infoset-namespace"></a>6.4.3 Construction from an
Infoset</h4>
<p>The <b class="info-item">namespace information items</b> are
required.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[prefix]</b>, <b class=
"infoset-property">[namespace name]</b>.</p>
<p>Namespace Node properties are derived from the infoset as
follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">prefix</b></dt>
<dd>
<p>The <b class="infoset-property">[prefix]</b> property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">uri</b></dt>
<dd>
<p>The <b class="infoset-property">[namespace name]</b>
property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">parent</b></dt>
<dd>
<p>The element in whose <b class="infoset-property">[in-scope
namespaces]</b> property the <b class="info-item">namespace
information item</b> appears, if the implementation exposes any
mechanism for accessing the <span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span>
accessor of Namespace Nodes.</p>
</dd>
</dl>
</div>
<div class="div3">
<h4><a id="const-psvi-namespace" name=
"const-psvi-namespace"></a>6.4.4 Construction from a PSVI</h4>
<p>Construction from a PSVI is identical to construction from the
Infoset.</p>
</div>
<div class="div3">
<h4><a id="infoset-mapping-namespace" name=
"infoset-mapping-namespace"></a>6.4.5 Infoset Mapping</h4>
<p>A Namespace Node maps to a <b class="info-item">namespace
information item</b>.</p>
<p>The following properties are specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[prefix]</b></dt>
<dd>
<p>The prefix associated with the namespace.</p>
</dd>
<dt class="label"><b class="infoset-property">[namespace
name]</b></dt>
<dd>
<p>The value of <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span>.</p>
</dd>
</dl>
</div>
</div>
<div class="div2">
<h3><a id="ProcessingInstructionNode" name=
"ProcessingInstructionNode"></a>6.5 Processing Instruction
Nodes</h3>
<div class="div3">
<h4><a id="ProcessingInstructionNodeOverview" name=
"ProcessingInstructionNodeOverview"></a>6.5.1 Overview</h4>
<p>Processing Instruction Nodes encapsulate XML processing
instructions. Processing instructions have the following
properties:</p>
<ul>
<li>
<p><b class="dm-node-prop">target</b></p>
</li>
<li>
<p><b class="dm-node-prop">content</b></p>
</li>
<li>
<p><b class="dm-node-prop">base-uri</b>, possibly empty</p>
</li>
<li>
<p><b class="dm-node-prop">parent</b>, possibly empty</p>
</li>
</ul>
<p>Processing Instruction Nodes <strong>must</strong> satisfy the
following constraints.</p>
<ol class="enumar">
<li>
<p>The string "?&gt;" <strong>must not</strong> occur within the
<b class="dm-node-prop">content</b>.</p>
</li>
<li>
<p>The <b class="dm-node-prop">target</b> <strong>must</strong> be
an <code>NCName</code>.</p>
</li>
</ol>
</div>
<div class="div3">
<h4><a id="ProcessingInstructionNodeAccessors" name=
"ProcessingInstructionNodeAccessors"></a>6.5.2 Accessors</h4>
<dl>
<dt class="label"><span class="function"><a href=
"#dm-attributes"><span class=
"prefix">dm:</span>attributes</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">base-uri</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-children"><span class=
"prefix">dm:</span>children</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-document-uri"><span class=
"prefix">dm:</span>document-uri</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-id"><span class="prefix">dm:</span>is-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-idrefs"><span class=
"prefix">dm:</span>is-idrefs</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-bindings"><span class=
"prefix">dm:</span>namespace-bindings</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-nodes"><span class=
"prefix">dm:</span>namespace-nodes</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-nilled"><span class="prefix">dm:</span>nilled</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-kind"><span class=
"prefix">dm:</span>node-kind</a></span></dt>
<dd>
<p>Returns “<code>processing-instruction</code>”.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span></dt>
<dd>
<p>Returns an <code>xs:QName</code> with the value of the <b class=
"dm-node-prop">target</b> property in the local-name and an empty
namespace URI and empty prefix.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">parent</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">content</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-type-name"><span class=
"prefix">dm:</span>type-name</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-typed-value"><span class=
"prefix">dm:</span>typed-value</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">content</b>
property as a <code>xs:string</code>.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-public-id"><span class=
"prefix">dm:</span>unparsed-entity-public-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-system-id"><span class=
"prefix">dm:</span>unparsed-entity-system-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div class="div3">
<h4><a id="const-infoset-pi" name="const-infoset-pi"></a>6.5.3
Construction from an Infoset</h4>
<p>A Processing Instruction Node is constructed for each <b class=
"info-item">processing instruction information item</b> that is not
ignored.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[target]</b>, <b class=
"infoset-property">[content]</b>, <b class="infoset-property">[base
URI]</b>, and <b class="infoset-property">[parent]</b>.</p>
<p>Processing Instruction Node properties are derived from the
infoset as follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">target</b></dt>
<dd>
<p>The value of the <b class="infoset-property">[target]</b>
property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">content</b></dt>
<dd>
<p>The value of the <b class="infoset-property">[content]</b>
property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">base-uri</b></dt>
<dd>
<p>The value of the <b class="infoset-property">[base URI]</b>
property, if available. Note that the base URI property, if
available, is always an absolute URI (if an absolute URI can be
computed) though it may contain Unicode characters that are not
allowed in URIs. These characters, if they occur, are present in
the <b class="dm-node-prop">base-uri</b> property and will have to
be encoded and escaped by the application to obtain a URI suitable
for retrieval, if retrieval is required.</p>
<p>In practice a <b class="infoset-property">[base URI]</b> is not
always known. In this case the value of the <b class=
"dm-node-prop">base-uri</b> property of the document node will be
the empty sequence. This is not intrinsically an error, though it
may cause some operations that depend on the base URI to fail.</p>
</dd>
<dt class="label"><b class="dm-node-prop">parent</b></dt>
<dd>
<p>The node corresponding to the value of the <b class=
"infoset-property">[parent]</b> property.</p>
</dd>
</dl>
<p>There are no Processing Instruction Nodes for processing
instructions that are children of a <b class="info-item">document
type declaration information item</b>.</p>
</div>
<div class="div3">
<h4><a id="const-psvi-pi" name="const-psvi-pi"></a>6.5.4
Construction from a PSVI</h4>
<p>Construction from a PSVI is identical to construction from the
Infoset.</p>
</div>
<div class="div3">
<h4><a id="infoset-mapping-processing-instruction" name=
"infoset-mapping-processing-instruction"></a>6.5.5 Infoset
Mapping</h4>
<p>An Processing Instruction Node maps to a <b class=
"info-item">processing instruction information item</b>.</p>
<p>The following properties are specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[target]</b></dt>
<dd>
<p>The local part of the value of <span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[content]</b></dt>
<dd>
<p>The value of <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[base URI]</b></dt>
<dd>
<p>The value of <span class="function"><a href=
"#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[parent]</b></dt>
<dd>
<ul>
<li>
<p>If this node is the root of the infoset mapping operation,
<em>unknown</em>.</p>
</li>
<li>
<p>If this node has a parent, the information item that corresponds
to the node returned by <span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span>.</p>
</li>
<li>
<p>Otherwise <em>no value</em>.</p>
</li>
</ul>
</dd>
<dt class="label"><b class="infoset-property">[notation]</b></dt>
<dd>
<p><em>no value</em>.</p>
</dd>
</dl>
</div>
</div>
<div class="div2">
<h3><a id="CommentNode" name="CommentNode"></a>6.6 Comment
Nodes</h3>
<div class="div3">
<h4><a id="CommentNodeOverview" name=
"CommentNodeOverview"></a>6.6.1 Overview</h4>
<p>Comment Nodes encapsulate XML comments. Comments have the
following properties:</p>
<ul>
<li>
<p><b class="dm-node-prop">content</b></p>
</li>
<li>
<p><b class="dm-node-prop">parent</b>, possibly empty</p>
</li>
</ul>
<p>Comment Nodes <strong>must</strong> satisfy the following
constraints.</p>
<ol class="enumar">
<li>
<p>The string "--" <strong>must not</strong> occur within the
<b class="dm-node-prop">content</b>.</p>
</li>
<li>
<p>The character "-" <strong>must not</strong> occur as the last
character of the <b class="dm-node-prop">content</b>.</p>
</li>
</ol>
</div>
<div class="div3">
<h4><a id="CommentNodeAccessors" name=
"CommentNodeAccessors"></a>6.6.2 Accessors</h4>
<dl>
<dt class="label"><span class="function"><a href=
"#dm-attributes"><span class=
"prefix">dm:</span>attributes</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span></dt>
<dd>
<p>If the comment has a parent, returns the value of the
<span class="function"><a href="#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span> of its parent; otherwise,
returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-children"><span class=
"prefix">dm:</span>children</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-document-uri"><span class=
"prefix">dm:</span>document-uri</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-id"><span class="prefix">dm:</span>is-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-idrefs"><span class=
"prefix">dm:</span>is-idrefs</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-bindings"><span class=
"prefix">dm:</span>namespace-bindings</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-nodes"><span class=
"prefix">dm:</span>namespace-nodes</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-nilled"><span class="prefix">dm:</span>nilled</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-kind"><span class=
"prefix">dm:</span>node-kind</a></span></dt>
<dd>
<p>Returns “<code>comment</code>”.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">parent</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">content</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-type-name"><span class=
"prefix">dm:</span>type-name</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-typed-value"><span class=
"prefix">dm:</span>typed-value</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">content</b>
property as a <code>xs:string</code>.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-public-id"><span class=
"prefix">dm:</span>unparsed-entity-public-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-system-id"><span class=
"prefix">dm:</span>unparsed-entity-system-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div class="div3">
<h4><a id="const-infoset-comment" name=
"const-infoset-comment"></a>6.6.3 Construction from an Infoset</h4>
<p>The <b class="info-item">comment information items</b> are
optional.</p>
<p>A Comment Node is constructed for each <b class=
"info-item">comment information item</b>.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[content]</b> and <b class=
"infoset-property">[parent]</b>.</p>
<p>Comment Node properties are derived from the infoset as
follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">content</b></dt>
<dd>
<p>The value of the <b class="infoset-property">[content]</b>
property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">parent</b></dt>
<dd>
<p>The node corresponding to the value of the <b class=
"infoset-property">[parent]</b> property.</p>
</dd>
</dl>
<p>There are no Comment Nodes for comments that are children of a
<b class="info-item">document type declaration information
item</b>.</p>
</div>
<div class="div3">
<h4><a id="const-psvi-comment" name="const-psvi-comment"></a>6.6.4
Construction from a PSVI</h4>
<p>Construction from a PSVI is identical to construction from the
Infoset.</p>
</div>
<div class="div3">
<h4><a id="infoset-mapping-comment" name=
"infoset-mapping-comment"></a>6.6.5 Infoset Mapping</h4>
<p>A Comment Node maps to a <b class="info-item">comment
information item</b>.</p>
<p>The following properties are specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[content]</b></dt>
<dd>
<p>The value of the <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[parent]</b></dt>
<dd>
<ul>
<li>
<p>If this node is the root of the infoset mapping operation,
<em>unknown</em>.</p>
</li>
<li>
<p>If this node has a parent, the information item that corresponds
to the node returned by <span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span>.</p>
</li>
<li>
<p>Otherwise <em>no value</em>.</p>
</li>
</ul>
</dd>
</dl>
</div>
</div>
<div class="div2">
<h3><a id="TextNode" name="TextNode"></a>6.7 Text Nodes</h3>
<div class="div3">
<h4><a id="TextNodeOverview" name="TextNodeOverview"></a>6.7.1
Overview</h4>
<p>Text Nodes encapsulate XML character content. Text has the
following properties:</p>
<ul>
<li>
<p><b class="dm-node-prop">content</b></p>
</li>
<li>
<p><b class="dm-node-prop">parent</b>, possibly empty.</p>
</li>
</ul>
<p>Text Nodes <strong>must</strong> satisfy the following
constraint:</p>
<ol class="enumar">
<li>
<p>If the <b class="dm-node-prop">parent</b> of a text node is not
empty, the Text Node <strong>must not</strong> contain the
zero-length string as its <b class="dm-node-prop">content</b>.</p>
</li>
</ol>
<p>In addition, Document and Element Nodes impose the constraint
that two consecutive Text Nodes can never occur as adjacent
siblings. When a Document or Element Node is constructed, Text
Nodes that would be adjacent <strong>must</strong> be combined into
a single Text Node. If the resulting Text Node is empty, it
<strong>must</strong> never be placed among the children of its
parent, it is simply discarded.</p>
</div>
<div class="div3">
<h4><a id="TextNodeAccessors" name="TextNodeAccessors"></a>6.7.2
Accessors</h4>
<dl>
<dt class="label"><span class="function"><a href=
"#dm-attributes"><span class=
"prefix">dm:</span>attributes</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span></dt>
<dd>
<p>If the Text Node has a parent, returns the value of the
<span class="function"><a href="#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span> of its parent; otherwise,
returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-children"><span class=
"prefix">dm:</span>children</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-document-uri"><span class=
"prefix">dm:</span>document-uri</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-id"><span class="prefix">dm:</span>is-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-is-idrefs"><span class=
"prefix">dm:</span>is-idrefs</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-bindings"><span class=
"prefix">dm:</span>namespace-bindings</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-namespace-nodes"><span class=
"prefix">dm:</span>namespace-nodes</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-nilled"><span class="prefix">dm:</span>nilled</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-kind"><span class=
"prefix">dm:</span>node-kind</a></span></dt>
<dd>
<p>Returns “<code>text</code>”.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">parent</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">content</b>
property.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-type-name"><span class=
"prefix">dm:</span>type-name</a></span></dt>
<dd>
<p>Returns <code>xs:untypedAtomic</code>.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-typed-value"><span class=
"prefix">dm:</span>typed-value</a></span></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">content</b>
property as an <code>xs:untypedAtomic</code>.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-public-id"><span class=
"prefix">dm:</span>unparsed-entity-public-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt class="label"><span class="function"><a href=
"#dm-unparsed-entity-system-id"><span class=
"prefix">dm:</span>unparsed-entity-system-id</a></span></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div class="div3">
<h4><a id="const-infoset-text" name="const-infoset-text"></a>6.7.3
Construction from an Infoset</h4>
<p>The <b class="info-item">character information items</b> are
required. A Text Node is constructed for each maximal sequence of
<b class="info-item">character information items</b> in document
order.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[character code]</b> and <b class=
"infoset-property">[parent]</b>.</p>
<p>The following infoset properties are optional: <b class=
"infoset-property">[element content whitespace]</b>.</p>
<p>A sequence of <b class="info-item">character information
items</b> is maximal if it satisfies the following constraints:</p>
<ol class="enumar">
<li>
<p>All of the information items in the sequence have the same
parent.</p>
</li>
<li>
<p>The sequence consists of adjacent <b class="info-item">character
information items</b> uninterrupted by other types of information
item.</p>
</li>
<li>
<p>No other such sequence exists that contains any of the same
<b class="info-item">character information items</b> and is
longer.</p>
</li>
</ol>
<p>Text Node properties are derived from the infoset as
follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">content</b></dt>
<dd>
<p>A string comprised of characters that correspond to the
<b class="infoset-property">[character code]</b> properties of each
of the <b class="info-item">character information items</b>.</p>
<p>If the resulting Text Node consists entirely of whitespace and
the <b class="infoset-property">[element content whitespace]</b>
property of the <b class="info-item">character information
items</b> used to construct this node are <code>true</code>, the
<b class="dm-node-prop">content</b> of the Text Node is the
zero-length string. Text Nodes are only allowed to be empty if they
have no parents; an empty Text Node will be discarded when its
parent is constructed, if it has a parent.</p>
<p>The content of the Text Node is not necessarily normalized as
described in the <a href="#charmod">[Character Model]</a>. It is
the responsibility of data producers to provide normalized text,
and the responsibility of applications to make sure that operations
do not de-normalize text.</p>
</dd>
<dt class="label"><b class="dm-node-prop">parent</b></dt>
<dd>
<p>The node corresponding to the value of the <b class=
"infoset-property">[parent]</b> property.</p>
</dd>
</dl>
</div>
<div class="div3">
<h4><a id="const-psvi-text" name="const-psvi-text"></a>6.7.4
Construction from a PSVI</h4>
<p>For Text Nodes constructed from the <b class=
"infoset-property">[schema normalized value]</b> of elements,
<b class="dm-node-prop">content</b> contains the value of the
<b class="infoset-property">[schema normalized value]</b>.</p>
<p>Otherwise, construction from a PSVI is the same as construction
from the Infoset except for the <b class="dm-node-prop">content</b>
property. When constructing the <b class="dm-node-prop">content</b>
property, <b class="infoset-property">[element content
whitespace]</b> is not used to test if whitespace is collapsed.
Instead, if the resulting Text Node consists entirely of whitespace
and the <b class="info-item">character information items</b> used
to construct this node have a parent and that parent is an element
and its {content type} is not “<code>mixed</code>”, then the
<b class="dm-node-prop">content</b> of the Text Node is the
zero-length string.</p>
<p>Text Nodes are only allowed to be empty if they have no parents;
an empty Text Node will be discarded when its parent is
constructed, if it has a parent.</p>
</div>
<div class="div3">
<h4><a id="infoset-mapping-text" name=
"infoset-mapping-text"></a>6.7.5 Infoset Mapping</h4>
<p>A Text Node maps to a sequence of <b class="info-item">character
information items</b>.</p>
<p>Each character of the <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> of the node is converted
into a <b class="info-item">character information item</b> as
specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[character
code]</b></dt>
<dd>
<p>The Unicode code point value of the character.</p>
</dd>
<dt class="label"><b class="infoset-property">[parent]</b></dt>
<dd>
<ul>
<li>
<p>If this node is the root of the infoset mapping operation,
<em>unknown</em>.</p>
</li>
<li>
<p>If this node has a parent, the information item that corresponds
to the node returned by <span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span>.</p>
</li>
<li>
<p>Otherwise <em>no value</em>.</p>
</li>
</ul>
</dd>
<dt class="label"><b class="infoset-property">[element content
whitespace]</b></dt>
<dd>
<p><em>Unknown</em>.</p>
</dd>
</dl>
<p>This sequence of characters constitutes the infoset mapping.</p>
</div>
</div>
</div>
<div class="div1">
<h2><a id="conformance" name="conformance"></a>7 Conformance</h2>
<p>The data model is intended primarily as a component that can be
used by other specifications. Therefore, the data model relies on
specifications that use it (such as <a href="#xpath20">[XML Path
Language (XPath) 2.0 (Second Edition)]</a>, <a href="#xslt20">[XSLT
2.0 (Second Edition)]</a>, and <a href="#xquery">[XQuery]</a>) to
specify conformance criteria for the data model in their respective
environments. Specifications that set conformance criteria for
their use of the data model must not relax the constraints
expressed in this specification.</p>
<p>Authors of conformance criteria for the use of the data model
should pay particular attention to the following features of the
data model:</p>
<ol class="enumar">
<li>
<p>Support for the normative construction from an infoset described
in <a href="#const-infoset"><b>3.2 Construction from an
Infoset</b></a>.</p>
</li>
<li>
<p>Support for the normative construction from a PSVI described in
<a href="#const-psvi"><b>3.3 Construction from a PSVI</b></a>.</p>
</li>
<li>
<p>Support for XML 1.0 and XML 1.1.</p>
</li>
<li>
<p>How namespaces are supported, through nodes or through the
alternative, implementation-dependent representation.</p>
</li>
</ol>
</div>
</div>
<div class="back">
<div class="div1">
<h2><a id="infoset-conformance" name="infoset-conformance"></a>A
XML Information Set Conformance</h2>
<p>This specification conforms to the XML Information Set <a href=
"#xml-infoset">[Infoset]</a>. The following information items
<strong>must</strong> be exposed by the infoset producer to
construct a data model unless they are explicitly identified as
optional:</p>
<ul>
<li>
<p>The <b class="info-item">Document Information Item</b> with
<b class="infoset-property">[base URI]</b>, <b class=
"infoset-property">[children]</b>, and, optionally, <b class=
"infoset-property">[unparsed entities]</b> properties. If the
<b class="infoset-property">[unparsed entities]</b> property is
supported, the <b class="info-item">Unparsed Entity Information
Items</b> must also be supported.</p>
</li>
<li>
<p><b class="info-item">Element Information Items</b> with
<b class="infoset-property">[base URI]</b>, <b class=
"infoset-property">[children]</b>, <b class=
"infoset-property">[attributes]</b>, <b class=
"infoset-property">[in-scope namespaces]</b>, <b class=
"infoset-property">[prefix]</b>, <b class="infoset-property">[local
name]</b>, <b class="infoset-property">[namespace name]</b>,
<b class="infoset-property">[parent]</b> properties.</p>
</li>
<li>
<p><b class="info-item">Attribute Information Items</b> with
<b class="infoset-property">[namespace name]</b>, <b class=
"infoset-property">[prefix]</b>, <b class="infoset-property">[local
name]</b>, <b class="infoset-property">[normalized value]</b>,
<b class="infoset-property">[attribute type]</b>, and <b class=
"infoset-property">[owner element]</b> properties.</p>
</li>
<li>
<p><b class="info-item">Character Information Items</b> with
<b class="infoset-property">[character code]</b>, <b class=
"infoset-property">[parent]</b>, and, optionally, <b class=
"infoset-property">[element content whitespace]</b> properties.</p>
</li>
<li>
<p><b class="info-item">Processing Instruction Information
Items</b> with <b class="infoset-property">[base URI]</b>,
<b class="infoset-property">[target]</b>, <b class=
"infoset-property">[content]</b> and <b class=
"infoset-property">[parent]</b> properties.</p>
</li>
<li>
<p><b class="info-item">Comment Information Items</b> with
<b class="infoset-property">[content]</b> and <b class=
"infoset-property">[parent]</b> properties.</p>
</li>
<li>
<p><b class="info-item">Namespace Information Items</b> with
<b class="infoset-property">[prefix]</b> and <b class=
"infoset-property">[namespace name]</b> properties.</p>
</li>
</ul>
<p>Other information items and properties made available by the
Infoset processor are ignored. In addition to the properties above,
the following PSVI properties are required on <b class=
"info-item">Element Information Items</b> and <b class=
"info-item">Attribute Information Items</b> if the data model is
constructed from a PSVI:</p>
<ul>
<li>
<p><b class="infoset-property">[validity]</b>, <b class=
"infoset-property">[validation attempted]</b>, <b class=
"infoset-property">[type definition]</b>, <b class=
"infoset-property">[type definition namespace]</b>, <b class=
"infoset-property">[type definition name]</b>, <b class=
"infoset-property">[type definition anonymous]</b>, <b class=
"infoset-property">[nil]</b>, <b class="infoset-property">[member
type definition]</b>, <b class="infoset-property">[member type
definition namespace]</b>, <b class="infoset-property">[member type
definition name]</b>, <b class="infoset-property">[member type
definition anonymous]</b> and <b class="infoset-property">[schema
normalized value]</b>.</p>
</li>
</ul>
</div>
<div class="div1">
<h2><a id="references" name="references"></a>B References</h2>
<div class="div2">
<h3><a id="normative-references" name=
"normative-references"></a>B.1 Normative References</h3>
<dl>
<dt class="label"><span><a id="xml-infoset" name=
"xml-infoset"></a>Infoset</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xml-infoset/"><cite>XML
Information Set (Second Edition)</cite></a>, John Cowan and Richard
Tobin, Editors. World Wide Web Consortium, 04&#160;Feb&#160;2004.
This version is
http://www.w3.org/TR/2004/REC-xml-infoset-20040204/. The <a href=
"http://www.w3.org/TR/xml-infoset/">latest version</a> is available
at http://www.w3.org/TR/xml-infoset/.</div>
</dd>
<dt class="label"><span><a id="xml-names" name=
"xml-names"></a>Namespaces in XML</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xml-names/"><cite>Namespaces in
XML 1.0 (Second Edition)</cite></a>, Richard Tobin, Dave Hollander,
Tim Bray, and Andrew Layman, Editors. World Wide Web Consortium,
16&#160;Aug&#160;2006. This version is
http://www.w3.org/TR/2006/REC-xml-names-20060816/. The <a href=
"http://www.w3.org/TR/xml-names/">latest version</a> is available
at http://www.w3.org/TR/xml-names/.</div>
</dd>
<dt class="label"><span><a id="xml-names11" name=
"xml-names11"></a>Namespaces in XML 1.1</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xml-names11/"><cite>Namespaces
in XML 1.1 (Second Edition)</cite></a>, Andrew Layman, Dave
Hollander, Richard Tobin, and Tim Bray, Editors. World Wide Web
Consortium, 16&#160;Aug&#160;2006. This version is
http://www.w3.org/TR/2006/REC-xml-names11-20060816. The <a href=
"http://www.w3.org/TR/xml-names11/">latest version</a> is available
at http://www.w3.org/TR/xml-names11/.</div>
</dd>
<dt class="label"><span><a id="xml-id" name=
"xml-id"></a>xml:id</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xml-id/"><cite>xml:id Version
1.0</cite></a>, Jonathan Marsh, Daniel Veillard, and Norman Walsh,
Editors. World Wide Web Consortium, 09&#160;Sep&#160;2005. This
version is http://www.w3.org/TR/2005/REC-xml-id-20050909/. The
<a href="http://www.w3.org/TR/xml-id/">latest version</a> is
available at http://www.w3.org/TR/xml-id/.</div>
</dd>
<dt class="label"><span><a id="xpath20" name="xpath20"></a>XML Path
Language (XPath) 2.0 (Second Edition)</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xpath20/"><cite>XML Path
Language (XPath) 2.0 (Second Edition)</cite></a>, Don Chamberlin,
Jonathan Robie, Anders Berglund, Scott Boag, <em>et. al.</em>,
Editors. World Wide Web Consortium, 14 December 2010. This version
is http://www.w3.org/TR/2010/REC-xpath20-20101214/. The <a href=
"http://www.w3.org/TR/xpath20/">latest version</a> is available at
http://www.w3.org/TR/xpath20/.</div>
</dd>
<dt class="label"><span><a id="xpath-functions" name=
"xpath-functions"></a>XQuery 1.0 and XPath 2.0 Functions and
Operators (Second Edition)</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xpath-functions/"><cite>XQuery
1.0 and XPath 2.0 Functions and Operators (Second
Edition)</cite></a>, Ashok Malhotra, Jim Melton, Norman Walsh, and
Michael Kay, Editors. World Wide Web Consortium, 14 December 2010.
This version is
http://www.w3.org/TR/2010/REC-xpath-functions-20101214/. The
<a href="http://www.w3.org/TR/xpath-functions/">latest version</a>
is available at http://www.w3.org/TR/xpath-functions/.</div>
</dd>
<dt class="label"><span><a id="xmlschema-1" name=
"xmlschema-1"></a>Schema Part 1</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xmlschema-1/"><cite>XML Schema
Part 1: Structures Second Edition</cite></a>, Henry S. Thompson,
Murray Maloney, David Beech, and Noah Mendelsohn, Editors. World
Wide Web Consortium, 28&#160;Oct&#160;2004. This version is
http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/. The <a href=
"http://www.w3.org/TR/xmlschema-1/">latest version</a> is available
at http://www.w3.org/TR/xmlschema-1/.</div>
</dd>
<dt class="label"><span><a id="xmlschema-2" name=
"xmlschema-2"></a>Schema Part 2</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xmlschema-2/"><cite>XML Schema
Part 2: Datatypes Second Edition</cite></a>, Paul V. Biron and
Ashok Malhotra, Editors. World Wide Web Consortium,
28&#160;Oct&#160;2004. This version is
http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/. The <a href=
"http://www.w3.org/TR/xmlschema-2/">latest version</a> is available
at http://www.w3.org/TR/xmlschema-2/.</div>
</dd>
<dt class="label"><span><a id="xslt-xquery-serialization" name=
"xslt-xquery-serialization"></a>XSLT 2.0 and XQuery 1.0
Serialization (Second Edition)</span></dt>
<dd>
<div><a href=
"http://www.w3.org/TR/xslt-xquery-serialization/"><cite>XSLT 2.0
and XQuery 1.0 Serialization (Second Edition)</cite></a>, Scott
Boag, Michael Kay, Joanne Tong, Norman Walsh, and Henry Zongaro,
Editors. World Wide Web Consortium, 14 December 2010. This version
is
http://www.w3.org/TR/2010/REC-xslt-xquery-serialization-20101214/.
The <a href=
"http://www.w3.org/TR/xslt-xquery-serialization/">latest
version</a> is available at
http://www.w3.org/TR/xslt-xquery-serialization/.</div>
</dd>
<dt class="label"><span><a id="xquery-semantics" name=
"xquery-semantics"></a>XQuery 1.0 and XPath 2.0 Formal Semantics
(Second Edition)</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xquery-semantics/"><cite>XQuery
1.0 and XPath 2.0 Formal Semantics (Second Edition)</cite></a>,
Jérôme Siméon, Michael Dyck, Denise Draper, Peter Frankhauser,
<em>et. al.</em>, Editors. World Wide Web Consortium, 14 December
2010. This version is
http://www.w3.org/TR/2010/REC-xquery-semantics-20101214/. The
<a href="http://www.w3.org/TR/xquery-semantics/">latest version</a>
is available at http://www.w3.org/TR/xquery-semantics/.</div>
</dd>
<dt class="label"><span><a id="RFC2119" name="RFC2119"></a>RFC
2119</span></dt>
<dd>
<div><a href="http://www.ietf.org/rfc/rfc2119.txt"><cite>Key words
for use in RFCs to Indicate Requirement Levels</cite></a>, S.
Bradner. Network Working Group, IETF, Mar 1997.</div>
</dd>
<dt class="label"><span><a id="RFC3986" name="RFC3986"></a>RFC
3986</span></dt>
<dd>
<div><a href="http://www.ietf.org/rfc/rfc3986.txt"><cite>Uniform
Resource Identifier (URI): Generic Syntax</cite></a>, T.
Berners-Lee, R. Fielding, and L. Masinter. Network Working Group,
IETF, Jan 2005.</div>
</dd>
<dt class="label"><span><a id="RFC3987" name="RFC3987"></a>RFC
2987</span></dt>
<dd>
<div><a href=
"http://www.ietf.org/rfc/rfc3987.txt"><cite>Internationalized
Resource Identifiers (IRIs)</cite></a>, M. Duerst and M. Suignard.
Network Working Group, IETF, Jan 2005.</div>
</dd>
<dt class="label"><span><a id="charmod" name=
"charmod"></a>Character Model</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/charmod/"><cite>Character Model
for the World Wide Web 1.0: Fundamentals</cite></a>, François
Yergeau, Richard Ishida, Martin J. Dürst, <em>et. al.</em>,
Editors. World Wide Web Consortium, 15&#160;Feb&#160;2005. This
version is http://www.w3.org/TR/2005/REC-charmod-20050215/. The
<a href="http://www.w3.org/TR/charmod/">latest version</a> is
available at http://www.w3.org/TR/charmod/.</div>
</dd>
</dl>
</div>
<div class="div2">
<h3><a id="informative-references" name=
"informative-references"></a>B.2 Other References</h3>
<dl>
<dt class="label"><span><a id="XQDM00" name="XQDM00"></a>XML Query
Data Model</span></dt>
<dd>
<div><a href=
"http://www.w3.org/TR/2001/WD-query-datamodel-20010215/"><cite>XML
Query Data Model</cite></a>, Mary Fernández and Jonathan Robie,
Editors. World Wide Web Consortium, 15 Feb 2001.</div>
</dd>
<dt class="label"><span><a id="xmlbase" name="xmlbase"></a>XML
Base</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xmlbase/"><cite>XML Base (Second
Edition)</cite></a>, Richard Tobin and Jonathan Marsh, Editors.
World Wide Web Consortium, 28&#160;Jan&#160;2009. This version is
http://www.w3.org/TR/2009/REC-xmlbase-20090128/. The <a href=
"http://www.w3.org/TR/xmlbase/">latest version</a> is available at
http://www.w3.org/TR/xmlbase/.</div>
</dd>
<dt class="label"><span><a id="xpath" name="xpath"></a>XPath
1.0</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xpath/"><cite>XML Path Language
(XPath) Version 1.0</cite></a>, James Clark and Steven DeRose,
Editors. World Wide Web Consortium, 16&#160;Nov&#160;1999. This
version is http://www.w3.org/TR/1999/REC-xpath-19991116/. The
<a href="http://www.w3.org/TR/xpath/">latest version</a> is
available at http://www.w3.org/TR/xpath/.</div>
</dd>
<dt class="label"><span><a id="xpath20req" name=
"xpath20req"></a>XPath 2.0 Requirements</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xpath20req/"><cite>XPath
Requirements Version 2.0</cite></a>, Mary Fernández, K Karun, and
Mark Scardina, Editors. World Wide Web Consortium,
3&#160;Jun&#160;2005. This version is
http://www.w3.org/TR/2005/WD-xpath20req-20050603/. The <a href=
"http://www.w3.org/TR/xpath20req/">latest version</a> is available
at http://www.w3.org/TR/xpath20req/.</div>
</dd>
<dt class="label"><span><a id="xslt20" name="xslt20"></a>XSLT 2.0
(Second Edition)</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xslt20/"><cite>XSL
Transformations (XSLT) Version 2.0 (Second Edition)</cite></a>
(planned), Michael Kay, Editor. World Wide Web Consortium, 14
December 2010. The <a href="http://www.w3.org/TR/xslt20/">latest
version</a> is available at http://www.w3.org/TR/xslt20/.</div>
</dd>
<dt class="label"><span><a id="XQWG" name="XQWG"></a>XML Query
Working Group</span></dt>
<dd>
<div><a href="http://www.w3.org/XML/Query/"><cite>XML Query Working
Group</cite></a>, World Wide Web Consortium. Home page:
http://www.w3.org/XML/Query</div>
</dd>
<dt class="label"><span><a id="XSLWG" name="XSLWG"></a>XSL Working
Group</span></dt>
<dd>
<div><a href="http://www.w3.org/Style/XSL/"><cite>XSL Working
Group</cite></a>, World Wide Web Consortium. Home page:
http://www.w3.org/Style/XSL/</div>
</dd>
<dt class="label"><span><a id="xquery" name=
"xquery"></a>XQuery</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xquery/"><cite>XQuery 1.0: An
XML Query Language (Second Edition)</cite></a>, Don Chamberlin,
Jonathan Robie, Anders Berglund, Scott Boag, <em>et. al.</em>,
Editors. World Wide Web Consortium, 14 December 2010. This version
is http://www.w3.org/TR/2010/REC-xquery-20101214/. The <a href=
"http://www.w3.org/TR/xquery/">latest version</a> is available at
http://www.w3.org/TR/xquery/.</div>
</dd>
<dt class="label"><span><a id="xquery-requirements" name=
"xquery-requirements"></a>XML Query Requirements</span></dt>
<dd>
<div><a href="http://www.w3.org/TR/xquery-requirements/"><cite>XML
Query (XQuery) Requirements</cite></a>, Don Chamberlin, Peter
Fankhauser, Massimo Marchiori, and Jonathan Robie, Editors. World
Wide Web Consortium, 3&#160;Jun&#160;2005. This version is
http://www.w3.org/TR/2005/WD-xquery-requirements-20050603/. The
<a href="http://www.w3.org/TR/xquery-requirements/">latest
version</a> is available at
http://www.w3.org/TR/xquery-requirements/.</div>
</dd>
<dt class="label"><span><a id="ISO8601" name="ISO8601"></a>ISO
8601</span></dt>
<dd>
<div>ISO (International Organization for Standardization).
<em>Representations of dates and times, 2000-08-03.</em> Available
from: <a href="http://www.iso.org/">http://www.iso.org/</a></div>
</dd>
</dl>
</div>
</div>
<div class="div1">
<h2><a id="xdtschema" name="xdtschema"></a>C Schema for the
Extended XS Namespace</h2>
<p>The following schema defines the additional types in the
<code>xs:</code> namespace identified by this document.</p>
<p>You can retrieve the normative schema for this namespace from
<a href=
"http://www.w3.org/2007/xpath-datatypes">http://www.w3.org/2007/xpath-datatypes</a>.</p>
<div class="exampleInner">
<pre>
&lt;?xml version='1.0'?&gt;
&lt;!--
This is an XML Schema document for the XML Schema namespace,
http://www.w3.org/2001/XMLSchema, that has been extended to
include definitions for the xs:dayTimeDuration and
xs:yearMonthDuration types.
The other xs: types defined in XDM are not described here because
xs:untyped and xs:anyAtomicType are special types that cannot be
properly defined using XML Schema itself and because xs:untypedAtomic
should not be used for validation, but only used for unvalidated
elements and attributes.
--&gt;
&lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xml:lang="en"&gt;
&lt;xs:include schemaLocation="http://www.w3.org/2001/XMLSchema.xsd"/&gt;
&lt;xs:simpleType name='dayTimeDuration'&gt;
&lt;xs:annotation&gt;
&lt;xs:documentation
source="http://www.w3.org/TR/xpath-datamodel#dayTimeDuration"/&gt;
&lt;/xs:annotation&gt;
&lt;xs:restriction base='xs:duration'&gt;
&lt;xs:pattern value="[^YM]*[DT].*"/&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
&lt;xs:simpleType name='yearMonthDuration'&gt;
&lt;xs:annotation&gt;
&lt;xs:documentation
source="http://www.w3.org/TR/xpath-datamodel#yearMonthDuration"/&gt;
&lt;/xs:annotation&gt;
&lt;xs:restriction base='xs:duration'&gt;
&lt;xs:pattern value="[^DT]*"/&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
&lt;/xs:schema&gt;
</pre></div>
</div>
<div class="div1">
<h2><a id="glossary" name="glossary"></a>D Glossary
(Non-Normative)</h2>
<table summary="Glossary" width="100%">
<tr>
<td valign="top" width="20%"><a href=
"#dt-anonymous-type-name">anonymous type name</a></td>
<td valign="top">
<p>An <b>anonymous type name</b> is an implementation dependent,
unique type name provided by the processor for every anonymous type
declared in the schemas available.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href="#dt-atomic-type">atomic
type</a></td>
<td valign="top">
<p>An <b>atomic type</b> is a <a title="primitive simple type"
href="#dt-primitive-simple-type">primitive simple type</a> or a
type derived by restriction from another atomic type.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href="#dt-atomic-value">atomic
value</a></td>
<td valign="top">
<p>An <b>atomic value</b> is a value in the value space of an
<a title="atomic type" href="#dt-atomic-type">atomic type</a> and
is labeled with the name of that atomic type.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href=
"#dt-document">document</a></td>
<td valign="top">
<p>A tree whose root node is a Document Node is referred to as a
<b>document</b>.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href="#dt-document-order">document
order</a></td>
<td valign="top">
<p>A <b>document order</b> is defined among all the nodes
accessible during a given query or transformation. Document order
is a total ordering, although the relative order of some nodes is
implementation-dependent. Informally, document order is the order
in which nodes appear in the XML serialization of a document.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href=
"#dt-expanded-qname">expanded-QName</a></td>
<td valign="top">
<p>An <b>expanded-QName</b> is a set of three values consisting of
a possibly empty prefix, a possibly empty namespace URI, and a
local name.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href=
"#dt-fragment">fragment</a></td>
<td valign="top">
<p>A tree whose root node is not a Document Node is referred to as
a <b>fragment</b>.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href=
"#dt-implementation-defined">implementation defined</a></td>
<td valign="top">
<p><b>Implementation-defined</b> indicates an aspect that may
differ between implementations, but must be specified by the
implementor for each particular implementation.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href=
"#dt-implementation-dependent">implementation dependent</a></td>
<td valign="top">
<p><b>Implementation-dependent</b> indicates an aspect that may
differ between implementations, is not specified by this or any W3C
specification, and is not required to be specified by the
implementor for any particular implementation.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href=
"#dt-incompletely-validated">incompletely validated</a></td>
<td valign="top">
<p>An <b>incompletely validated</b> document is an XML document
that has a corresponding schema but whose schema-validity
assessment has resulted in one or more element or attribute
information items being assigned values other than 'valid' for the
<b class="infoset-property">[validity]</b> property in the
PSVI.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href="#dt-instance">instance of the
data model</a></td>
<td valign="top">
<p>Every <b>instance of the data model</b> is a <a title="sequence"
href="#dt-sequence">sequence</a>.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href="#dt-item">item</a></td>
<td valign="top">
<p>An <b>item</b> is either a <a title="Node" href=
"#dt-node">node</a> or an <a title="atomic value" href=
"#dt-atomic-value">atomic value</a></p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href="#dt-root-node">item</a></td>
<td valign="top">
<p>The topmost node of a tree is called the <b>root node</b>.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href="#dt-node">Node</a></td>
<td valign="top">
<p>There are seven kinds of <b>Nodes</b> in the data model:
<a href="#DocumentNode">document</a>, <a href=
"#ElementNode">element</a>, <a href="#AttributeNode">attribute</a>,
<a href="#TextNode">text</a>, <a href=
"#NamespaceNode">namespace</a>, <a href=
"#ProcessingInstructionNode">processing instruction</a>, and
<a href="#CommentNode">comment</a>.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href=
"#dt-primitive-simple-type">primitive simple type</a></td>
<td valign="top">
<p>There are 21 <b>primitive simple types</b>: the 19 defined in
<a href=
"http://www.w3.org/TR/xmlschema-2/#built-in-primitive-datatypes">Section
3.2 Primitive datatypes</a><sup><small>XS2</small></sup> of
<a href="#xmlschema-2">[Schema Part 2]</a> and
<code>xs:untypedAtomic</code> and <code>xs:anyAtomicType</code></p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href=
"#dt-sequence">sequence</a></td>
<td valign="top">
<p>A <b>sequence</b> is an ordered collection of zero or more
<a title="item" href="#dt-item">items</a>.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href="#dt-stable">stable</a></td>
<td valign="top">
<p>Document order is <b>stable</b>, which means that the relative
order of two nodes will not change during the processing of a given
query or transformation, even if this order is
implementation-dependent.</p>
</td>
</tr>
<tr>
<td valign="top" width="20%"><a href=
"#dt-undefined">undefined</a></td>
<td valign="top">
<p>In certain situations a value is said to be <b>undefined</b>
(for example, the typed value of an element node). This term
indicates that the property in question has no value and that any
attempt to use its value results in an error.</p>
</td>
</tr>
</table>
</div>
<div class="div1">
<h2><a id="example" name="example"></a>E Example
(Non-Normative)</h2>
<p>The following XML document is used to illustrate the information
contained in a data model:</p>
<div class="exampleInner">
<pre>
&lt;?xml version="1.0"?&gt;
&lt;?xml-stylesheet type="text/xsl" href="dm-example.xsl"?&gt;
&lt;catalog xmlns="http://www.example.com/catalog"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/catalog
dm-example.xsd"
xml:lang="en"
version="0.1"&gt;
&lt;!-- This example is for data model illustration only.
It does not demonstrate good schema design. --&gt;
&lt;tshirt code="T1534017" label=" Staind : Been Awhile "
xlink:href="http://example.com/0,,1655091,00.html"
sizes="M L XL"&gt;
&lt;title&gt; Staind: Been Awhile Tee Black (1-sided) &lt;/title&gt;
&lt;description&gt;
&lt;html:p&gt;
Lyrics from the hit song 'It's Been Awhile'
are shown in white, beneath the large
'Flock &amp;amp; Weld' Staind logo.
&lt;/html:p&gt;
&lt;/description&gt;
&lt;price&gt; 25.00 &lt;/price&gt;
&lt;/tshirt&gt;
&lt;album code="A1481344" label=" Staind : Its Been A While "
formats="CD"&gt;
&lt;title&gt; It's Been A While &lt;/title&gt;
&lt;description xsi:nil="true" /&gt;
&lt;price currency="USD"&gt; 10.99 &lt;/price&gt;
&lt;artist&gt; Staind &lt;/artist&gt;
&lt;/album&gt;
&lt;/catalog&gt;
</pre></div>
<p>The document is associated with the URI
"http://www.example.com/catalog.xml", and is valid with respect to
the following XML schema:</p>
<div class="exampleInner">
<pre>
&lt;?xml version="1.0"?&gt;
&lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:cat="http://www.example.com/catalog"
xmlns:xlink="http://www.w3.org/1999/xlink"
targetNamespace="http://www.example.com/catalog"
elementFormDefault="qualified"&gt;
&lt;xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd" /&gt;
&lt;xs:import namespace="http://www.w3.org/1999/xlink"
schemaLocation="http://www.cs.rpi.edu/~puninj/XGMML/xlinks-2001.xsd" /&gt;
&lt;xs:element name="catalog"&gt;
&lt;xs:complexType&gt;
&lt;xs:sequence&gt;
&lt;xs:element ref="cat:_item" maxOccurs="unbounded" /&gt;
&lt;/xs:sequence&gt;
&lt;xs:attribute name="version" type="xs:string" fixed="0.1" use="required" /&gt;
&lt;xs:attribute ref="xml:base" /&gt;
&lt;xs:attribute ref="xml:lang" /&gt;
&lt;/xs:complexType&gt;
&lt;/xs:element&gt;
&lt;xs:element name="_item" type="cat:itemType" abstract="true" /&gt;
&lt;xs:complexType name="itemType"&gt;
&lt;xs:sequence&gt;
&lt;xs:element name="title" type="xs:token" /&gt;
&lt;xs:element name="description" type="cat:description" nillable="true" /&gt;
&lt;xs:element name="price" type="cat:price" maxOccurs="unbounded" /&gt;
&lt;/xs:sequence&gt;
&lt;xs:attribute name="label" type="xs:token" /&gt;
&lt;xs:attribute name="code" type="xs:ID" use="required" /&gt;
&lt;xs:attributeGroup ref="xlink:simpleLink" /&gt;
&lt;/xs:complexType&gt;
&lt;xs:element name="tshirt" type="cat:tshirtType" substitutionGroup="cat:_item" /&gt;
&lt;xs:complexType name="tshirtType"&gt;
&lt;xs:complexContent&gt;
&lt;xs:extension base="cat:itemType"&gt;
&lt;xs:attribute name="sizes" type="cat:clothesSizes" use="required" /&gt;
&lt;xs:attribute ref="xml:lang" use="optional"/&gt;
&lt;/xs:extension&gt;
&lt;/xs:complexContent&gt;
&lt;/xs:complexType&gt;
&lt;xs:simpleType name="clothesSizes"&gt;
&lt;xs:union memberTypes="cat:sizeList"&gt;
&lt;xs:simpleType&gt;
&lt;xs:restriction base="xs:token"&gt;
&lt;xs:enumeration value="oneSize" /&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
&lt;/xs:union&gt;
&lt;/xs:simpleType&gt;
&lt;xs:simpleType name="sizeList"&gt;
&lt;xs:restriction&gt;
&lt;xs:simpleType&gt;
&lt;xs:list itemType="cat:clothesSize" /&gt;
&lt;/xs:simpleType&gt;
&lt;xs:minLength value="1" /&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
&lt;xs:simpleType name="clothesSize"&gt;
&lt;xs:union memberTypes="cat:numberedSize cat:categorySize" /&gt;
&lt;/xs:simpleType&gt;
&lt;xs:simpleType name="numberedSize"&gt;
&lt;xs:restriction base="xs:integer"&gt;
&lt;xs:enumeration value="4" /&gt;
&lt;xs:enumeration value="6" /&gt;
&lt;xs:enumeration value="8" /&gt;
&lt;xs:enumeration value="10" /&gt;
&lt;xs:enumeration value="12" /&gt;
&lt;xs:enumeration value="14" /&gt;
&lt;xs:enumeration value="16" /&gt;
&lt;xs:enumeration value="18" /&gt;
&lt;xs:enumeration value="20" /&gt;
&lt;xs:enumeration value="22" /&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
&lt;xs:simpleType name="categorySize"&gt;
&lt;xs:restriction base="xs:token"&gt;
&lt;xs:enumeration value="XS" /&gt;
&lt;xs:enumeration value="S" /&gt;
&lt;xs:enumeration value="M" /&gt;
&lt;xs:enumeration value="L" /&gt;
&lt;xs:enumeration value="XL" /&gt;
&lt;xs:enumeration value="XXL" /&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
&lt;xs:element name="album" type="cat:albumType" substitutionGroup="cat:_item" /&gt;
&lt;xs:complexType name="albumType"&gt;
&lt;xs:complexContent&gt;
&lt;xs:extension base="cat:itemType"&gt;
&lt;xs:sequence&gt;
&lt;xs:element name="artist" type="xs:string" /&gt;
&lt;/xs:sequence&gt;
&lt;xs:attribute name="formats" type="cat:formatsType" use="required" /&gt;
&lt;xs:attribute ref="xml:lang" use="optional"/&gt;
&lt;/xs:extension&gt;
&lt;/xs:complexContent&gt;
&lt;/xs:complexType&gt;
&lt;xs:simpleType name="formatsType"&gt;
&lt;xs:list itemType="cat:formatType" /&gt;
&lt;/xs:simpleType&gt;
&lt;xs:simpleType name="formatType"&gt;
&lt;xs:restriction base="xs:token"&gt;
&lt;xs:enumeration value="CD" /&gt;
&lt;xs:enumeration value="MiniDisc" /&gt;
&lt;xs:enumeration value="tape" /&gt;
&lt;xs:enumeration value="vinyl" /&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
&lt;xs:complexType name="description" mixed="true"&gt;
&lt;xs:sequence&gt;
&lt;xs:any namespace="http://www.w3.org/1999/xhtml" processContents="lax"
minOccurs="0" maxOccurs="unbounded" /&gt;
&lt;/xs:sequence&gt;
&lt;xs:attribute ref="xml:lang" use="optional"/&gt;
&lt;/xs:complexType&gt;
&lt;xs:complexType name="price"&gt;
&lt;xs:simpleContent&gt;
&lt;xs:extension base="cat:monetaryAmount"&gt;
&lt;xs:attribute name="currency" type="cat:currencyType" default="USD" /&gt;
&lt;/xs:extension&gt;
&lt;/xs:simpleContent&gt;
&lt;/xs:complexType&gt;
&lt;xs:simpleType name="currencyType"&gt;
&lt;xs:restriction base="xs:token"&gt;
&lt;xs:pattern value="[A-Z]{3}" /&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
&lt;xs:simpleType name="monetaryAmount"&gt;
&lt;xs:restriction base="xs:decimal"&gt;
&lt;xs:fractionDigits value="3" /&gt;
&lt;xs:pattern value="\d+(\.\d{2,3})?" /&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
&lt;/xs:schema&gt;
</pre></div>
<p>The schema is associated with the URI
"http://www.example.com/dm-example.xsd".</p>
<p>This example exposes the data model for a document that has an
associated schema and has been validated successfully against it.
In general, an XML Schema is not required, that is, the data model
can represent a schemaless, well-formed XML document with the rules
described in <a href="#types"><b>2.6 Types</b></a>.</p>
<p>The XML document is represented by the nodes described below.
The value <em>D1</em> represents a Document Node; the values
<em>E1, E2, etc.</em> represent Element Nodes; the values <em>A1,
A2, etc.</em> represent Attribute Nodes; the values <em>N1, N2,
etc.</em> represent Namespace Nodes; the values <em>P1, P2,
etc.</em> represent Processing Instruction Nodes; the values
<em>T1, T2, etc.</em> represent Text Nodes.</p>
<p>For brevity:</p>
<ul>
<li>
<p>Text Nodes in the data model that contain only white space are
not shown.</p>
</li>
<li>
<p>Literal strings are shown in quotes without the
<code>xs:string()</code> constructor</p>
</li>
<li>
<p>Literal decimals are shown without the <code>xs:decimal()</code>
constructor</p>
</li>
<li>
<p>Nodes are referred to using the syntax <code>[nodeID]</code></p>
</li>
<li>
<p>xs:QNames are used with the following prefixes bindings:</p>
<table border="0" summary="Namespace prefixes">
<tbody>
<tr>
<td rowspan="1" colspan="1">xs</td>
<td rowspan="1" colspan="1">http://www.w3.org/2001/XMLSchema</td>
</tr>
<tr>
<td rowspan="1" colspan="1">xsi</td>
<td rowspan="1" colspan="1">
http://www.w3.org/2001/XMLSchema-instance</td>
</tr>
<tr>
<td rowspan="1" colspan="1">cat</td>
<td rowspan="1" colspan="1">http://www.example.com/catalog</td>
</tr>
<tr>
<td rowspan="1" colspan="1">xlink</td>
<td rowspan="1" colspan="1">http://www.w3.org/1999/xlink</td>
</tr>
<tr>
<td rowspan="1" colspan="1">html</td>
<td rowspan="1" colspan="1">http://www.w3.org/1999/xhtml</td>
</tr>
<tr>
<td rowspan="1" colspan="1">anon</td>
<td rowspan="1" colspan="1">An implementation-dependent prefix
associated with <a title="anonymous type name" href=
"#dt-anonymous-type-name">anonymous type names</a></td>
</tr>
</tbody>
</table>
</li>
<li>
<p>The abbreviation "<code>\n</code>" is used in string literals to
represent a newline character; this isn't supported in XPath, but
it makes this presentation clearer.</p>
</li>
<li>
<p>Accessors that return the empty sequence have been omitted.</p>
</li>
<li>
<p>To simplify the presentation, we’re assuming an implementation
that does not expose the namespace axis. Therefore, Namespace Nodes
are shared across multiple elements. See <a href=
"#NamespaceNode"><b>6.4 Namespace Nodes</b></a>.</p>
</li>
</ul>
<table border="0" cellspacing="0" width="80%" summary=
"Datamodel Example">
<col width="150" span="1" />
<tbody>
<tr id="ex-D1" class="document">
<td colspan="3" rowspan="1">// Document node D1</td>
</tr>
<tr class="document">
<td rowspan="1" colspan="1">dm:base-uri(D1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="document">
<td rowspan="1" colspan="1">dm:node-kind(D1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"document"</td>
</tr>
<tr class="document">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(D1)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"&#160; Staind:&#160; Been&#160;
Awhile&#160; Tee&#160; Black&#160; (1-sided)&#160; \n&#160; &#160;
&#160; &#160; &#160; &#160; Lyrics&#160; from&#160; the&#160;
hit&#160; song&#160; 'It's&#160; Been&#160; Awhile'\n&#160; &#160;
&#160; &#160; &#160; &#160; are&#160; shown&#160; in&#160;
white,&#160; beneath&#160; the&#160; large\n&#160; &#160; &#160;
&#160; &#160; &#160; 'Flock&#160; &amp;&#160; Weld'&#160;
Staind&#160; logo.\n&#160; &#160; &#160; &#160; &#160; 25.00&#160;
&#160; It's&#160; Been&#160; A&#160; While&#160; &#160; 10.99&#160;
&#160; Staind&#160; "</td>
</tr>
<tr class="document">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(D1)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic("&#160; Staind:&#160; Been&#160; Awhile&#160;
Tee&#160; Black&#160; (1-sided)&#160; \n&#160; &#160; &#160; &#160;
&#160; &#160; Lyrics&#160; from&#160; the&#160; hit&#160;
song&#160; 'It's&#160; Been&#160; Awhile'\n&#160; &#160; &#160;
&#160; &#160; &#160; are&#160; shown&#160; in&#160; white,&#160;
beneath&#160; the&#160; large\n&#160; &#160; &#160; &#160; &#160;
&#160; 'Flock&#160; &amp;&#160; Weld'&#160; Staind&#160;
logo.\n&#160; &#160; &#160; &#160; &#160; 25.00&#160; &#160;
It's&#160; Been&#160; A&#160; While&#160; &#160; 10.99&#160; &#160;
Staind&#160; ")</td>
</tr>
<tr class="document">
<td rowspan="1" colspan="1">dm:children(D1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E1">E1</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-N1" class="namespace">
<td colspan="3" rowspan="1">// Namespace node N1</td>
</tr>
<tr class="namespace">
<td rowspan="1" colspan="1">dm:node-kind(N1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"namespace"</td>
</tr>
<tr class="namespace">
<td rowspan="1" colspan="1">dm:node-name(N1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "xml")</td>
</tr>
<tr class="namespace">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(N1)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">
"http://www.w3.org/XML/1998/namespace"</td>
</tr>
<tr class="namespace">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(N1)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">
"http://www.w3.org/XML/1998/namespace"</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-N2" class="namespace">
<td colspan="3" rowspan="1">// Namespace node N2</td>
</tr>
<tr class="namespace">
<td rowspan="1" colspan="1">dm:node-kind(N2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"namespace"</td>
</tr>
<tr class="namespace">
<td rowspan="1" colspan="1">dm:node-name(N2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "html")</td>
</tr>
<tr class="namespace">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(N2)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"http://www.w3.org/1999/xhtml"</td>
</tr>
<tr class="namespace">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(N2)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"http://www.w3.org/1999/xhtml"</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-N3" class="namespace">
<td colspan="3" rowspan="1">// Namespace node N3</td>
</tr>
<tr class="namespace">
<td rowspan="1" colspan="1">dm:node-kind(N3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"namespace"</td>
</tr>
<tr class="namespace">
<td rowspan="1" colspan="1">dm:node-name(N3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="namespace">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(N3)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"http://www.example.com/catalog"</td>
</tr>
<tr class="namespace">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(N3)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"http://www.example.com/catalog"</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-N4" class="namespace">
<td colspan="3" rowspan="1">// Namespace node N4</td>
</tr>
<tr class="namespace">
<td rowspan="1" colspan="1">dm:node-kind(N4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"namespace"</td>
</tr>
<tr class="namespace">
<td rowspan="1" colspan="1">dm:node-name(N4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "xlink")</td>
</tr>
<tr class="namespace">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(N4)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"http://www.w3.org/1999/xlink"</td>
</tr>
<tr class="namespace">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(N4)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"http://www.w3.org/1999/xlink"</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-N5" class="namespace">
<td colspan="3" rowspan="1">// Namespace node N5</td>
</tr>
<tr class="namespace">
<td rowspan="1" colspan="1">dm:node-kind(N5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"namespace"</td>
</tr>
<tr class="namespace">
<td rowspan="1" colspan="1">dm:node-name(N5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "xsi")</td>
</tr>
<tr class="namespace">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(N5)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">
"http://www.w3.org/2001/XMLSchema-instance"</td>
</tr>
<tr class="namespace">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(N5)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">
"http://www.w3.org/2001/XMLSchema-instance"</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-P1" class="processing-instruction">
<td colspan="3" rowspan="1">// Processing Instruction node P1</td>
</tr>
<tr class="processing-instruction">
<td rowspan="1" colspan="1">dm:base-uri(P1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="processing-instruction">
<td rowspan="1" colspan="1">dm:node-kind(P1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"processing-instruction"</td>
</tr>
<tr class="processing-instruction">
<td rowspan="1" colspan="1">dm:node-name(P1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "xml-stylesheet")</td>
</tr>
<tr class="processing-instruction">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(P1)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"type="text/xsl"&#160;
href="dm-example.xsl""</td>
</tr>
<tr class="processing-instruction">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(P1)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"type="text/xsl"&#160;
href="dm-example.xsl""</td>
</tr>
<tr class="processing-instruction">
<td rowspan="1" colspan="1">dm:parent(P1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-D1">D1</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-E1" class="element">
<td colspan="3" rowspan="1">// Element node E1</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:base-uri(E1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-kind(E1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"element"</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-name(E1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.example.com/catalog", "catalog")</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(E1)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"&#160; Staind:&#160; Been&#160;
Awhile&#160; Tee&#160; Black&#160; (1-sided)&#160; \n&#160; &#160;
&#160; &#160; &#160; &#160; Lyrics&#160; from&#160; the&#160;
hit&#160; song&#160; 'It's&#160; Been&#160; Awhile'\n&#160; &#160;
&#160; &#160; &#160; &#160; are&#160; shown&#160; in&#160;
white,&#160; beneath&#160; the&#160; large\n&#160; &#160; &#160;
&#160; &#160; &#160; 'Flock&#160; &amp;&#160; Weld'&#160;
Staind&#160; logo.\n&#160; &#160; &#160; &#160; &#160; 25.00&#160;
&#160; It's&#160; Been&#160; A&#160; While&#160; &#160; 10.99&#160;
&#160; Staind&#160; "</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(E1)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">fn:error()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:type-name(E1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">anon:TYP000001</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-id(E1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-idrefs(E1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:parent(E1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-D1">D1</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:children(E1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E2">E2</a>], [<a href=
"#ex-E7">E7</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:attributes(E1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-A1">A1</a>], [<a href=
"#ex-A2">A2</a>], [<a href="#ex-A3">A3</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:namespace-nodes(E1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-N1">N1</a>], [<a href=
"#ex-N2">N2</a>], [<a href="#ex-N3">N3</a>], [<a href=
"#ex-N4">N4</a>], [<a href="#ex-N5">N5</a>])</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:namespace-bindings(E1)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
("xml",&#160;"http://www.w3.org/XML/1998/namespace",
"html",&#160;"http://www.w3.org/1999/xhtml",
"",&#160;"http://www.example.com/catalog",
"xlink",&#160;"http://www.w3.org/1999/xlink",
"xsi",&#160;"http://www.w3.org/2001/XMLSchema-instance")</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-A1" class="attribute">
<td colspan="3" rowspan="1">// Attribute node A1</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-kind(A1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"attribute"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-name(A1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.w3.org/2001/XMLSchema-instance",
"xsi:schemaLocation")</td>
</tr>
<tr class="attribute">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(A1)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"http://www.example.com/catalog&#160;
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;
&#160; &#160; dm-example.xsd"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:typed-value(A1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
(xs:anyURI("http://www.example.com/catalog"),
xs:anyURI("catalog.xsd"))</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:type-name(A1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">anon:TYP000002</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-id(A1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-idrefs(A1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:parent(A1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E1">E1</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-A2" class="attribute">
<td colspan="3" rowspan="1">// Attribute node A2</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-kind(A2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"attribute"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-name(A2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.w3.org/XML/1998/namespace", "xml:lang")</td>
</tr>
<tr class="attribute">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(A2)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"en"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:typed-value(A2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"en"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:type-name(A2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:NMTOKEN</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-id(A2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-idrefs(A2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:parent(A2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E1">E1</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-A3" class="attribute">
<td colspan="3" rowspan="1">// Attribute node A3</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-kind(A3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"attribute"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-name(A3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "version")</td>
</tr>
<tr class="attribute">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(A3)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"0.1"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:typed-value(A3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"0.1"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:type-name(A3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:string</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-id(A3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-idrefs(A3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:parent(A3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E1">E1</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-C1" class="comment">
<td colspan="3" rowspan="1">// Comment node C1</td>
</tr>
<tr class="comment">
<td rowspan="1" colspan="1">dm:base-uri(C1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="comment">
<td rowspan="1" colspan="1">dm:node-kind(C1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"comment"</td>
</tr>
<tr class="comment">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(C1)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"&#160; This&#160; example&#160;
is&#160; for&#160; data&#160; model&#160; illustration&#160;
only.\n&#160; &#160; &#160; &#160; &#160; It&#160; does&#160;
not&#160; demonstrate&#160; good&#160; schema&#160; design.&#160;
"</td>
</tr>
<tr class="comment">
<td rowspan="1" colspan="1">dm:typed-value(C1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"&#160; This&#160; example&#160;
is&#160; for&#160; data&#160; model&#160; illustration&#160;
only.\n&#160; &#160; &#160; &#160; &#160; It&#160; does&#160;
not&#160; demonstrate&#160; good&#160; schema&#160; design.&#160;
"</td>
</tr>
<tr class="comment">
<td rowspan="1" colspan="1">dm:parent(C1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E1">E1</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-E2" class="element">
<td colspan="3" rowspan="1">// Element node E2</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:base-uri(E2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-kind(E2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"element"</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-name(E2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.example.com/catalog", "tshirt")</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(E2)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"&#160; Staind:&#160; Been&#160;
Awhile&#160; Tee&#160; Black&#160; (1-sided)&#160; \n&#160; &#160;
&#160; &#160; &#160; &#160; Lyrics&#160; from&#160; the&#160;
hit&#160; song&#160; 'It's&#160; Been&#160; Awhile'\n&#160; &#160;
&#160; &#160; &#160; &#160; are&#160; shown&#160; in&#160;
white,&#160; beneath&#160; the&#160; large\n&#160; &#160; &#160;
&#160; &#160; &#160; 'Flock&#160; &amp;&#160; Weld'&#160;
Staind&#160; logo.\n&#160; &#160; &#160; &#160; &#160; 25.00&#160;
"</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(E2)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">fn:error()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:type-name(E2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:tshirtType</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-id(E2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-idrefs(E2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:parent(E2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E1">E1</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:children(E2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E3">E3</a>], [<a href=
"#ex-E4">E4</a>], [<a href="#ex-E6">E6</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:attributes(E2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-A4">A4</a>], [<a href=
"#ex-A5">A5</a>], [<a href="#ex-A6">A6</a>], [<a href=
"#ex-A7">A7</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:namespace-nodes(E2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-N1">N1</a>], [<a href=
"#ex-N2">N2</a>], [<a href="#ex-N3">N3</a>], [<a href=
"#ex-N4">N4</a>], [<a href="#ex-N5">N5</a>])</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:namespace-bindings(E2)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
("xml",&#160;"http://www.w3.org/XML/1998/namespace",
"html",&#160;"http://www.w3.org/1999/xhtml",
"",&#160;"http://www.example.com/catalog",
"xlink",&#160;"http://www.w3.org/1999/xlink",
"xsi",&#160;"http://www.w3.org/2001/XMLSchema-instance")</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-A4" class="attribute">
<td colspan="3" rowspan="1">// Attribute node A4</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-kind(A4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"attribute"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-name(A4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "code")</td>
</tr>
<tr class="attribute">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(A4)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"T1534017"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:typed-value(A4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:ID("T1534017")</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:type-name(A4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:ID</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-id(A4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">true</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-idrefs(A4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:parent(A4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E2">E2</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-A5" class="attribute">
<td colspan="3" rowspan="1">// Attribute node A5</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-kind(A5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"attribute"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-name(A5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "label")</td>
</tr>
<tr class="attribute">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(A5)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"Staind&#160; :&#160; Been&#160;
Awhile"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:typed-value(A5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:token("Staind : Been Awhile")</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:type-name(A5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:token</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-id(A5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-idrefs(A5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:parent(A5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E2">E2</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-A6" class="attribute">
<td colspan="3" rowspan="1">// Attribute node A6</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-kind(A6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"attribute"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-name(A6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.w3.org/1999/xlink", "xlink:href")</td>
</tr>
<tr class="attribute">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(A6)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">
"http://example.com/0,,1655091,00.html"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:typed-value(A6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://example.com/0,,1655091,00.html")</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:type-name(A6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:anyURI</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-id(A6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-idrefs(A6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:parent(A6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E2">E2</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-A7" class="attribute">
<td colspan="3" rowspan="1">// Attribute node A7</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-kind(A7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"attribute"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-name(A7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "sizes")</td>
</tr>
<tr class="attribute">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(A7)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"M&#160; L&#160; XL"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:typed-value(A7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">(xs:token("M"), xs:token("L"),
xs:token("XL"))</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:type-name(A7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:sizeList</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-id(A7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-idrefs(A7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:parent(A7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E2">E2</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-E3" class="element">
<td colspan="3" rowspan="1">// Element node E3</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:base-uri(E3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-kind(E3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"element"</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-name(E3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.example.com/catalog", "title")</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(E3)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"Staind:&#160; Been&#160; Awhile&#160;
Tee&#160; Black&#160; (1-sided)"</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(E3)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:token("Staind: Been Awhile Tee Black
(1-sided)")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:type-name(E3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:token</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-id(E3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-idrefs(E3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:parent(E3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E2">E2</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:children(E3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:attributes(E3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:namespace-nodes(E3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-N1">N1</a>], [<a href=
"#ex-N2">N2</a>], [<a href="#ex-N3">N3</a>], [<a href=
"#ex-N4">N4</a>], [<a href="#ex-N5">N5</a>])</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:namespace-bindings(E3)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
("xml",&#160;"http://www.w3.org/XML/1998/namespace",
"html",&#160;"http://www.w3.org/1999/xhtml",
"",&#160;"http://www.example.com/catalog",
"xlink",&#160;"http://www.w3.org/1999/xlink",
"xsi",&#160;"http://www.w3.org/2001/XMLSchema-instance")</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-T1" class="text">
<td colspan="3" rowspan="1">// Text node T1</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:base-uri(T1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:node-kind(T1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"text"</td>
</tr>
<tr class="text">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(T1)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"Staind:&#160; Been&#160; Awhile&#160;
Tee&#160; Black&#160; (1-sided)"</td>
</tr>
<tr class="text">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(T1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic("Staind:&#160; Been&#160; Awhile&#160; Tee&#160;
Black&#160; (1-sided)")</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:type-name(T1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:parent(T1)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E3">E3</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-E4" class="element">
<td colspan="3" rowspan="1">// Element node E4</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:base-uri(E4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-kind(E4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"element"</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-name(E4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.example.com/catalog", "description")</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(E4)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"\n&#160; &#160; &#160; &#160; &#160;
&#160; Lyrics&#160; from&#160; the&#160; hit&#160; song&#160;
'It's&#160; Been&#160; Awhile'\n&#160; &#160; &#160; &#160; &#160;
&#160; are&#160; shown&#160; in&#160; white,&#160; beneath&#160;
the&#160; large\n&#160; &#160; &#160; &#160; &#160; &#160;
'Flock&#160; &amp;&#160; Weld'&#160; Staind&#160; logo.\n&#160;
&#160; &#160; &#160; "</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(E4)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1"><span>xs:untypedAtomic(</span>"\n&#160;
&#160; &#160; &#160; &#160; &#160; Lyrics&#160; from&#160;
the&#160; hit&#160; song&#160; 'It's&#160; Been&#160;
Awhile'\n&#160; &#160; &#160; &#160; &#160; &#160; are&#160;
shown&#160; in&#160; white,&#160; beneath&#160; the&#160;
large\n&#160; &#160; &#160; &#160; &#160; &#160; 'Flock&#160;
&amp;&#160; Weld'&#160; Staind&#160; logo.\n&#160; &#160; &#160;
&#160; ")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:type-name(E4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:description</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-id(E4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-idrefs(E4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:parent(E4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E2">E2</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:children(E4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E5">E5</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:attributes(E4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:namespace-nodes(E4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-N1">N1</a>], [<a href=
"#ex-N2">N2</a>], [<a href="#ex-N3">N3</a>], [<a href=
"#ex-N4">N4</a>], [<a href="#ex-N5">N5</a>])</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:namespace-bindings(E4)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
("xml",&#160;"http://www.w3.org/XML/1998/namespace",
"html",&#160;"http://www.w3.org/1999/xhtml",
"",&#160;"http://www.example.com/catalog",
"xlink",&#160;"http://www.w3.org/1999/xlink",
"xsi",&#160;"http://www.w3.org/2001/XMLSchema-instance")</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-E5" class="element">
<td colspan="3" rowspan="1">// Element node E5</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:base-uri(E5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-kind(E5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"element"</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-name(E5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.w3.org/1999/xhtml", "html:p")</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(E5)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"\n&#160; &#160; &#160; &#160; &#160;
&#160; Lyrics&#160; from&#160; the&#160; hit&#160; song&#160;
'It's&#160; Been&#160; Awhile'\n&#160; &#160; &#160; &#160; &#160;
&#160; are&#160; shown&#160; in&#160; white,&#160; beneath&#160;
the&#160; large\n&#160; &#160; &#160; &#160; &#160; &#160;
'Flock&#160; &amp;&#160; Weld'&#160; Staind&#160; logo.\n&#160;
&#160; &#160; &#160; "</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(E5)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1"><span>xs:untypedAtomic(</span>"\n&#160;
&#160; &#160; &#160; &#160; &#160; Lyrics&#160; from&#160;
the&#160; hit&#160; song&#160; 'It's&#160; Been&#160;
Awhile'\n&#160; &#160; &#160; &#160; &#160; &#160; are&#160;
shown&#160; in&#160; white,&#160; beneath&#160; the&#160;
large\n&#160; &#160; &#160; &#160; &#160; &#160; 'Flock&#160;
&amp;&#160; Weld'&#160; Staind&#160; logo.\n&#160; &#160; &#160;
&#160; ")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:type-name(E5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:anyType</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-id(E5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-idrefs(E5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:parent(E5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E4">E4</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:children(E5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:attributes(E5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:namespace-nodes(E5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-N1">N1</a>], [<a href=
"#ex-N2">N2</a>], [<a href="#ex-N3">N3</a>], [<a href=
"#ex-N4">N4</a>], [<a href="#ex-N5">N5</a>])</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:namespace-bindings(E5)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
("xml",&#160;"http://www.w3.org/XML/1998/namespace",
"html",&#160;"http://www.w3.org/1999/xhtml",
"",&#160;"http://www.example.com/catalog",
"xlink",&#160;"http://www.w3.org/1999/xlink",
"xsi",&#160;"http://www.w3.org/2001/XMLSchema-instance")</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-T2" class="text">
<td colspan="3" rowspan="1">// Text node T2</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:base-uri(T2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:node-kind(T2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"text"</td>
</tr>
<tr class="text">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(T2)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"\n&#160; &#160; &#160; &#160; &#160;
&#160; Lyrics&#160; from&#160; the&#160; hit&#160; song&#160;
'It's&#160; Been&#160; Awhile'\n&#160; &#160; &#160; &#160; &#160;
&#160; are&#160; shown&#160; in&#160; white,&#160; beneath&#160;
the&#160; large\n&#160; &#160; &#160; &#160; &#160; &#160;
'Flock&#160; &amp;&#160; Weld'&#160; Staind&#160; logo.\n&#160;
&#160; &#160; &#160; "</td>
</tr>
<tr class="text">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(T2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic("\n&#160; &#160; &#160; &#160; &#160; &#160;
Lyrics&#160; from&#160; the&#160; hit&#160; song&#160; 'It's&#160;
Been&#160; Awhile'\n&#160; &#160; &#160; &#160; &#160; &#160;
are&#160; shown&#160; in&#160; white,&#160; beneath&#160; the&#160;
large\n&#160; &#160; &#160; &#160; &#160; &#160; 'Flock&#160;
&amp;&#160; Weld'&#160; Staind&#160; logo.\n&#160; &#160; &#160;
&#160; ")</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:type-name(T2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:parent(T2)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E5">E5</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-E6" class="element">
<td colspan="3" rowspan="1">// Element node E6</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:base-uri(E6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-kind(E6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"element"</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-name(E6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.example.com/catalog", "price")</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(E6)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"25.00"</td>
</tr>
<tr class="element">
<td colspan="3" rowspan="1">// The typed-value is based on the
content type of the complex type for the element</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(E6)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:monetaryAmount(25.0)</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:type-name(E6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:price</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-id(E6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-idrefs(E6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:parent(E6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E2">E2</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:children(E6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:attributes(E6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:namespace-nodes(E6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-N1">N1</a>], [<a href=
"#ex-N2">N2</a>], [<a href="#ex-N3">N3</a>], [<a href=
"#ex-N4">N4</a>], [<a href="#ex-N5">N5</a>])</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:namespace-bindings(E6)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
("xml",&#160;"http://www.w3.org/XML/1998/namespace",
"html",&#160;"http://www.w3.org/1999/xhtml",
"",&#160;"http://www.example.com/catalog",
"xlink",&#160;"http://www.w3.org/1999/xlink",
"xsi",&#160;"http://www.w3.org/2001/XMLSchema-instance")</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-T3" class="text">
<td colspan="3" rowspan="1">// Text node T3</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:base-uri(T3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:node-kind(T3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"text"</td>
</tr>
<tr class="text">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(T3)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"25.00"</td>
</tr>
<tr class="text">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(T3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic("25.00")</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:type-name(T3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:parent(T3)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E6">E6</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-E7" class="element">
<td colspan="3" rowspan="1">// Element node E7</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:base-uri(E7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-kind(E7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"element"</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-name(E7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.example.com/catalog", "album")</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(E7)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"&#160; It's&#160; Been&#160; A&#160;
While&#160; &#160; 10.99&#160; &#160; Staind&#160; "</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(E7)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">fn:error()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:type-name(E7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:albumType</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-id(E7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-idrefs(E7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:parent(E7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E1">E1</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:children(E7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E8">E8</a>], [<a href=
"#ex-E9">E9</a>], [<a href="#ex-E10">E10</a>], [<a href=
"#ex-E11">E11</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:attributes(E7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-A8">A8</a>], [<a href=
"#ex-A9">A9</a>], [<a href="#ex-A10">A10</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:namespace-nodes(E7)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-N1">N1</a>], [<a href=
"#ex-N2">N2</a>], [<a href="#ex-N3">N3</a>], [<a href=
"#ex-N4">N4</a>], [<a href="#ex-N5">N5</a>])</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:namespace-bindings(E7)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
("xml",&#160;"http://www.w3.org/XML/1998/namespace",
"html",&#160;"http://www.w3.org/1999/xhtml",
"",&#160;"http://www.example.com/catalog",
"xlink",&#160;"http://www.w3.org/1999/xlink",
"xsi",&#160;"http://www.w3.org/2001/XMLSchema-instance")</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-A8" class="attribute">
<td colspan="3" rowspan="1">// Attribute node A8</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-kind(A8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"attribute"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-name(A8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "code")</td>
</tr>
<tr class="attribute">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(A8)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"A1481344"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:typed-value(A8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:ID("A1481344")</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:type-name(A8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:ID</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-id(A8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">true</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-idrefs(A8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:parent(A8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E7">E7</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-A9" class="attribute">
<td colspan="3" rowspan="1">// Attribute node A9</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-kind(A9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"attribute"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-name(A9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "label")</td>
</tr>
<tr class="attribute">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(A9)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"Staind&#160; :&#160; Its&#160;
Been&#160; A&#160; While"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:typed-value(A9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:token("Staind : Its Been A
While")</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:type-name(A9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:token</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-id(A9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-idrefs(A9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:parent(A9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E7">E7</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-A10" class="attribute">
<td colspan="3" rowspan="1">// Attribute node A10</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-kind(A10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"attribute"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-name(A10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "formats")</td>
</tr>
<tr class="attribute">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(A10)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"CD"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:typed-value(A10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:formatType("CD")</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:type-name(A10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:formatType</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-id(A10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-idrefs(A10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:parent(A10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E7">E7</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-E8" class="element">
<td colspan="3" rowspan="1">// Element node E8</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:base-uri(E8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-kind(E8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"element"</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-name(E8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.example.com/catalog", "title")</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(E8)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"It's&#160; Been&#160; A&#160;
While"</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(E8)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:token("It's Been A While")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:type-name(E8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:token</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-id(E8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-idrefs(E8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:parent(E8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E7">E7</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:children(E8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:attributes(E8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:namespace-nodes(E8)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-N1">N1</a>], [<a href=
"#ex-N2">N2</a>], [<a href="#ex-N3">N3</a>], [<a href=
"#ex-N4">N4</a>], [<a href="#ex-N5">N5</a>])</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:namespace-bindings(E8)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
("xml",&#160;"http://www.w3.org/XML/1998/namespace",
"html",&#160;"http://www.w3.org/1999/xhtml",
"",&#160;"http://www.example.com/catalog",
"xlink",&#160;"http://www.w3.org/1999/xlink",
"xsi",&#160;"http://www.w3.org/2001/XMLSchema-instance")</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-T4" class="text">
<td colspan="3" rowspan="1">// Text node T4</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:base-uri(T4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:node-kind(T4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"text"</td>
</tr>
<tr class="text">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(T4)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"It's&#160; Been&#160; A&#160;
While"</td>
</tr>
<tr class="text">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(T4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic("It's&#160; Been&#160; A&#160; While")</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:type-name(T4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:parent(T4)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E8">E8</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-E9" class="element">
<td colspan="3" rowspan="1">// Element node E9</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:base-uri(E9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-kind(E9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"element"</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-name(E9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.example.com/catalog", "description")</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(E9)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">""</td>
</tr>
<tr class="element">
<td colspan="3" rowspan="1">// xsi:nil is true so the typed value
is the empty sequence</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(E9)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:type-name(E9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:description</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-id(E9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-idrefs(E9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:parent(E9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E7">E7</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:children(E9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:attributes(E9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-A11">A11</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:namespace-nodes(E9)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-N1">N1</a>], [<a href=
"#ex-N2">N2</a>], [<a href="#ex-N3">N3</a>], [<a href=
"#ex-N4">N4</a>], [<a href="#ex-N5">N5</a>])</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:namespace-bindings(E9)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
("xml",&#160;"http://www.w3.org/XML/1998/namespace",
"html",&#160;"http://www.w3.org/1999/xhtml",
"",&#160;"http://www.example.com/catalog",
"xlink",&#160;"http://www.w3.org/1999/xlink",
"xsi",&#160;"http://www.w3.org/2001/XMLSchema-instance")</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-A11" class="attribute">
<td colspan="3" rowspan="1">// Attribute node A11</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-kind(A11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"attribute"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-name(A11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.w3.org/2001/XMLSchema-instance",
"xsi:nil")</td>
</tr>
<tr class="attribute">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(A11)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"true"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:typed-value(A11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:boolean("true")</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:type-name(A11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:boolean</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-id(A11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-idrefs(A11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:parent(A11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E9">E9</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-E10" class="element">
<td colspan="3" rowspan="1">// Element node E10</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:base-uri(E10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-kind(E10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"element"</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-name(E10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.example.com/catalog", "price")</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(E10)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"10.99"</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(E10)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:monetaryAmount(10.99)</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:type-name(E10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:price</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-id(E10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-idrefs(E10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:parent(E10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E7">E7</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:children(E10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:attributes(E10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-A12">A12</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:namespace-nodes(E10)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-N1">N1</a>], [<a href=
"#ex-N2">N2</a>], [<a href="#ex-N3">N3</a>], [<a href=
"#ex-N4">N4</a>], [<a href="#ex-N5">N5</a>])</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:namespace-bindings(E10)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
("xml",&#160;"http://www.w3.org/XML/1998/namespace",
"html",&#160;"http://www.w3.org/1999/xhtml",
"",&#160;"http://www.example.com/catalog",
"xlink",&#160;"http://www.w3.org/1999/xlink",
"xsi",&#160;"http://www.w3.org/2001/XMLSchema-instance")</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-A12" class="attribute">
<td colspan="3" rowspan="1">// Attribute node A12</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-kind(A12)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"attribute"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:node-name(A12)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:QName("", "currency")</td>
</tr>
<tr class="attribute">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(A12)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"USD"</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:typed-value(A12)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:currencyType("USD")</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:type-name(A12)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">cat:currencyType</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-id(A12)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:is-idrefs(A12)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="attribute">
<td rowspan="1" colspan="1">dm:parent(A12)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E10">E10</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-T5" class="text">
<td colspan="3" rowspan="1">// Text node T5</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:base-uri(T5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:node-kind(T5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"text"</td>
</tr>
<tr class="text">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(T5)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"10.99"</td>
</tr>
<tr class="text">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(T5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic("10.99")</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:type-name(T5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:parent(T5)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E10">E10</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-E11" class="element">
<td colspan="3" rowspan="1">// Element node E11</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:base-uri(E11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-kind(E11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"element"</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:node-name(E11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:QName("http://www.example.com/catalog", "artist")</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(E11)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"&#160; Staind&#160; "</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(E11)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">" Staind "</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:type-name(E11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">xs:string</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-id(E11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:is-idrefs(E11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">false</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:parent(E11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E7">E7</a>])</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:children(E11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:attributes(E11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">()</td>
</tr>
<tr class="element">
<td rowspan="1" colspan="1">dm:namespace-nodes(E11)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-N1">N1</a>], [<a href=
"#ex-N2">N2</a>], [<a href="#ex-N3">N3</a>], [<a href=
"#ex-N4">N4</a>], [<a href="#ex-N5">N5</a>])</td>
</tr>
<tr class="element">
<td valign="baseline" rowspan="1" colspan="1">
dm:namespace-bindings(E11)</td>
<td valign="baseline" rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
("xml",&#160;"http://www.w3.org/XML/1998/namespace",
"html",&#160;"http://www.w3.org/1999/xhtml",
"",&#160;"http://www.example.com/catalog",
"xlink",&#160;"http://www.w3.org/1999/xlink",
"xsi",&#160;"http://www.w3.org/2001/XMLSchema-instance")</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
<tr id="ex-T6" class="text">
<td colspan="3" rowspan="1">// Text node T6</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:base-uri(T6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">
xs:anyURI("http://www.example.com/catalog.xml")</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:node-kind(T6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">"text"</td>
</tr>
<tr class="text">
<td valign="baseline" rowspan="1" colspan="1">
dm:string-value(T6)</td>
<td valign="baseline" rowspan="1" colspan="1">=</td>
<td rowspan="1" colspan="1">"&#160; Staind&#160; "</td>
</tr>
<tr class="text">
<td valign="baseline" rowspan="1" colspan="1">
dm:typed-value(T6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic("&#160; Staind&#160; ")</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:type-name(T6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td class="diff-chg" title="DM.E008" rowspan="1" colspan="1">
xs:untypedAtomic</td>
</tr>
<tr class="text">
<td rowspan="1" colspan="1">dm:parent(T6)</td>
<td rowspan="1" colspan="1">=&#160;</td>
<td rowspan="1" colspan="1">([<a href="#ex-E11">E11</a>])</td>
</tr>
<tr>
<td colspan="3" rowspan="1">&#160;</td>
</tr>
</tbody>
</table>
<p>A graphical representation of the data model for the preceding
example is shown below. Document order in this representation can
be found by following the traditional left-to-right, depth-first
traversal; however, because the image has been rotated for easier
presentation, this appears to be bottom-to-top, depth-first
order.</p>
<table border="0" cellspacing="0" summary="Graphic">
<tbody>
<tr>
<td rowspan="1" colspan="1"><img src="dm-example.png" alt=
"Graphical depiction of the example data model." /></td>
</tr>
<tr>
<td rowspan="1" colspan="1">Graphic representation of the data
model. [<a href="dm-example-large.png">large view</a>, <a href=
"dm-example.svg">SVG</a>]</td>
</tr>
</tbody>
</table>
</div>
<div class="div1">
<h2><a id="impl-summary" name="impl-summary"></a>F
Implementation-Defined and Implementation-Dependent Items
(Non-Normative)</h2>
<div class="div2">
<h3><a id="implementation-defined" name=
"implementation-defined"></a>F.1 Implementation-Defined Items</h3>
<p>The following items are <a title="implementation defined" href=
"#dt-implementation-defined">implementation-defined</a>.</p>
<ol>
<li>Support for additional user-defined or implementation-defined
types is implementation-defined. (See <a href=
"#types-representation"><b>2.6.1 Representation of
Types</b></a>)</li>
<li>Some typed values in the data model are <em>undefined</em>.
Attempting to access an undefined property is always an error.
Behavior in these cases is implementation-defined and the host
language is responsible for determining the result. (See <a href=
"#accessors"><b>5 Accessors</b></a>)</li>
</ol>
</div>
<div class="div2">
<h3><a id="implementation-dependent" name=
"implementation-dependent"></a>F.2 Implementation-Dependent
Items</h3>
<p>The following items are <a title="implementation dependent"
href="#dt-implementation-dependent">implementation-dependent</a>.</p>
<ol>
<li>The relative order of Namespace Nodes nodes is stable but
implementation-dependent. (See <a href="#document-order"><b>2.4
Document Order</b></a>)</li>
<li>The relative order of Attribute Nodes nodes is stable but
implementation-dependent. (See <a href="#document-order"><b>2.4
Document Order</b></a>)</li>
<li>The relative order of distinct trees is stable but
implementation-dependent. (See <a href="#document-order"><b>2.4
Document Order</b></a>)</li>
<li>The names of anonymous types are implementation-dependent. (See
<a href="#types-representation"><b>2.6.1 Representation of
Types</b></a>)</li>
<li>The prefix associated with type names is
implementation-dependent. (See <a href="#PSVI2NodeTypes"><b>3.3.1.1
Element and Attribute Node Type Names</b></a>)</li>
<li>The representation of the set of prefix/URI pairs returned by
the <span class="function"><a href=
"#dm-namespace-bindings"><span class=
"prefix">dm:</span>namespace-bindings</a></span> accessor is
implementation-dependent. (See <a href=
"#dm-namespace-bindings"><b>5.7 namespace-bindings
Accessor</b></a>)</li>
<li>The representation of namespaces, i.e. whether or not they are
represented as nodes, is implementation-dependent. (See <a href=
"#Node"><b>6 Nodes</b></a>)</li>
</ol>
</div>
</div>
<div class="div1">
<h2><a id="ChangeLog" name="ChangeLog"></a>G Changes since the
First Edition (Non-Normative)</h2>
<p>The changes made to this document are described in detail in the
<a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html">Errata</a>
to the first edition. The rationale for each erratum is explained
in the corresponding Bugzilla database entry. The following table
summarizes the errata that have been applied.</p>
<table border="1" cellpadding="5" width="100%">
<thead>
<tr>
<td rowspan="1" colspan="1">Erratum</td>
<td rowspan="1" colspan="1">Bugzilla</td>
<td rowspan="1" colspan="1">Category</td>
<td rowspan="1" colspan="1">Description</td>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E001">
E001</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=4352">4352</a></td>
<td rowspan="1" colspan="1">editorial</td>
<td rowspan="1" colspan="1">The schema in the examples appendix
isn't valid.</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E002">
E002</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=4413">4413</a></td>
<td rowspan="1" colspan="1">substantive</td>
<td rowspan="1" colspan="1">The data model spec doesn't adequately
cover the determination of the typed value for an element whose
schema type is a complex type with simple content.</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E003">
E003</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=4486">4486</a></td>
<td rowspan="1" colspan="1">substantive</td>
<td rowspan="1" colspan="1">The Data Model does not state any
constraints on the use of the namespace
'http://www.w3.org/2000/xmlns/'. Such constraints are needed to
ensure that an XDM document can be serialized as a
namespace-well-formed XML document.</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E004">
E004</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=4487">4487</a></td>
<td rowspan="1" colspan="1">substantive</td>
<td rowspan="1" colspan="1">Nowhere does XDM state the constraint
that if a namespace URI is present in the node-name of an attribute
node then a prefix must also be present. This is necessary to
ensure that an XDM document can be serialized as
namespace-well-formed XML.</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E005">
E005</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=4519">4519</a></td>
<td rowspan="1" colspan="1">substantive</td>
<td rowspan="1" colspan="1">The rules for is-id property for an
element node constructed from a PSVI appear arbitrarily different
from the rule for attribute nodes.</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E006">
E006</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=4984">4984</a></td>
<td rowspan="1" colspan="1">editorial</td>
<td rowspan="1" colspan="1">(superseded)</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E007">
E007</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=5002">5002</a></td>
<td rowspan="1" colspan="1">editorial</td>
<td rowspan="1" colspan="1">Terminology: root node concept.</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E008">
E008</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=5212">5212</a></td>
<td rowspan="1" colspan="1">editorial</td>
<td rowspan="1" colspan="1">Obsolete xdt: rather than xs: prefixes
used.</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E009">
E009</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=5267">5267</a></td>
<td rowspan="1" colspan="1">editorial</td>
<td rowspan="1" colspan="1">xs:dayTimeDuration and
xs:yearMonthDuration listed as a primitive simple type.</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E010">
E010</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=4622">4622</a></td>
<td rowspan="1" colspan="1">substantive</td>
<td rowspan="1" colspan="1">dm:unparsed-entity-system-id absolute
or relative URI?</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E011">
E011</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=5207">5207</a></td>
<td rowspan="1" colspan="1">substantive</td>
<td rowspan="1" colspan="1">Accessing undefined static context base
URI and XPST0001</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E012">
E012</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=5983">5983</a></td>
<td rowspan="1" colspan="1">editorial</td>
<td rowspan="1" colspan="1">xs:integer is not primitive</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E013">
E013</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=6139">6139</a></td>
<td rowspan="1" colspan="1">editorial</td>
<td rowspan="1" colspan="1">reminders re empty Text Nodes</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E014">
E014</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=6255">6255</a></td>
<td rowspan="1" colspan="1">editorial</td>
<td rowspan="1" colspan="1">Base URI after validation</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E015">
E015</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=6374">6374</a></td>
<td rowspan="1" colspan="1">editorial</td>
<td rowspan="1" colspan="1">non-normative notes</td>
</tr>
<tr>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/XML/2007/qt-errata/xpath-datamodel-errata.html#E016">
E016</a></td>
<td rowspan="1" colspan="1"><a href=
"http://www.w3.org/Bugs/Public/show_bug.cgi?id=6287">6287</a></td>
<td rowspan="1" colspan="1">editorial</td>
<td rowspan="1" colspan="1">Terminology: "undefined"</td>
</tr>
</tbody>
</table>
</div>
<div class="div1">
<h2><a name="accessors-list" id="accessors-list"></a>H Accessor
Summary (Non-Normative)</h2>
<p>This section summarizes the return values of each accessor by
node type.</p>
<div>
<h3 id="acc-summ-attributes">H.1 <a href=
"#dm-attributes"><em>dm:</em>attributes</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the empty sequence</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">attributes</b>
property. The order of Attribute Nodes is stable but implementation
dependent.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-base-uri">H.2 <a href=
"#dm-base-uri"><em>dm:</em>base-uri</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">base-uri</b>
property.</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">base-uri</b>
property.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>If the attribute has a parent, returns the value of the
<span class="function"><a href="#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span> of its parent; otherwise it
returns the empty sequence.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">base-uri</b>
property.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>If the comment has a parent, returns the value of the
<span class="function"><a href="#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span> of its parent; otherwise,
returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>If the Text Node has a parent, returns the value of the
<span class="function"><a href="#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span> of its parent; otherwise,
returns the empty sequence.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-children">H.3 <a href=
"#dm-children"><em>dm:</em>children</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">children</b>
property.</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">children</b>
property.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-document-uri">H.4 <a href=
"#dm-document-uri"><em>dm:</em>document-uri</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the absolute URI of the resource from which the Document
Node was constructed, or the empty sequence if no such absolute URI
is available.</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-is-id">H.5 <a href=
"#dm-is-id"><em>dm:</em>is-id</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">is-id</b>
property.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">is-id</b>
property.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-is-idrefs">H.6 <a href=
"#dm-is-idrefs"><em>dm:</em>is-idrefs</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">is-idrefs</b>
property.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">is-idrefs</b>
property.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-namespace-bindings">H.7 <a href=
"#dm-namespace-bindings"><em>dm:</em>namespace-bindings</a>
Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the empty sequence</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">namespaces</b>
property as a set of prefix/URI pairs.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-namespace-nodes">H.8 <a href=
"#dm-namespace-nodes"><em>dm:</em>namespace-nodes</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the empty sequence</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">namespaces</b>
property as a sequence of Namespace Nodes. The order of Namespace
Nodes is stable but implementation dependent.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-nilled">H.9 <a href=
"#dm-nilled"><em>dm:</em>nilled</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the empty sequence</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">nilled</b>
property.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-node-kind">H.10 <a href=
"#dm-node-kind"><em>dm:</em>node-kind</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns “<code>document</code>”.</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns “<code>element</code>”.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns “<code>attribute</code>”.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns “<code>namespace</code>”.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns “<code>processing-instruction</code>”.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns “<code>comment</code>”.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns “<code>text</code>”.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-node-name">H.11 <a href=
"#dm-node-name"><em>dm:</em>node-name</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">node-name</b>
property.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">node-name</b>
property.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>If the <b class="dm-node-prop">prefix</b> is not empty, returns
an <code>xs:QName</code> with the value of the <b class=
"dm-node-prop">prefix</b> property in the local-name and an empty
namespace name, otherwise returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns an <code>xs:QName</code> with the value of the <b class=
"dm-node-prop">target</b> property in the local-name and an empty
namespace URI and empty prefix.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-parent">H.12 <a href=
"#dm-parent"><em>dm:</em>parent</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the empty sequence</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">parent</b>
property.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">parent</b>
property.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">parent</b>
property.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">parent</b>
property.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">parent</b>
property.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">parent</b>
property.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-string-value">H.13 <a href=
"#dm-string-value"><em>dm:</em>string-value</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the value of the <b class=
"dm-node-prop">string-value</b> property.</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class=
"dm-node-prop">string-value</b> property.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the value of the <b class=
"dm-node-prop">string-value</b> property.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">uri</b>
property.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">content</b>
property.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">content</b>
property.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">content</b>
property.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-type-name">H.14 <a href=
"#dm-type-name"><em>dm:</em>type-name</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">type-name</b>
property.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">type-name</b>
property.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns <code>xs:untypedAtomic</code>.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-typed-value">H.15 <a href=
"#dm-typed-value"><em>dm:</em>typed-value</a> Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">typed-value</b>
property.</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">typed-value</b>
property.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">typed-value</b>
property.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">uri</b>
property as an <code>xs:string</code>.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">content</b>
property as a <code>xs:string</code>.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">content</b>
property as a <code>xs:string</code>.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the value of the <b class="dm-node-prop">content</b>
property as an <code>xs:untypedAtomic</code>.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-unparsed-entity-public-id">H.16 <a href=
"#dm-unparsed-entity-public-id"><em>dm:</em>unparsed-entity-public-id</a>
Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the public identifier of the specified unparsed entity
or the empty sequence if no such entity exists.</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
<div>
<h3 id="acc-summ-unparsed-entity-system-id">H.17 <a href=
"#dm-unparsed-entity-system-id"><em>dm:</em>unparsed-entity-system-id</a>
Accessor</h3>
<dl>
<dt><a href="#DocumentNode">Document Nodes</a></dt>
<dd>
<p>Returns the system identifier of the specified unparsed entity
or the empty sequence if no such entity exists.</p>
</dd>
<dt><a href="#ElementNode">Element Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#AttributeNode">Attribute Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#NamespaceNode">Namespace Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#ProcessingInstructionNode">Processing Instruction
Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#CommentNode">Comment Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
<dt><a href="#TextNode">Text Nodes</a></dt>
<dd>
<p>Returns the empty sequence.</p>
</dd>
</dl>
</div>
</div>
<div class="div1">
<h2><a name="infoset-construction-summary" id=
"infoset-construction-summary"></a>I Infoset Construction Summary
(Non-Normative)</h2>
<p>This section summarizes data model construction from an Infoset
for each kind of information item. General notes <a href=
"#const-infoset">occur elsewhere</a>.</p>
<div>
<h3><a name="auto-const-infoset-document" id=
"auto-const-infoset-document"></a>I.1 Document Nodes Information
Items</h3>
<p>The <b class="info-item">document information item</b> is
required. A Document Node is constructed for each <b class=
"info-item">document information item</b>.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[children]</b> and <b class=
"infoset-property">[base URI]</b>.</p>
<p>The following infoset properties are optional: <b class=
"infoset-property">[unparsed entities]</b>.</p>
<p>Document Node properties are derived from the infoset as
follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">base-uri</b></dt>
<dd>
<p>The value of the <b class="infoset-property">[base URI]</b>
property, if available. Note that the base URI property, if
available, is always an absolute URI (if an absolute URI can be
computed) though it may contain Unicode characters that are not
allowed in URIs. These characters, if they occur, are present in
the <b class="dm-node-prop">base-uri</b> property and will have to
be encoded and escaped by the application to obtain a URI suitable
for retrieval, if retrieval is required.</p>
<p>In practice a <b class="infoset-property">[base URI]</b> is not
always known. In this case the value of the <b class=
"dm-node-prop">base-uri</b> property of the document node will be
the empty sequence. This is not intrinsically an error, though it
may cause some operations that depend on the base URI to fail.</p>
</dd>
<dt class="label"><b class="dm-node-prop">children</b></dt>
<dd>
<p>The sequence of nodes constructed from the information items
found in the <b class="infoset-property">[children]</b>
property.</p>
<p>For each element, processing instruction, and comment found in
the <b class="infoset-property">[children]</b> property, a
corresponding Element, Processing Instruction, or Comment Node is
constructed and that sequence of nodes is used as the value of the
<b class="dm-node-prop">children</b> property.</p>
<p>If present among the <b class="infoset-property">[children]</b>,
the <b class="info-item">document type declaration information
item</b> is ignored.</p>
</dd>
<dt class="label"><b class=
"dm-node-prop">unparsed-entities</b></dt>
<dd>
<p>If the <b class="infoset-property">[unparsed entities]</b>
property is present and is not the empty set, the values of the
<b class="info-item">unparsed entity information items</b> must be
used to support the <span class="function"><a href=
"#dm-unparsed-entity-system-id"><span class=
"prefix">dm:</span>unparsed-entity-system-id</a></span> and
<span class="function"><a href=
"#dm-unparsed-entity-public-id"><span class=
"prefix">dm:</span>unparsed-entity-public-id</a></span>
accessors.</p>
<p>The internal structure of the values of the <b class=
"dm-node-prop">unparsed-entities</b> property is implementation
defined.</p>
</dd>
<dt class="label"><b class="dm-node-prop">string-value</b></dt>
<dd>
<p>The concatenation of the string-values of all its Text Node
descendants in document order. If the document has no such
descendants, the zero-length string.</p>
</dd>
<dt class="label"><b class="dm-node-prop">typed-value</b></dt>
<dd>
<p>The <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> of the node as an
<code>xs:untypedAtomic</code> value.</p>
</dd>
<dt class="label"><b class="dm-node-prop">document-uri</b></dt>
<dd>
<p>The <b class="dm-node-prop">document-uri</b> property holds the
absolute URI for the resource from which the document node was
constructed, if one is available and can be made absolute. For
example, if a collection of documents is returned by the
<span class="function">fn:collection</span> function, the <b class=
"dm-node-prop">document-uri</b> property may serve to distinguish
between them even though each has the same <b class=
"dm-node-prop">base-uri</b> property.</p>
<p>If the <b class="dm-node-prop">document-uri</b> is not the empty
sequence, then the following constraint must hold: the node
returned by evaluating <code>fn:doc()</code> with the <b class=
"dm-node-prop">document-uri</b> as its argument must return the
document node that provided the value of the <b class=
"dm-node-prop">document-uri</b> property.</p>
<p>In other words, for any Document Node <code>$arg</code>, either
<code>fn:document-uri($arg)</code> must return the empty sequence
or <code>fn:doc(fn:document-uri($arg))</code> must return
<code>$arg</code>.</p>
</dd>
</dl>
</div>
<div>
<h3><a name="auto-const-infoset-element" id=
"auto-const-infoset-element"></a>I.2 Element Nodes Information
Items</h3>
<p>The <b class="info-item">element information items</b> are
required. An Element Node is constructed for each <b class=
"info-item">element information item</b>.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[namespace name]</b>, <b class=
"infoset-property">[local name]</b>, <b class=
"infoset-property">[children]</b>, <b class=
"infoset-property">[attributes]</b>, <b class=
"infoset-property">[in-scope namespaces]</b>, <b class=
"infoset-property">[base URI]</b>, and <b class=
"infoset-property">[parent]</b>.</p>
<p>Element Node properties are derived from the infoset as
follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">base-uri</b></dt>
<dd>
<p>The value of the <b class="infoset-property">[base URI]</b>
property, if available. Note that the base URI property, if
available, is always an absolute URI (if an absolute URI can be
computed) though it may contain Unicode characters that are not
allowed in URIs. These characters, if they occur, are present in
the <b class="dm-node-prop">base-uri</b> property and will have to
be encoded and escaped by the application to obtain a URI suitable
for retrieval, if retrieval is required.</p>
<p>In practice a <b class="infoset-property">[base URI]</b> is not
always known. In this case the value of the <b class=
"dm-node-prop">base-uri</b> property of the document node will be
the empty sequence. This is not intrinsically an error, though it
may cause some operations that depend on the base URI to fail.</p>
</dd>
<dt class="label"><b class="dm-node-prop">node-name</b></dt>
<dd>
<p>An <code>xs:QName</code> constructed from the <b class=
"infoset-property">[prefix]</b>, <b class="infoset-property">[local
name]</b>, and <b class="infoset-property">[namespace name]</b>
properties.</p>
</dd>
<dt class="label"><b class="dm-node-prop">parent</b></dt>
<dd>
<p>The node that corresponds to the value of the <b class=
"infoset-property">[parent]</b> property or the empty sequence if
there is no parent.</p>
</dd>
<dt class="label"><b class="dm-node-prop">type-name</b></dt>
<dd>
<p>All Element Nodes constructed from an infoset have the type
<code>xs:untyped</code>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">children</b></dt>
<dd>
<p>The sequence of nodes constructed from the information items
found in the <b class="infoset-property">[children]</b>
property.</p>
<p>For each element, processing instruction, comment, and maximal
sequence of adjacent <b class="info-item">character information
items</b> found in the <b class="infoset-property">[children]</b>
property, a corresponding Element, Processing Instruction, Comment,
or Text Node is constructed and that sequence of nodes is used as
the value of the <b class="dm-node-prop">children</b> property.</p>
<p>Because the data model requires that all general entities be
expanded, there will never be <b class="info-item">unexpanded
entity reference information item</b> children.</p>
</dd>
<dt class="label"><b class="dm-node-prop">attributes</b></dt>
<dd>
<p>A set of Attribute Nodes constructed from the <b class=
"info-item">attribute information items</b> appearing in the
<b class="infoset-property">[attributes]</b> property. This
includes all of the "special" attributes (<code>xml:lang</code>,
<code>xml:space</code>, <code>xsi:type</code>, etc.) but does not
include namespace declarations (because they are not
attributes).</p>
<p>Default and fixed attributes provided by the DTD are added to
the <b class="infoset-property">[attributes]</b> and are therefore
included in the data model <b class="dm-node-prop">attributes</b>
of an element.</p>
</dd>
<dt class="label"><b class="dm-node-prop">namespaces</b></dt>
<dd>
<p>A set of Namespace Nodes constructed from the <b class=
"info-item">namespace information items</b> appearing in the
<b class="infoset-property">[in-scope namespaces]</b> property.
Implementations that do not support Namespace Nodes may simply
preserve the relevant bindings in this property.</p>
<p>Implementations <strong>may</strong> ignore <b class=
"info-item">namespace information items</b> for namespaces which
are not known to be used. A namespace is known to be used if:</p>
<ul>
<li>
<p>It appears in the <a title="expanded-QName" href=
"#dt-expanded-qname">expanded QName</a> of the <b class=
"dm-node-prop">node-name</b> of the element.</p>
</li>
<li>
<p>It appears in the <a title="expanded-QName" href=
"#dt-expanded-qname">expanded QName</a> of the <b class=
"dm-node-prop">node-name</b> of any of the element's
attributes.</p>
</li>
</ul>
<p>Note: applications may rely on namespaces that are not known to
be used, for example when QNames are used in content and that
content does not have a type of <code>xs:QName</code> Such
applications may have difficulty processing data models where some
namespaces have been ignored.</p>
</dd>
<dt class="label"><b class="dm-node-prop">nilled</b></dt>
<dd>
<p>All Element Nodes constructed from an infoset have a <b class=
"dm-node-prop">nilled</b> property of "<em>false</em>".</p>
</dd>
<dt class="label"><b class="dm-node-prop">string-value</b></dt>
<dd>
<p>The <b class="dm-node-prop">string-value</b> is constructed from
the <b class="info-item">character information item</b> <b class=
"infoset-property">[children]</b> of the element and all its
descendants. The precise rules for selecting significant <b class=
"info-item">character information items</b> and constructing
characters from them is described in <a href=
"#const-infoset-text"><b>6.7.3 Construction from an Infoset</b></a>
of <a href="#TextNode"><b>6.7 Text Nodes</b></a>.</p>
<p>This process is equivalent to concatenating the <span class=
"function"><a href="#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span>s of all of the Text Node
descendants of the resulting Element Node.</p>
<p>If the element has no such descendants, the <b class=
"dm-node-prop">string-value</b> is the empty string.</p>
</dd>
<dt class="label"><b class="dm-node-prop">typed-value</b></dt>
<dd>
<p>The <b class="dm-node-prop">string-value</b> as an
<code>xs:untypedAtomic</code>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">is-id</b></dt>
<dd>
<p>All Element Nodes constructed from an infoset have a <b class=
"dm-node-prop">is-id</b> property of "<em>false</em>".</p>
</dd>
<dt class="label"><b class="dm-node-prop">is-idrefs</b></dt>
<dd>
<p>All Element Nodes constructed from an infoset have a <b class=
"dm-node-prop">is-idrefs</b> property of "<em>false</em>".</p>
</dd>
</dl>
</div>
<div>
<h3><a name="auto-const-infoset-attribute" id=
"auto-const-infoset-attribute"></a>I.3 Attribute Nodes Information
Items</h3>
<p>The <b class="info-item">attribute information items</b> are
required. An Attribute Node is constructed for each <b class=
"info-item">attribute information item</b>.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[namespace name]</b>, <b class=
"infoset-property">[local name]</b>, <b class=
"infoset-property">[normalized value]</b>, <b class=
"infoset-property">[attribute type]</b>, and <b class=
"infoset-property">[owner element]</b>.</p>
<p>Attribute Node properties are derived from the infoset as
follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">node-name</b></dt>
<dd>
<p>An <code>xs:QName</code> constructed from the <b class=
"infoset-property">[prefix]</b>, <b class="infoset-property">[local
name]</b>, and <b class="infoset-property">[namespace name]</b>
properties.</p>
</dd>
<dt class="label"><b class="dm-node-prop">parent</b></dt>
<dd>
<p>The Element Node that corresponds to the value of the <b class=
"infoset-property">[owner element]</b> property or the empty
sequence if there is no owner.</p>
</dd>
<dt class="label"><b class="dm-node-prop">type-name</b></dt>
<dd>
<p>The value <code>xs:untypedAtomic</code>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">string-value</b></dt>
<dd>
<p>The <b class="infoset-property">[normalized value]</b> of the
attribute.</p>
</dd>
<dt class="label"><b class="dm-node-prop">typed-value</b></dt>
<dd>
<p>The attribute’s typed-value is its <span class=
"function"><a href="#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> as an
<code>xs:untypedAtomic</code>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">is-id</b></dt>
<dd>
<p>If the attribute is named <code>xml:id</code> and its <b class=
"infoset-property">[attribute type]</b> property does not have the
value <code>ID</code>, then <a href="#xml-id">[xml:id]</a>
processing is performed. This will assure that the value does have
the type <code>ID</code> and that it is properly normalized. If an
error is encountered during xml:id processing, an implementation
<strong>may</strong> raise a dynamic error. The <b class=
"dm-node-prop">is-id</b> property is always <code>true</code> for
attributes named <code>xml:id</code>.</p>
<p>If the <b class="infoset-property">[attribute type]</b> property
has the value <code>ID</code>, <code>true</code>, otherwise
<code>false</code>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">is-idrefs</b></dt>
<dd>
<p>If the <b class="infoset-property">[attribute type]</b> property
has the value <code>IDREF</code> or <code>IDREFS</code>,
<code>true</code>, otherwise <code>false</code>.</p>
</dd>
</dl>
</div>
<div>
<h3><a name="auto-const-infoset-namespace" id=
"auto-const-infoset-namespace"></a>I.4 Namespace Nodes Information
Items</h3>
<p>The <b class="info-item">namespace information items</b> are
required.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[prefix]</b>, <b class=
"infoset-property">[namespace name]</b>.</p>
<p>Namespace Node properties are derived from the infoset as
follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">prefix</b></dt>
<dd>
<p>The <b class="infoset-property">[prefix]</b> property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">uri</b></dt>
<dd>
<p>The <b class="infoset-property">[namespace name]</b>
property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">parent</b></dt>
<dd>
<p>The element in whose <b class="infoset-property">[in-scope
namespaces]</b> property the <b class="info-item">namespace
information item</b> appears, if the implementation exposes any
mechanism for accessing the <span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span>
accessor of Namespace Nodes.</p>
</dd>
</dl>
</div>
<div>
<h3><a name="auto-const-infoset-pi" id=
"auto-const-infoset-pi"></a>I.5 Processing Instruction Nodes
Information Items</h3>
<p>A Processing Instruction Node is constructed for each <b class=
"info-item">processing instruction information item</b> that is not
ignored.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[target]</b>, <b class=
"infoset-property">[content]</b>, <b class="infoset-property">[base
URI]</b>, and <b class="infoset-property">[parent]</b>.</p>
<p>Processing Instruction Node properties are derived from the
infoset as follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">target</b></dt>
<dd>
<p>The value of the <b class="infoset-property">[target]</b>
property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">content</b></dt>
<dd>
<p>The value of the <b class="infoset-property">[content]</b>
property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">base-uri</b></dt>
<dd>
<p>The value of the <b class="infoset-property">[base URI]</b>
property, if available. Note that the base URI property, if
available, is always an absolute URI (if an absolute URI can be
computed) though it may contain Unicode characters that are not
allowed in URIs. These characters, if they occur, are present in
the <b class="dm-node-prop">base-uri</b> property and will have to
be encoded and escaped by the application to obtain a URI suitable
for retrieval, if retrieval is required.</p>
<p>In practice a <b class="infoset-property">[base URI]</b> is not
always known. In this case the value of the <b class=
"dm-node-prop">base-uri</b> property of the document node will be
the empty sequence. This is not intrinsically an error, though it
may cause some operations that depend on the base URI to fail.</p>
</dd>
<dt class="label"><b class="dm-node-prop">parent</b></dt>
<dd>
<p>The node corresponding to the value of the <b class=
"infoset-property">[parent]</b> property.</p>
</dd>
</dl>
<p>There are no Processing Instruction Nodes for processing
instructions that are children of a <b class="info-item">document
type declaration information item</b>.</p>
</div>
<div>
<h3><a name="auto-const-infoset-comment" id=
"auto-const-infoset-comment"></a>I.6 Comment Nodes Information
Items</h3>
<p>The <b class="info-item">comment information items</b> are
optional.</p>
<p>A Comment Node is constructed for each <b class=
"info-item">comment information item</b>.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[content]</b> and <b class=
"infoset-property">[parent]</b>.</p>
<p>Comment Node properties are derived from the infoset as
follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">content</b></dt>
<dd>
<p>The value of the <b class="infoset-property">[content]</b>
property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">parent</b></dt>
<dd>
<p>The node corresponding to the value of the <b class=
"infoset-property">[parent]</b> property.</p>
</dd>
</dl>
<p>There are no Comment Nodes for comments that are children of a
<b class="info-item">document type declaration information
item</b>.</p>
</div>
<div>
<h3><a name="auto-const-infoset-text" id=
"auto-const-infoset-text"></a>I.7 Text Nodes Information Items</h3>
<p>The <b class="info-item">character information items</b> are
required. A Text Node is constructed for each maximal sequence of
<b class="info-item">character information items</b> in document
order.</p>
<p>The following infoset properties are required: <b class=
"infoset-property">[character code]</b> and <b class=
"infoset-property">[parent]</b>.</p>
<p>The following infoset properties are optional: <b class=
"infoset-property">[element content whitespace]</b>.</p>
<p>A sequence of <b class="info-item">character information
items</b> is maximal if it satisfies the following constraints:</p>
<ol class="enumar">
<li>
<p>All of the information items in the sequence have the same
parent.</p>
</li>
<li>
<p>The sequence consists of adjacent <b class="info-item">character
information items</b> uninterrupted by other types of information
item.</p>
</li>
<li>
<p>No other such sequence exists that contains any of the same
<b class="info-item">character information items</b> and is
longer.</p>
</li>
</ol>
<p>Text Node properties are derived from the infoset as
follows:</p>
<dl>
<dt class="label"><b class="dm-node-prop">content</b></dt>
<dd>
<p>A string comprised of characters that correspond to the
<b class="infoset-property">[character code]</b> properties of each
of the <b class="info-item">character information items</b>.</p>
<p>If the resulting Text Node consists entirely of whitespace and
the <b class="infoset-property">[element content whitespace]</b>
property of the <b class="info-item">character information
items</b> used to construct this node are <code>true</code>, the
<b class="dm-node-prop">content</b> of the Text Node is the
zero-length string. Text Nodes are only allowed to be empty if they
have no parents; an empty Text Node will be discarded when its
parent is constructed, if it has a parent.</p>
<p>The content of the Text Node is not necessarily normalized as
described in the <a href="#charmod">[Character Model]</a>. It is
the responsibility of data producers to provide normalized text,
and the responsibility of applications to make sure that operations
do not de-normalize text.</p>
</dd>
<dt class="label"><b class="dm-node-prop">parent</b></dt>
<dd>
<p>The node corresponding to the value of the <b class=
"infoset-property">[parent]</b> property.</p>
</dd>
</dl>
</div>
</div>
<div class="div1">
<h2><a name="psvi-construction-summary" id=
"psvi-construction-summary"></a>J PSVI Construction Summary
(Non-Normative)</h2>
<p>This section summarizes data model construction from a PSVI for
each kind of information item. General notes <a href=
"#const-psvi">occur elsewhere</a>.</p>
<div>
<h3><a name="auto-const-psvi-document" id=
"auto-const-psvi-document"></a>J.1 Document Nodes Information
Items</h3>
<p>Construction from a PSVI is identical to construction from the
Infoset.</p>
</div>
<div>
<h3><a name="auto-const-psvi-element" id=
"auto-const-psvi-element"></a>J.2 Element Nodes Information
Items</h3>
<p>The following Element Node properties are affected by PSVI
properties.</p>
<dl>
<dt class="label"><b class="dm-node-prop">type-name</b></dt>
<dd>
<p>The <b class="dm-node-prop">type-name</b> is determined as
described in <a href="#PSVI2NodeTypes"><b>3.3.1.1 Element and
Attribute Node Type Names</b></a>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">children</b></dt>
<dd>
<p>The sequence of nodes constructed from the information items
found in the <b class="infoset-property">[children]</b>
property.</p>
<p>For each element, processing instruction, comment, and maximal
sequence of adjacent <b class="info-item">character information
items</b> found in the <b class="infoset-property">[children]</b>
property, a corresponding Element, Processing Instruction, Comment,
or Text Node is constructed and that sequence of nodes is used as
the value of the <b class="dm-node-prop">children</b> property.</p>
<p>For elements with schema simple types, or complex types with
simple content, if the <b class="infoset-property">[schema
normalized value]</b> PSVI property exists, the processor
<strong>may</strong> use a sequence of nodes containing the
Processing Instruction and Comment Nodes corresponding to the
<b class="info-item">processing instruction</b> and <b class=
"info-item">comment information items</b> found in the <b class=
"infoset-property">[children]</b> property, plus an optional single
Text Node whose string value is the <b class=
"infoset-property">[schema normalized value]</b> for the <b class=
"dm-node-prop">children</b> property. If the <b class=
"infoset-property">[schema normalized value]</b> is the empty
string, the Text Node <strong>must not</strong> be present,
otherwise it <strong>must</strong> be present.</p>
<p>The relative order of Processing Instruction and Comment Nodes
must be preserved, but the position of the Text Node, if it is
present, among them is implementation defined.</p>
<p>The effect of the above rules is that where a fixed or default
value for an element is defined in the schema, and the element
takes this default value, a text node will be created to contain
the value, even though there are no character information items
representing the value in the PSVI. The position of this text node
relative to any comment or processing instruction children is
implementation-dependent.</p>
<p><a href="#xmlschema-1">[Schema Part 1]</a> also permits an
element with mixed content to take a default or fixed value (which
will always be a simple value), but at the time of this writing it
is unclear how such a defaulted value is represented in the PSVI.
Implementations therefore <strong>may</strong> represent such a
default value by creating a text node, but are not required to do
so.</p>
<p>Because the data model requires that all general entities be
expanded, there will never be <b class="info-item">unexpanded
entity reference information item</b> children.</p>
</dd>
<dt class="label"><b class="dm-node-prop">attributes</b></dt>
<dd>
<p>A set of Attribute Nodes constructed from the <b class=
"info-item">attribute information items</b> appearing in the
<b class="infoset-property">[attributes]</b> property. This
includes all of the "special" attributes (<code>xml:lang</code>,
<code>xml:space</code>, <code>xsi:type</code>, etc.) but does not
include namespace declarations (because they are not
attributes).</p>
<p>Default and fixed attributes provided by XML Schema processing
are added to the <b class="infoset-property">[attributes]</b> and
are therefore included in the data model <b class=
"dm-node-prop">attributes</b> of an element.</p>
</dd>
<dt class="label"><b class="dm-node-prop">namespaces</b></dt>
<dd>
<p>A set of Namespace Nodes constructed from the <b class=
"info-item">namespace information items</b> appearing in the
<b class="infoset-property">[in-scope namespaces]</b> property.
Implementations that do not support Namespace Nodes may simply
preserve the relevant bindings in this property.</p>
<p>Implementations <strong>may</strong> ignore <b class=
"info-item">namespace information items</b> for namespaces which
are not known to be used. A namespace is known to be used if:</p>
<ul>
<li>
<p>It appears in the <a title="expanded-QName" href=
"#dt-expanded-qname">expanded QName</a> of the <b class=
"dm-node-prop">node-name</b> of the element.</p>
</li>
<li>
<p>It appears in the <a title="expanded-QName" href=
"#dt-expanded-qname">expanded QName</a> of the <b class=
"dm-node-prop">node-name</b> of any of the element's
attributes.</p>
</li>
<li>
<p>It appears in the <a title="expanded-QName" href=
"#dt-expanded-qname">expanded QName</a> of any values of type
<code>xs:QName</code> that appear among the element's children or
the typed values of its attributes.</p>
</li>
</ul>
<p>Note: applications may rely on namespaces that are not known to
be used, for example when QNames are used in content and that
content does not have a type of <code>xs:QName</code> Such
applications may have difficulty processing data models where some
namespaces have been ignored.</p>
</dd>
<dt class="label"><b class="dm-node-prop">nilled</b></dt>
<dd>
<p>If the <b class="infoset-property">[validity]</b> property
exists on an information item and is "<em>valid</em>" then if the
<b class="infoset-property">[nil]</b> property exists and is true,
then the <b class="dm-node-prop">nilled</b> property is
"<em>true</em>". In all other cases, including all cases where
schema validity assessment was not attempted or did not succeed,
the <b class="dm-node-prop">nilled</b> property is
"<em>false</em>".</p>
</dd>
<dt class="label"><b class="dm-node-prop">string-value</b></dt>
<dd>
<p>The string-value is calculated as follows:</p>
<ul>
<li>
<p>If the element is empty: its string value is the zero length
string.</p>
</li>
<li>
<p>If the element has a type of <code>xs:untyped</code>, a complex
type with element-only content, or a complex type with mixed
content: its string-value is the concatenation of the <b class=
"dm-node-prop">string-value</b>s of all its Text Node descendants
in document order.</p>
</li>
<li>
<p>If the element has a simple type or a complex type with simple
content: its string-value is the <b class=
"infoset-property">[schema normalized value]</b> of the node.</p>
</li>
</ul>
<p>If an implementation stores only the typed value of an element,
it may use any valid lexical representation of the typed value for
the <b class="dm-node-prop">string-value</b> property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">typed-value</b></dt>
<dd>
<p>The typed-value is calculated as follows:</p>
<ul>
<li>
<p>If the element is of type <code>xs:untyped</code>, its
typed-value is its <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> as an
<code>xs:untypedAtomic</code>.</p>
</li>
<li>
<p>If the element has a complex type with empty content, its
typed-value is the empty sequence.</p>
</li>
<li>
<p>If the element has a simple type or a complex type with simple
content: its typed value is computed as described in <a href=
"#TypedValueDetermination"><b>3.3.1.2 Typed Value
Determination</b></a>. The result is a sequence of zero or more
atomic values. The relationship between the type-name, typed-value,
and string-value of an element node is consistent with XML Schema
validation.</p>
<p>Note that in the case of dates and times, the timezone is
preserved as described in <a href="#dates-and-times"><b>3.3.2 Dates
and Times</b></a>, and in the case of <code>xs:QName</code>s and
<code>xs:NOTATION</code>s, the prefix is preserved as described in
<a href="#qnames-and-notations"><b>3.3.3 QNames and
NOTATIONS</b></a>.</p>
</li>
<li>
<p>If the element has a complex type with mixed content (including
<code>xs:anyType</code>), its typed-value is its <span class=
"function"><a href="#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> as an
<code>xs:untypedAtomic</code>.</p>
</li>
<li>
<p>Otherwise, the element must be a complex type with element-only
content. The typed-value of such an element is undefined.
Attempting to access this property with the <span class=
"function"><a href="#dm-typed-value"><span class=
"prefix">dm:</span>typed-value</a></span> accessor always raises an
error.</p>
</li>
</ul>
</dd>
<dt class="label"><b class="dm-node-prop">is-id</b></dt>
<dd>
<p>If the element has a complex type with element-only content, the
<b class="dm-node-prop">is-id</b> property is <code>false</code>.
Otherwise, if the typed-value of the element consists of exactly
one atomic value and that value is of type <code>xs:ID</code>, or a
type derived from <code>xs:ID</code>, the <b class=
"dm-node-prop">is-id</b> property is <code>true</code>, otherwise
it is <code>false</code>.</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>This means that in the case of a type constructed by list from
<code>xs:ID</code>, the ID is recognized provided that the list is
of length one. A type constructed as a union involving
<code>xs:ID</code> is recognized provided the actual value is of
type <code>xs:ID</code>.</p>
</td>
</tr>
</table>
</blockquote>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>The element that is marked with the <b class=
"dm-node-prop">is-id</b> property, and which will therefore be
retrieved by the fn:id function, is the node whose typed value
contains the <code>xs:ID</code> value. This node is a child of the
element node that, according to XML Schema, is uniquely identified
by this ID.</p>
</td>
</tr>
</table>
</blockquote>
</dd>
<dt class="label"><b class="dm-node-prop">is-idrefs</b></dt>
<dd>
<p>If the element has a complex type with element-only content, the
<b class="dm-node-prop">is-idrefs</b> property is
<code>false</code>. Otherwise, if any of the atomic values in the
typed-value of the element is of type <code>xs:IDREF</code> or
<code>xs:IDREFS</code>, or a type derived from one of those types,
the <b class="dm-node-prop">is-idrefs</b> property is
<code>true</code>, otherwise it is <code>false</code>.</p>
</dd>
</dl>
<p>All other properties have values that are consistent with
construction from an infoset.</p>
</div>
<div>
<h3><a name="auto-const-psvi-attribute" id=
"auto-const-psvi-attribute"></a>J.3 Attribute Nodes Information
Items</h3>
<p>The following Attribute Node properties are affected by PSVI
properties.</p>
<dl>
<dt class="label"><b class="dm-node-prop">string-value</b></dt>
<dd>
<ul>
<li>
<p>The <b class="infoset-property">[schema normalized value]</b>
PSVI property if that exists.</p>
</li>
<li>
<p>Otherwise, the <b class="infoset-property">[normalized
value]</b> property.</p>
</li>
</ul>
<p>If an implementation stores only the typed value of an
attribute, it may use any valid lexical representation of the typed
value for the <b class="dm-node-prop">string-value</b>
property.</p>
</dd>
<dt class="label"><b class="dm-node-prop">type-name</b></dt>
<dd>
<p>The <b class="dm-node-prop">type-name</b> is determined as
described in <a href="#PSVI2NodeTypes"><b>3.3.1.1 Element and
Attribute Node Type Names</b></a>.</p>
</dd>
<dt class="label"><b class="dm-node-prop">typed-value</b></dt>
<dd>
<p>The typed-value is calculated as follows:</p>
<ul>
<li>
<p>If the attribute is of type <code>xs:untypedAtomic</code>: its
typed-value is its <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> as an
<code>xs:untypedAtomic</code>.</p>
</li>
<li>
<p>Otherwise, a sequence of zero or more atomic values as described
in <a href="#TypedValueDetermination"><b>3.3.1.2 Typed Value
Determination</b></a>. The relationship between the type-name,
typed-value, and string-value of an attribute node is consistent
with XML Schema validation.</p>
</li>
</ul>
</dd>
<dt class="label"><b class="dm-node-prop">is-id</b></dt>
<dd>
<p>If the attribute is named <code>xml:id</code> and its <b class=
"infoset-property">[attribute type]</b> property does not have the
value <code>xs:ID</code> or a type derived from <code>xs:ID</code>,
then <a href="#xml-id">[xml:id]</a> processing is performed. This
will assure that the value does have the type <code>xs:ID</code>
and that it is properly normalized. If an error is encountered
during xml:id processing, an implementation <strong>may</strong>
raise a dynamic error. The <b class="dm-node-prop">is-id</b>
property is always true for attributes named
<code>xml:id</code>.</p>
<p>Otherwise, if the typed-value of the attribute consists of
exactly one atomic value and that value is of type
<code>xs:ID</code>, or a type derived from <code>xs:ID</code>, the
<b class="dm-node-prop">is-id</b> property is <code>true</code>,
otherwise it is <code>false</code>.</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>This means that in the case of a type constructed by list from
<code>xs:ID</code>, the ID is recognized provided that the list is
of length one. A type constructed as a union involving
<code>xs:ID</code> is recognized provided the actual value is of
type <code>xs:ID</code>.</p>
</td>
</tr>
</table>
</blockquote>
</dd>
<dt class="label"><b class="dm-node-prop">is-idrefs</b></dt>
<dd>
<p>If any of the atomic values in the typed-value of the attribute
is of type <code>xs:IDREF</code> or <code>xs:IDREFS</code>, or a
type derived from one of those types, the <b class=
"dm-node-prop">is-idrefs</b> property is <code>true</code>,
otherwise it is <code>false</code>.</p>
<blockquote>
<table summary="Note" width="90%">
<tr>
<td valign="top" align="left" width="10%"><b>Note:</b></td>
<td valign="top" align="left">
<p>This rule means that a type constructed by list with an item
type of <code>xs:IDREF</code> (or a type derived from
<code>xs:IDREF</code>) has the <b class=
"dm-node-prop">is-idrefs</b> property, whether or not the list type
is named <code>xs:IDREFS</code> or is derived from
<code>xs:IDREFS</code>. Because union types are allowed, it also
means that an element or attribute with the <b class=
"dm-node-prop">is-idrefs</b> property can contain atomic values of
type <code>xs:IDREF</code> alongside values of other types.</p>
</td>
</tr>
</table>
</blockquote>
</dd>
</dl>
<p>All other properties have values that are consistent with
construction from an infoset.</p>
<p>Note: attributes from the XML Schema instance namespace,
"<code>http://www.w3.org/2001/XMLSchema-instance</code>",
(<code>xsi:schemaLocation</code>, <code>xsi:type</code>, etc.)
appear as ordinary attributes in the data model.</p>
</div>
<div>
<h3><a name="auto-const-psvi-namespace" id=
"auto-const-psvi-namespace"></a>J.4 Namespace Nodes Information
Items</h3>
<p>Construction from a PSVI is identical to construction from the
Infoset.</p>
</div>
<div>
<h3><a name="auto-const-psvi-pi" id="auto-const-psvi-pi"></a>J.5
Processing Instruction Nodes Information Items</h3>
<p>Construction from a PSVI is identical to construction from the
Infoset.</p>
</div>
<div>
<h3><a name="auto-const-psvi-comment" id=
"auto-const-psvi-comment"></a>J.6 Comment Nodes Information
Items</h3>
<p>Construction from a PSVI is identical to construction from the
Infoset.</p>
</div>
<div>
<h3><a name="auto-const-psvi-text" id=
"auto-const-psvi-text"></a>J.7 Text Nodes Information Items</h3>
<p>For Text Nodes constructed from the <b class=
"infoset-property">[schema normalized value]</b> of elements,
<b class="dm-node-prop">content</b> contains the value of the
<b class="infoset-property">[schema normalized value]</b>.</p>
<p>Otherwise, construction from a PSVI is the same as construction
from the Infoset except for the <b class="dm-node-prop">content</b>
property. When constructing the <b class="dm-node-prop">content</b>
property, <b class="infoset-property">[element content
whitespace]</b> is not used to test if whitespace is collapsed.
Instead, if the resulting Text Node consists entirely of whitespace
and the <b class="info-item">character information items</b> used
to construct this node have a parent and that parent is an element
and its {content type} is not “<code>mixed</code>”, then the
<b class="dm-node-prop">content</b> of the Text Node is the
zero-length string.</p>
<p>Text Nodes are only allowed to be empty if they have no parents;
an empty Text Node will be discarded when its parent is
constructed, if it has a parent.</p>
</div>
</div>
<div class="div1">
<h2><a name="infoset-mapping-summary" id=
"infoset-mapping-summary"></a>K Infoset Mapping Summary
(Non-Normative)</h2>
<p>This section summarizes the infoset mapping for each kind of
node. General notes <a href="#infoset-mapping">occur
elsewhere</a>.</p>
<div>
<h3><a name="auto-infoset-mapping-document" id=
"auto-infoset-mapping-document"></a>K.1 Document Nodes Information
Items</h3>
<p>A Document Node maps to a <b class="info-item">document
information item</b>. The mapping fails and produces no value if
the Document Node contains Text Node children that do not consist
entirely of white space or if the Document Node contains more than
one Element Node child.</p>
<p>The following properties are specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[children]</b></dt>
<dd>
<p>A list of information items obtained by processing each of the
<span class="function"><a href="#dm-children"><span class=
"prefix">dm:</span>children</a></span> in order and mapping each to
the appropriate information item(s).</p>
</dd>
<dt class="label"><b class="infoset-property">[document
element]</b></dt>
<dd>
<p>The <b class="info-item">element information item</b> that is
among the <b class="infoset-property">[children]</b>.</p>
</dd>
<dt class="label"><b class="infoset-property">[unparsed
entities]</b></dt>
<dd>
<p>An unordered set of <b class="info-item">unparsed entity
information item</b>s constructed from the <b class=
"dm-node-prop">unparsed-entities</b>.</p>
<p>Each unparsed entity maps to an <b class="info-item">unparsed
entity information item</b>. The following properties are specified
by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[name]</b></dt>
<dd>
<p>The name of the entity.</p>
</dd>
<dt class="label"><b class="infoset-property">[system
identifier]</b></dt>
<dd>
<p>The system identifier of the entity.</p>
</dd>
<dt class="label"><b class="infoset-property">[public
identifier]</b></dt>
<dd>
<p>The public identifier of the entity.</p>
</dd>
<dt class="label"><b class="infoset-property">[declaration base
URI]</b></dt>
<dd>
<p>Implementation defined. In the many cases, the <b class=
"dm-node-prop">document-uri</b> is the correct answer and
implementations <strong>must</strong> use this value if they have
no better information. Implementations that keep track of the
original <b class="infoset-property">[declaration base URI]</b> for
entities should use that value.</p>
</dd>
</dl>
<p>The following properties of the <b class="info-item">unparsed
entity information item</b> have no value: <b class=
"infoset-property">[notation name]</b>, <b class=
"infoset-property">[notation]</b>.</p>
</dd>
</dl>
<p>The following properties of the <b class="info-item">document
information item</b> have no value: <b class=
"infoset-property">[notations]</b> <b class=
"infoset-property">[character encoding scheme]</b> <b class=
"infoset-property">[standalone]</b> <b class=
"infoset-property">[version]</b> <b class="infoset-property">[all
declarations processed]</b>.</p>
</div>
<div>
<h3><a name="auto-infoset-mapping-element" id=
"auto-infoset-mapping-element"></a>K.2 Element Nodes Information
Items</h3>
<p>An Element Node maps to an <b class="info-item">element
information item</b>.</p>
<p>The following properties are specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[namespace
name]</b></dt>
<dd>
<p>The namespace name of the value of <span class=
"function"><a href="#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[local name]</b></dt>
<dd>
<p>The local part of the value of <span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[prefix]</b></dt>
<dd>
<p>The prefix associated with the value of <span class=
"function"><a href="#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[children]</b></dt>
<dd>
<p>A list of information items obtained by processing each of the
<span class="function"><a href="#dm-children"><span class=
"prefix">dm:</span>children</a></span> in order and mapping each to
the appropriate information item(s).</p>
</dd>
<dt class="label"><b class="infoset-property">[attributes]</b></dt>
<dd>
<p>An unordered set of information items obtained by processing
each of the <span class="function"><a href=
"#dm-attributes"><span class=
"prefix">dm:</span>attributes</a></span> and mapping each to the
appropriate information item(s).</p>
</dd>
<dt class="label"><b class="infoset-property">[in-scope
namespaces]</b></dt>
<dd>
<p>An unordered set of <b class="info-item">namespace information
items</b> constructed from the <b class=
"dm-node-prop">namespaces</b>.</p>
<p>Each in-scope namespace maps to a <b class="info-item">namespace
information item</b>. The following properties are specified by
this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[prefix]</b></dt>
<dd>
<p>The prefix associated with the namespace.</p>
</dd>
<dt class="label"><b class="infoset-property">[namespace
name]</b></dt>
<dd>
<p>The URI associated with the namespace.</p>
</dd>
</dl>
</dd>
<dt class="label"><b class="infoset-property">[base URI]</b></dt>
<dd>
<p>The value of <span class="function"><a href=
"#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[parent]</b></dt>
<dd>
<ul>
<li>
<p>If this node is the root of the infoset mapping operation,
<em>unknown</em>.</p>
</li>
<li>
<p>If this node has a parent, the information item that corresponds
to the node returned by <span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span>.</p>
</li>
<li>
<p>Otherwise <em>no value</em>.</p>
</li>
</ul>
</dd>
</dl>
<p>The following property has no value: <b class=
"infoset-property">[namespace attributes]</b>.</p>
</div>
<div>
<h3><a name="auto-infoset-mapping-attribute" id=
"auto-infoset-mapping-attribute"></a>K.3 Attribute Nodes
Information Items</h3>
<p>An Attribute Node maps to an <b class="info-item">attribute
information item</b>.</p>
<p>The following properties are specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[namespace
name]</b></dt>
<dd>
<p>The namespace name of the value of <span class=
"function"><a href="#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[local name]</b></dt>
<dd>
<p>The local part of the value of <span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[prefix]</b></dt>
<dd>
<p>The prefix associated with the value of <span class=
"function"><a href="#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[normalized
value]</b></dt>
<dd>
<p>The value of <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[owner
element]</b></dt>
<dd>
<ul>
<li>
<p>If this node has a parent, the information item that corresponds
to the node returned by <span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span>.</p>
</li>
<li>
<p>Otherwise <em>no value</em>.</p>
</li>
</ul>
</dd>
</dl>
<p>The following properties have no value: <b class=
"infoset-property">[specified]</b> <b class=
"infoset-property">[attribute type]</b> <b class=
"infoset-property">[references]</b>.</p>
</div>
<div>
<h3><a name="auto-infoset-mapping-namespace" id=
"auto-infoset-mapping-namespace"></a>K.4 Namespace Nodes
Information Items</h3>
<p>A Namespace Node maps to a <b class="info-item">namespace
information item</b>.</p>
<p>The following properties are specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[prefix]</b></dt>
<dd>
<p>The prefix associated with the namespace.</p>
</dd>
<dt class="label"><b class="infoset-property">[namespace
name]</b></dt>
<dd>
<p>The value of <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span>.</p>
</dd>
</dl>
</div>
<div>
<h3><a name="auto-infoset-mapping-processing-instruction" id=
"auto-infoset-mapping-processing-instruction"></a>K.5 Processing
Instruction Nodes Information Items</h3>
<p>An Processing Instruction Node maps to a <b class=
"info-item">processing instruction information item</b>.</p>
<p>The following properties are specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[target]</b></dt>
<dd>
<p>The local part of the value of <span class="function"><a href=
"#dm-node-name"><span class=
"prefix">dm:</span>node-name</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[content]</b></dt>
<dd>
<p>The value of <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[base URI]</b></dt>
<dd>
<p>The value of <span class="function"><a href=
"#dm-base-uri"><span class=
"prefix">dm:</span>base-uri</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[parent]</b></dt>
<dd>
<ul>
<li>
<p>If this node is the root of the infoset mapping operation,
<em>unknown</em>.</p>
</li>
<li>
<p>If this node has a parent, the information item that corresponds
to the node returned by <span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span>.</p>
</li>
<li>
<p>Otherwise <em>no value</em>.</p>
</li>
</ul>
</dd>
<dt class="label"><b class="infoset-property">[notation]</b></dt>
<dd>
<p><em>no value</em>.</p>
</dd>
</dl>
</div>
<div>
<h3><a name="auto-infoset-mapping-comment" id=
"auto-infoset-mapping-comment"></a>K.6 Comment Nodes Information
Items</h3>
<p>A Comment Node maps to a <b class="info-item">comment
information item</b>.</p>
<p>The following properties are specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[content]</b></dt>
<dd>
<p>The value of the <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span>.</p>
</dd>
<dt class="label"><b class="infoset-property">[parent]</b></dt>
<dd>
<ul>
<li>
<p>If this node is the root of the infoset mapping operation,
<em>unknown</em>.</p>
</li>
<li>
<p>If this node has a parent, the information item that corresponds
to the node returned by <span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span>.</p>
</li>
<li>
<p>Otherwise <em>no value</em>.</p>
</li>
</ul>
</dd>
</dl>
</div>
<div>
<h3><a name="auto-infoset-mapping-text" id=
"auto-infoset-mapping-text"></a>K.7 Text Nodes Information
Items</h3>
<p>A Text Node maps to a sequence of <b class="info-item">character
information items</b>.</p>
<p>Each character of the <span class="function"><a href=
"#dm-string-value"><span class=
"prefix">dm:</span>string-value</a></span> of the node is converted
into a <b class="info-item">character information item</b> as
specified by this mapping:</p>
<dl>
<dt class="label"><b class="infoset-property">[character
code]</b></dt>
<dd>
<p>The Unicode code point value of the character.</p>
</dd>
<dt class="label"><b class="infoset-property">[parent]</b></dt>
<dd>
<ul>
<li>
<p>If this node is the root of the infoset mapping operation,
<em>unknown</em>.</p>
</li>
<li>
<p>If this node has a parent, the information item that corresponds
to the node returned by <span class="function"><a href=
"#dm-parent"><span class="prefix">dm:</span>parent</a></span>.</p>
</li>
<li>
<p>Otherwise <em>no value</em>.</p>
</li>
</ul>
</dd>
<dt class="label"><b class="infoset-property">[element content
whitespace]</b></dt>
<dd>
<p><em>Unknown</em>.</p>
</dd>
</dl>
<p>This sequence of characters constitutes the infoset mapping.</p>
</div>
</div>
</div>
</body>
</html>