Common Principles for Annotating RELAX NG Schemas

RELAX NG doesn’t define specific elements and attributes reserved for annotations. Instead, RELAX NG opened its language. RELAX NG permits foreign attributes—attributes from any namespace other than the RELAX NG namespace—to appear on all its elements. RELAX NG also allows elements either from no namespace or from any namespace other than the RELAX NG namespace in all its elements with a content model that is empty or element only. (That excludes all RELAX NG elements except value and param, which have a text-only content model.) RELAX NG is thus strictly following the principles of an open schema presented in the previous chapter.

Annotation Using the XML Syntax

In the XML syntax, adding annotations is both easy and flexible. It’s a very straightforward process to add annotations using foreign elements. For instance, here I’ve added some Dublin Core (dc) elements to our grammar to identify its title and author:

<?xml version="1.0" encoding="utf-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:dc=
                    "http://purl.org/dc/elements/1.1/">
  <dc:title>RELAX NG flat schema for our library</dc:title>
  <dc:author>Eric van der Vlist</dc:author>
  <start>
    <element name="library">
      <oneOrMore>
        <ref name="book-element"/>
      </oneOrMore>
    </element>
  </start>
  ...
</grammar>

or perhaps some XHTML documentation:

<?xml version="1.0" encoding="utf-8"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:xhtml= "http://www.w3.org/1999/xhtml"> ...

Get RELAX NG 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.