2. Specifying which RELAX NG schema to use for validating a document

This section is just a primer. The reference documentation about this topic is really XMLmind XML Editor - Configuration and Deployment.

2.1. The relaxng configuration element

A document type declaration (<!DOCTYPE>) can be used to associate a DTD to a document. Attributes xsi:schemaLocation/xsi:noNamespaceSchemaLocation can be used to associate W3C XML Schemas to a document. But there is no standard way to associate a RELAX NG schema to a document. Therefore this association must be made using an external specification such as the Namespace Routing Language (NRL).

In the case of XMLmind XML Editor, this external specification is simply a configuration element called relaxng.

XHTML example:

<configuration name="XHTML Strict [RELAX NG]"
  xmlns:html="http://www.w3.org/1999/xhtml"
  xmlns="http://www.xmlmind.com/xmleditor/schema/configuration">
  <include location="xxe-config:schema/ns_xhtml.incl" />

  <detect>
    <rootElementNamespace>http://www.w3.org/1999/xhtml</rootElementNamespace>
  </detect>

  <relaxng name="http://www.w3.org/1999/xhtml"1
           location="xxe-config:common/rng/xhtml1/xhtml-strict.rng" />

  <preserveSpace elements="html:pre html:style html:script" />2

  <css name="XHTML" location="xhtml_rng.css" />
  <template name="Page" location="page.html" />
</configuration>
1

The name attribute, which is similar to the public ID of a DTD, is absolutely not required. However, if it is absent, the corresponding RELAX NG schema cannot be cached by XXE.

2

Unlike the DTD, xhtml-strict.rng does not specify a preserve default value for attribute xml:space of elements such as pre. Therefore, the preserveSpace configuration element must be used to specify whitespace-preserving elements.

2.2. The <?xxe-relaxng-schema> processing instruction

This processing instruction is a non standard, proprietary, way to associate a document to a RELAX NG schema. Its use should be restricted to testing and other quick and dirty experiments.

DocBook example:

<?xml version="1.0" encoding="UTF-8" ?>
<?xxe-relaxng-schema name="-//OASIS//RELAX NG DocBook V4.3//EN"1
  location="http://www.docbook.org/rng/4.3/docbook.rnc" 
  compactSyntax="true" encoding="US-ASCII" ?>

<!DOCTYPE article [2

<!ENTITY % sgml.features "IGNORE">
<!ENTITY % xml.features "INCLUDE">

<!ENTITY euro "&#x20AC;">

<!ENTITY % dbcent PUBLIC
"-//OASIS//ENTITIES DocBook Character Entities V4.3//EN"
"http://www.oasis-open.org/docbook/xml/4.3/dbcentx.mod">
%dbcent;

]>

<article>
  <title></title>
  <section>
    <title></title>
    <para></para>
  </section>
</article>
1

The <?xxe-relaxng-schema> processing instruction has pseudo-attributes identical to the attributes of the relaxng configuration element.

2

Using a RELAX NG schema should not prevent you from specifying a document type declaration for character entities.

2.3. Sample XXE configurations using RELAX NG schemas

The examples used in this section come from two ready-to-use XXE configurations:

docbook5/

Allows to create and edit DocBook V5.0b1 documents conforming to the RELAX NG schema coming from DocBook.org.

Caution

Do not use this schema and its associated configuration for serious work. This configuration has been created mainly to test the support of RELAX NG in XXE.

xhtml_rng/

Allows to create and edit XHTML 1.0 documents conforming to the modular RELAX NG schema written by James Clark.

Note that these two configurations do not conflict with the DTD-based XHTML and DocBook configurations which are bundled with XXE.

These configurations are found in XXE_install_dir/doc/rngsupport/config/. To use any of them, simply copy the corresponding directory to

  • XXE_install_dir/addon/

  • OR to XXE_user_preferences_dir/addon/ (recommended). XXE user preferences directory is:

    • $HOME/.xxe/ on Unix,

    • %SystemDrive%\Documents and Settings\%USERNAME%\Application Data\XMLmind\XMLeditor\ on Windows 2000/XP,

    • %SystemDrive%\winnt\Profiles\%USERNAME%\Application Data\XMLmind\XMLeditor\ on Windows NT.

For example, to create DocBook documents conforming to a RELAX NG schema, on Windows, copy XXE_install_dir/doc/rngsupport/config/docbook5/ to %SystemDrive%\Documents and Settings\%USERNAME%\Application Data\XMLmind\XMLEditor\addon\.