ZVON > Tutorials > XML Schema and Relax NG Tutorial
Index | >> Example 3 / 3 << | Prev | Next |
Contents > attributeFormDefault > Target namespace is null

Target namespace is null

  1. qualified
  2. unqualified
  3. Relax NG
XML Schema keys: attributeFormDefault, attribute
Relax NG keys: attribute, ns

1. qualified

The target namespace is null here. The attribute "attributeFormDefault" does not play any role here.

Valid document


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

Invalid document
The attribute "xx" must be from null namespace.


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

Correct XML Schema (correct_0.xsd)


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

  <xsd:element name="root">
    <xsd:complexType>
      <xsd:attribute name="xx" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

2. unqualified

When the form is "unqualified" (this is the default), the attributes must be from the null namespace. The attribute "attributeFormDefault" does not play any role here.

Valid document


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

Invalid document
The attribute "xx" must be from null namespace.


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

Correct XML Schema (correct_0.xsd)


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

  <xsd:element name="root">
    <xsd:complexType>
      <xsd:attribute name="xx" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

3. Relax NG

We can set the namespace using the "ns" attribute, but if we want the attributes to be from some non-null namespace, we must explicitly put the "ns" attribute either to the "attribute/name" element or to the "attribute[@name]" element.

Valid document


<root xx="1" xmlns=""/>

Invalid document
The attribute "xx" must be from null namespace.


<root f:xx="1" xmlns="" xmlns:f="http://foo" />

Correct Relax NG schema (correctRelax_0.rng)


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

  <start>
    <element name="root">
      <attribute name="xx">
        <text/>
      </attribute>
      <empty/>
    </element>
  </start>
</grammar>