ZVON > Tutorials > XML Schema and Relax NG Tutorial
Index | >> Example 9 / 10 << | Prev | Next |
Contents > Wildcard patterns > Elements from namespace other than target namespace (which is not null)

Elements from namespace other than target namespace (which is not null)

  1. XML Schema
  2. Relax NG
XML Schema keys: any, maxOccurs
Relax NG keys: anyName, except, nsName

1. XML Schema

The root element named "root" can have an arbitrary number of any elements from namespace other than the target namespace. The target namespace is not null here. The "namespace" attribute will be set to value "##other". It will allow all elements which are from namespace other than targetNamespace.

Valid document


<root xsi:schemaLocation="http://foo correct_0.xsd" xmlns="http://foo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <a:a xmlns:a="http://bar" />
</root>

Valid document
The element can be from null namespace.


<root xsi:schemaLocation="http://foo correct_0.xsd" xmlns="http://foo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <a xmlns=""/>
</root>

Invalid document
Element is from the targetNamespace (that's not allowed).


<foo:root xsi:schemaLocation="http://foo correct_0.xsd" xmlns:foo="http://foo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <foo:a/>
</foo:root>

Correct XML Schema (correct_0.xsd)


<xsd:schema targetNamespace="http://foo" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >

  <xsd:element name="root">
    <xsd:complexType>
      <xsd:sequence minOccurs="1" maxOccurs="1">
        <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

2. Relax NG

The element "anyName" says that the attribute can have any name from any namespace. We will exclude all attributes from the "target namespace" using the "except" and "nsName" elements.

Valid document


<root xmlns="http://foo" >
  <a:a xmlns:a="http://bar" />
</root>

Valid document
The element can be from null namespace.


<root xmlns="http://foo" >
  <a xmlns=""/>
</root>

Invalid document
Element is from the namespace "http://foo" (that's not allowed).


<foo:root xmlns:foo="http://foo" >
  <foo:a/>
</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</name>
      <zeroOrMore>
        <element>
          <anyName>
            <except>
              <nsName ns="http://foo"/>
            </except>
          </anyName>
          <text/>
        </element>
      </zeroOrMore>
    </element>
  </start>
</grammar>