XML Name spaces. Different people may invent similar tag names Here is an XML element describing a...

13
XML Name spaces

Transcript of XML Name spaces. Different people may invent similar tag names Here is an XML element describing a...

Page 1: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

XML Name spaces

Page 2: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

Different people may invent similar tag names

• Here is an XML element describing a piece of furniture:<table> <name>table99</name> <type>dining table</type> <width>80</width> <length>180</length></table>

• Here is an XML element describing a collection of data:<table> <person> <name>Bertie Ahern</name> <type>male</type> </person> <person> <name>Mary Harney</name> <type>female</type> </person></table>

Page 3: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

Distinguishing tags with similar names

• Sometimes an application will involve multiple documents, each containing tags that have the same names but different meanings

• We can distinguish between similar tag names by using prefixes

Page 4: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

Distinguishing tags with similar names (contd.)

• The XML element describing a piece of furniture:<furniture:table> <furniture:name>table99</furniture:name> <furniture:type>dining table</furniture:type> <furniture:width>80</furniture:width> <furniture:length>180</furniture:length></furniture:table>

• The XML element describing a collection of data:<data:table> <data:person> <data:name>Bertie Ahern</data:name> <data:type>male</data:type> </data:person> <data:person> <data:name>Mary Harney</data:name> <data:type>female</data:type> </data:person></data:table>

Page 5: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

Distinguishing tags with similar names (contd.)

• But two different software engineers might even still choose similar prefixes!

• Extract from one application:<furniture:table> <furniture:name>table99</furniture:name> <furniture:type>dining table</furniture:type> <furniture:width>80</furniture:width> <furniture:length>180</furniture:length></furniture:table>

• Extract from another application:<furniture:table> <furniture:price>199</furniture:price> <furniture:status>second-hand</furniture:status></furniture:table>

Page 6: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

Distinguishing tags with similar names (contd.)

• We avoid ambiguity by associating each prefix with something that must be unique– a Universal Resource Identifier

• The association between a prefix and a URI is made using a special XML attribute– the XML Namespace (xmlns) Attribute

• Format of the xmlns attribute:

xmlns:prefix="URI”• Example usages:<furniture:table xmlns:furniture=“http://abc.com”><furniture:table xmlns:furniture=“http://abracadabra.co.uk”>

• By the way: never invent your own tag/attribute names starting with “xml…”– these are reserved for W3C usage

Page 7: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

Distinguishing tags with similar names (contd.)

• When a namespace is defined in the start tag of an element, all child elements with the same prefix are associated with the same namespace

• Example<furniture:table xmlns:furniture=“http://abc.com” > <furniture:name>table99</furniture:name> <furniture:type>dining table</furniture:type> <furniture:width>80</furniture:width> <furniture:length>180</furniture:length></furniture:table>

• In this case, all the furniture prefixes are associated with the http://abc.com URI

Page 8: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

Some more examples• A different furniture example:

<furniture:table xmlns:furniture=“http://abracadabra.co.uk”> <furniture:price>199</furniture:price> <furniture:status>second-hand</furniture:status></furniture:table>

• A personnel data example<data:table xmlns:data=“http://irlgov.ie”> <data:person> <data:name>Bertie Ahern</data:name> <data:type>male</data:type> </data:person> <data:person> <data:name>Mary Harney</data:name> <data:type>female</data:type> </data:person></data:table>

Page 9: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

Default Namespaces• We can reduce the need for prefixes if we define a

default namespace for an element• All tag names in descendant elements are then

understood as implicitly having the same namespace as that for the ancestor element

• The format for a default namespace usage is<someTagName xmlns=“someURI” > … </someTagName>

• Example usage:<furniture:table xmlns:furniture=“http://abracadabra.co.uk”> <furniture:price>199</furniture:price> <furniture:status>second-hand</furniture:status></furniture:table>

is equivalent to:<table xmlns=“http://abracadabra.co.uk”> <price>199</price> <status>second-hand</status></table>

Page 10: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

Example usage of XML namespaces

• A frequent usage of namespaces is in XSL stylesheets• There is an example on the next slide • The XSL stylesheet transforms a particular form of XML

document into XHTML• Thus many of the tags in the stylesheet are XHTML tags• But many tags are are XSL tags

– they are identified as such by having the xsl prefix

– and the semantics of the xsl prefix are defined by associating it with a W3C URI

Page 11: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

<?xml version="1.0"?>

<xsl:transform

xmlns:xsl="http://www.w3.org/1999/XSL/Transform” version="1.0">

<xsl:template match="/">

<html><head><title>Data</title></head>

<body><table rules="all">

<thead><tr><th>Name</th><th>Sex</th></tr></thead>

<tbody>

<xsl:apply-templates/>

</tbody></table></body></html>

</xsl:template>

<xsl:template match="person">

<tr><xsl:apply-templates/></tr>

</xsl:template>

<xsl:template match="male">

<td><xsl:value-of select="."/></td><td>male</td>

</xsl:template>

<xsl:template match="female">

<td> <xsl:value-of select="."/> </td><td>female</td>

</xsl:template>

</xsl:transform>

Page 12: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

An XSL application where there would have been tagname clashes

• Consider the following XML fragment:<table xmlns=“http://abc.com” > <name>table99</name> <type>dining table</type> <width>80</width> <length>180</length></table>

• Suppose we wanted to use XSL to transform elements like this into elements like this

<table xmlns=“http://abc.com” > <name>table99</name> <template>dining table</template> <width>80</width> <length>180</length></table>

• That is, we are replacing an application-specific element having the tagname type with one having the tagname template

Page 13: XML Name spaces. Different people may invent similar tag names Here is an XML element describing a piece of furniture: table99 dining table 80 180 Here.

An XSL application with potential tagname clash (contd.)

• Our XSL stylesheet would have two kinds of template element– one from the XSL language– another from the application-specific furniture language

• We would use the xsl prefix to distinguish one of these from the other

• Here is an extract from the relevant XML stylesheet:

<?xml version="1.0"?>

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform” version="1.0">

...

<xsl:template match="type">

<template><xsl:value-of select="."/></template>

</xsl:template>

...

<xsl:transform>