Validate an XML Document with RELAX NG

Compared to the alternatives, RELAX NG schemas are easy to use and learn, and the more you use them the more you become convinced.

RELAX NG (http://www.relaxng.org) is a powerful schema language with a simple syntax. Originally, RELAX NG was developed in a small OASIS technical committee led by James Clark. It is based on ideas from Clark’s TREX (http://www.thaiopensource.com/trex/) and Murata Makoto’s Relax (http://www.xml.gr.jp/relax/), and its first committee spec was published on December 3, 2001 (http://www.oasis-open.org/committees/relax-ng/spec.html). A tutorial is also available (http://www.oasis-open.org/committees/relax-ng/tutorial.html). Recently, RELAX NG became an international standard under ISO as ISO/IEC 19757-2:2004, Information technology— Document Schema Definition Language (DSDL)—Part 2: Regular-grammar-based validation—RELAX NG (see http://www.y12.doe.gov/sgml/sc34/document/0458.htm).

RELAX NG schemas may be written in either XML or a compact syntax. This hack demonstrates both.

XML Syntax

Recall the document time.xml:

<?xml version="1.0" encoding="UTF-8"?>
   
<!-- a time instant -->
<time timezone="PST">
 <hour>11</hour>
 <minute>59</minute>
 <second>59</second>
 <meridiem>p.m.</meridiem>
 <atomic signal="true"/>
</time>

Here is a RELAX NG schema for time.xml called time.rng:

<element name="time" xmlns="http://relaxng.org/ns/structure/1.0"> <attribute name="timezone"/> <element name="hour"><text/></element> <element name="minute"><text/></element> ...

Get XML Hacks now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.