PB138 — XML Namespaces

(C) 2018 Masaryk University --- Tomáš Pitner, Luděk Bártek, Adam Rambousek

XML Namespaces (jmenné prostory)

  • XML Namespaces (W3C Recommendation, currently Namespaces in XML 1.0 (Third Edition) W3C Recommendation 8 Dec 2009): http://www.w3.org/TR/REC-xml-names

  • to new XML, there exists Namespaces in XML 1.1 W3C Recommendation (Second Edition) 16 August 2006. Andrew Layman, Richard Tobin, Tim Bray, Dave Hollander

  • They define logical spaces for names of elements, attributes in XML document.

  • They give the elements and attributes the "third dimension".

  • To each NS in XML, there is exactly one ("globally") unique identifier, given by URI (URIs is a superset of URLs).

  • NS corresponding to an URI does not anyhow relate to content that would potentially be available under the URL ("nothing is downloaded when processing NSs".

Prefixes and Equivalence of NSs (1)

  • Instead of URIs for denoting a namespace in document, one uses prefixes for these NS mapped to the respective URI using xmlns:prefix="URI".

  • Element- or attribute-name containing colon (:) is denoted as Qualified Name, QName.

Prefixes and Equivalence of NSs (2)

  • Two NS are equal iff their URIs are one-to-one-character the same (in UNICODE).

  • Namespaces do not apply to text nodes.

  • Element/attribute need not be in a namespace.

Prefixes and Equivalence of NSs (3)

  • NS prefix declaration or declaration or the implicit NS recursively applies to all descendants (child elements, their children etc.), unless another declaration "remaps" the given prefix.

  • One NS is co-called implicit (default) NS, declared by attribute xmlns=

  • Default NSs are NOT applied to attributes!!!, thus attributes without an explicit prefix do not belong to any NS.

Example 1. Default NS

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <body>
     <h1>Huraaaa</h1>
  </body>
</html>

Example 2. Prefixed NS

<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <xhtml:body>
     <xhtml:h1>Huraaaa</xhtml:h1>
  </xhtml:body>
</xhtml:html>