ZVON > Tutorials > XML Schema and Relax NG Tutorial
Index | >> Example 7 / 8 << | Prev | Next |
Contents > Including > Including in Relax NG - externalRef element, ns attribute

Including in Relax NG - externalRef element, ns attribute

  1. Relax NG - no "ns" attribute in included document
  2. Relax NG - "ns" attribute in included document
Relax NG keys: externalRef

1. Relax NG - no "ns" attribute in included document

When using the "externalRef" element, the root element of the included file must match the syntax of a pattern. In this example there is no "ns" attribute in the included document. During the schema processing, the document is included before the "ns" attribute is propagated, so the value of "ns" attribute will propagate to the included document. We validate the XML files against the first Relax NG schema (which includes the second one). See externalRef element.

Valid document


<foo:root xmlns:foo="http://foo" >
  <foo:x>dhhglh</foo:x>
</foo:root>

Invalid document


<foo:root xmlns:foo="http://foo" >
  <x xmlns="">dhhglh</x>
</foo:root>

Correct Relax NG schema (correctRelax_0.rng)


<grammar ns="http://foo" xmlns="http://relaxng.org/ns/structure/1.0" >

  <start>
    <element name="root">
      <externalRef href="correctRelax_1.rng"/>
    </element>
  </start>
</grammar>

Correct Relax NG schema (correctRelax_1.rng)


<element name="x" xmlns="http://relaxng.org/ns/structure/1.0" >
  <text/>
</element>

2. Relax NG - "ns" attribute in included document

In this example the "ns" attribute is set to null-namespace in the included document. During the schema processing, the document is included before the "ns" attribute is propagated, so the value of "ns" attribute will propagate to the included document. We validate the XML files against the first Relax NG schema (which includes the second one).

Valid document


<foo:root xmlns:foo="http://foo" >
  <x xmlns="">dhhglh</x>
</foo:root>

Invalid document


<foo:root xmlns:foo="http://foo" >
  <foo:x>dhhglh</foo:x>
</foo:root>

Correct Relax NG schema (correctRelax_0.rng)


<grammar ns="http://foo" xmlns="http://relaxng.org/ns/structure/1.0" >

  <start>
    <element name="root">
      <externalRef href="correctRelax_1.rng"/>
    </element>
  </start>
</grammar>

Correct Relax NG schema (correctRelax_1.rng)


<element name="x" ns="" xmlns="http://relaxng.org/ns/structure/1.0" >
  <text/>
</element>