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

Including in Relax NG - include element, ns attribute

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

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

When using the "include" element, the included file must have the "grammar" root element. 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 include 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">
      <ref name="myType"/>
    </element>
  </start>

  <include href="correctRelax_1.rng"/>
</grammar>

Correct Relax NG schema (correctRelax_1.rng)


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

  <define name="myType">
    <element name="x">
      <text/>
    </element>
  </define>
</grammar>

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">
      <ref name="myType"/>
    </element>
  </start>

  <include href="correctRelax_1.rng"/>
</grammar>

Correct Relax NG schema (correctRelax_1.rng)


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

  <define name="myType">
    <element name="x">
      <text/>
    </element>
  </define>
</grammar>