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 location="xxe-config:common/rng/xhtml1/xhtml-strict.rng" />1

  <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 relaxng configuration element specifies the location of the RELAX NG schema (XML syntax or compact syntax) to which conforms the document being opened.

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

The following 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 the following XXE configurations:

Bundled DocBook 5 configuration

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

Add-on "Customization of the DocBook 5 configuration allowing to edit <xi:include> elements by hand"

This customization the DocBook 5 configuration allows to edit xi:include elements by hand, exactly like any ordinary DocBook element. With the stock DocBook 5 configuration, xi:include elements are transcluded, which means that such elements exist only at document open time and at document save time.

Installing this customization is definitely not recommended for a normal usage of DocBook 5. However, if you need it, you may download it and install it using OptionsInstall Add-ons.

Add-on "XHTML 1.0/RELAX NG configuration"

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

This RELAX NG-based configuration does not conflict with the bundled DTD-based XHTML configuration. If you want to experiment with it, you may download it and install it using OptionsInstall Add-ons.

Caution

This configuration should be considered as a work in progress. If you just want to author XHTML documents, do not use this RELAX NG-based configuration. Rather use the bundled, DTD-based, configuration which is much more mature.