ZVON > Tutorials > XML Schema and Relax NG Tutorial
Index | >> Example 4 / 10 << | Prev | Next |
Contents > Wildcard patterns > Attributes from some particular namespace

Attributes from some particular namespace

  1. XML Schema
  2. Relax NG
XML Schema keys: anyAttribute
Relax NG keys: nsName

1. XML Schema

The root element named "root" can have an arbitrary number of attributes from some particular namespaces, let's say "http://bar" and "http://baz". The "namespace" attribute will be set to value "http://bar http://baz".

Valid document


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

Valid document


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

Invalid document
Attribute is from null namespace (that's not allowed).


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

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


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

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:anyAttribute namespace="http://bar http://baz" processContents="skip"/>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

2. Relax NG

We will specify all attributes from namespaces "http://bar" and "http://baz" using the "nsName" element.

Valid document


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

Valid document


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

Invalid document
Attribute is from null namespace (that's not allowed).


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

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


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

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>
        <attribute>
          <choice>
            <nsName ns="http://bar"/>
            <nsName ns="http://baz"/>
          </choice>
          <text/>
        </attribute>
      </zeroOrMore>
      <text/>
    </element>
  </start>
</grammar>