- XML Reference Guide
- Overview
- What Is XML?
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- Table of Contents
- The Document Object Model
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- DOM and Java
- Informit Articles and Sample Chapters
- Books and e-Books
- Implementations
- DOM and JavaScript
- Using a Repeater
- Repeaters and XML
- Repeater Resources
- DOM and .NET
- Informit Articles and Sample Chapters
- Books and e-Books
- Documentation and Downloads
- DOM and C++
- DOM and C++ Resources
- DOM and Perl
- DOM and Perl Resources
- DOM and PHP
- DOM and PHP Resources
- DOM Level 3
- DOM Level 3 Core
- DOM Level 3 Load and Save
- DOM Level 3 XPath
- DOM Level 3 Validation
- Informit Articles and Sample Chapters
- Books and e-Books
- Documentation and Implementations
- The Simple API for XML (SAX)
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- SAX and Java
- Informit Articles and Sample Chapters
- Books and e-Books
- SAX and .NET
- Informit Articles and Sample Chapters
- SAX and Perl
- SAX and Perl Resources
- SAX and PHP
- SAX and PHP Resources
- Validation
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- Document Type Definitions (DTDs)
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- XML Schemas
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- RELAX NG
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- Schematron
- Official Documentation and Implementations
- Validation in Applications
- Informit Articles and Sample Chapters
- Books and e-Books
- XSL Transformations (XSLT)
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- XSLT in Java
- Java in XSLT Resources
- XSLT and RSS in .NET
- XSLT and RSS in .NET Resources
- XSL-FO
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- XPath
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- XML Base
- Informit Articles and Sample Chapters
- Official Documentation
- XHTML
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- XHTML 2.0
- Documentation
- Cascading Style Sheets
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- XUL
- XUL References
- XML Events
- XML Events Resources
- XML Data Binding
- Informit Articles and Sample Chapters
- Books and e-Books
- Specifications
- Implementations
- XML and Databases
- Informit Articles and Sample Chapters
- Books and e-Books
- Online Resources
- Official Documentation
- SQL Server and FOR XML
- Informit Articles and Sample Chapters
- Books and e-Books
- Documentation and Implementations
- Service Oriented Architecture
- Web Services
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- Creating a Perl Web Service Client
- SOAP::Lite
- Amazon Web Services
- Creating the Movable Type Plug-in
- Perl, Amazon, and Movable Type Resources
- Apache Axis2
- REST
- REST Resources
- SOAP
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- SOAP and Java
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- WSDL
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- UDDI
- UDDI Resources
- XML-RPC
- XML-RPC in PHP
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- Ajax
- Asynchronous Javascript
- Client-side XSLT
- SAJAX and PHP
- Ajax Resources
- JSON
- Ruby on Rails
- Creating Objects
- Ruby Basics: Arrays and Other Sundry Bits
- Ruby Basics: Iterators and Persistence
- Starting on the Rails
- Rails and Databases
- Rails: Ajax and Partials
- Rails Resources
- Web Services Security
- Web Services Security Resources
- SAML
- Informit Articles and Sample Chapters
- Books and e-Books
- Specification and Implementation
- XML Digital Signatures
- XML Digital Signatures Resources
- XML Key Management Services
- Resources for XML Key Management Services
- Internationalization
- Resources
- Grid Computing
- Grid Resources
- Web Services Resource Framework
- Web Services Resource Framework Resources
- WS-Addressing
- WS-Addressing Resources
- WS-Notifications
- New Languages: XML in Use
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- Google Web Toolkit
- GWT Basic Interactivity
- Google Sitemaps
- Google Sitemaps Resources
- Accessibility
- Web Accessibility
- XML Accessibility
- Accessibility Resources
- The Semantic Web
- Defining a New Ontology
- OWL: Web Ontology Language
- Semantic Web Resources
- Google Base
- Microformats
- StructuredBlogging
- Live Clipboard
- WML
- XHTML-MP
- WML Resources
- Google Web Services
- Google Web Services API
- Google Web Services Resources
- The Yahoo! Web Services Interface
- Yahoo! Web Services and PHP
- Yahoo! Web Services Resources
- eBay REST API
- WordML
- WordML Part 2: Lists
- WordML Part 3: Tables
- WordML Resources
- DocBook
- Articles
- Books and e-Books
- Official Documentation and Implementations
- XML Query
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- XForms
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- Resource Description Framework (RDF)
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- Topic Maps
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation, Implementations, and Other Resources
- Rich Site Summary (RSS)
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- Simple Sharing Extensions (SSE)
- Atom
- Podcasting
- Podcasting Resources
- Scalable Vector Graphics (SVG)
- Informit Articles and Sample Chapters
- Books and e-Books
- Official Documentation
- OPML
- OPML Resources
- Summary
- Projects
- JavaScript TimeTracker: JSON and PHP
- The Javascript Timetracker
- Refactoring to Javascript Objects
- Creating the Yahoo! Widget
- Web Mashup
- Google Maps
- Indeed Mashup
- Mashup Part 3: Putting It All Together
- Additional Resources
- Frequently Asked Questions About XML
- What's XML, and why should I use it?
- What's a well-formed document?
- What's the difference between XML and HTML?
- What's the difference between HTML and XHTML?
- Can I use XML in a browser?
- Should I use elements or attributes for my document?
- What's a namespace?
- Where can I get an XML parser?
- What's the difference between a well-formed document and a valid document?
- What's a validating parser?
- Should I use DOM or SAX for my application?
- How can I stop a SAX parser before it has parsed the entire document?
- 2005 Predictions
- 2006 Predictions
- Nick's Book Picks
So far in this series of entries on the Document Object Model Level 3, I've tried to provide a look at a simple implementation, but for DOM Level 3 Validation, that's not so easy. Xerces almost provides a partial implementation, but it's left over from the experimental implementation of the DOM Level 3 Abstract Schema and Load and Save drafts that were split out into the Validation and Load and Save recommendations.
The end result is that it's hard for me to show you a simple implementation; the implementation report shows only the large systems Oracle, X-Hive and Arbortext. For the sake of completeness, however, I still want to make sure you understand what's available in this specification, which is also available to various degrees in other places.
If you've been reading this series on DOM Level 3, you may wonder why we even need another recommendation for validation. After all, the DOM Level 3 Core does provide some handy capabilites, such as the ability to specify a schema (note the small "s") against which a document should be validated when parsed or at some time afterwards. Well, DOM Level 3 Validation takes things just a little farther than that.
The most striking difference is that while the validation capabilites in the Core are geared towards finding out whether a document you're loading conforms to a particular schema, the Validation recommendation is geared towards making it easier to actually work with a document without making it invalid.
Now, don't get me wrong, both recommendations enable you to validate a document that already exists, and to specify that no changes should be made to the document unless they are within the boundaries defined by the schema. But the Validation recommendation enables you to perform tasks such as determining the validity of a single node or tree of nodes, or even character data. It also provides the ability to determine just what changes you can make to a particular node.
Perhaps the best way to get a feel for what we have here is to look at the interfaces that the recommendation defines:
A NodeEditVAL
is also, as specified,
a Node
, just as a DocumentLS
is also a Document
.
But in addition to the normal operations you can perform with a Node
, such
as appendChild()
or insertBefore()
, a NodeEditVAL
provides operations such as canAppendChild()
and canInsertBefore()
,
which enable you to test the proposed operation against the required structure before
performing it. It also provides you with the defaultValue
, if applicable,
or the enumeratedValues
, in the case of multiple possiblities. The
NodeEditVAL
interface also lets you check the nodeValidity
.
The ElementEditVAL
extends NodeEditVal
,
and is designed to assist in editing elements. For example, it provides attributes
such as allowedChildren
, allowedFirstChildren
,
and allowedNextSiblings
, as well as methods such as canSetAttribute()
and canSetTextContent().
The CharacterDataEditVAL
also extends NodeEditVAL
.
It provides guidance on editing the text of a node, with methods such as
canSetData()
, canAppendData()
and canDeleteData()
.
It also provides a isWhitespaceOnly()
method that helps you determine
whether you can safely ignore the node altogether.
The DocumentEditVAL
interface also extends NodeEditVAL
,
and an object implementing it must also implement the Document
interface.
It provides the continuousValidityChecking
attribute, which controls
whether you can make changes that violate the schema, as well as the validateDocument()
method, which lets you validate the document after it already exists.
It also provides the getDefinedElements()
method, which
provides the names of all of the "globally defined" elements for a
particular namespace. These are elements that are defined independently of
their context, and can theoretically be used anywhere in the document.
This is by no means a complete look at everything in the recommendation, but it should be enough for you to have a good grasp of what it's all about so that if the DOM Level 3 Validation Recommendation looks like something useful to you, you can read through it with a good understanding of what it's all about.