---
name: "XML::Namespace"
section: "3pm"
platform: "linux"
package: "libxml-namespace-perl"
version: "0.02-6"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/XML::Namespace"
---

# XML::Namespace(3pm)

Simple support for XML Namespaces

## NAME

XML::Namespace - Simple support for XML Namespaces

## SYNOPSIS

```
 Example 1: using XML::Namespace objects
    use XML::Namespace;
    my $xsd = XML::Namespace->new('http://www.w3.org/2001/XMLSchema#');
    # explicit access via the uri() method
    print $xsd->uri();           # http://www.w3.org/2001/XMLSchema#
    print $xsd->uri('integer');  # http://www.w3.org/2001/XMLSchema#integer
    # implicit access through AUTOLOAD method
    print $xsd->integer;         # http://www.w3.org/2001/XMLSchema#integer
 Example 2: importing XML::Namespace objects
    use XML::Namespace
        xsd => 'http://www.w3.org/2001/XMLSchema#',
        rdf => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
    # xsd and rdf are imported subroutines that return
    # XML::Namespace objects which can be used as above
    print xsd->uri('integer');   # http://www.w3.org/2001/XMLSchema#integer
    print xsd->integer;          # http://www.w3.org/2001/XMLSchema#integer
```

## DESCRIPTION

This module implements a simple object for representing XML Namespaces in Perl.  It provides little more than some syntactic sugar for your Perl programs, saving you the bother of typing lots of long-winded URIs.  It was inspired by the Class::RDF::NS module distributed as part of Class::RDF.

### Using XML::Namespace Objects

First load the XML::Namespace module.

```
    use XML::Namespace;
```

Then create an XML::Namespace object.

```
    my $xsd = XML::Namespace->new('http://www.w3.org/2001/XMLSchema#');
```

Then use the **uri()** method to return an absolute URI from a relative path.

```
    print $xsd->uri('integer'); # http://www.w3.org/2001/XMLSchema#integer
```

Alternately, use the AUTOLOAD method to map method calls to the  **uri()** method.

```
    print $xsd->integer;        # http://www.w3.org/2001/XMLSchema#integer
```

### Importing XML::Namespace Objects

When you `"use"` the XML::Namespace module, you can specify a list of namespace definitions.

```
    use XML::Namespace
        xsd => 'http://www.w3.org/2001/XMLSchema#',
        rdf => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
```

This defines the `"xsd"` and `"rdf"` subroutines and exports them into the calling package.  The subroutines simply return XML::Namespace objects initialised with the relevant namespace URIs.

```
    print xsd->uri('integer');  # http://www.w3.org/2001/XMLSchema#integer
    print xsd->integer;         # http://www.w3.org/2001/XMLSchema#integer
```

### Overloaded Stringification Method

The XML::Namespace module overloads the stringification operator to return the namespace URI.

```
    my $xsd = XML::Namespace->new('http://www.w3.org/2001/XMLSchema#');
    print $xsd;           # http://www.w3.org/2001/XMLSchema#
```

## METHODS

### new($uri)

Constructor method which creates a new XML::Namespace object.  It expects a single argument denoting the URI that the namespace is to represent.

```
    use XML::Namespace;
    my $xsd = XML::Namespace->new('http://www.w3.org/2001/XMLSchema#');
```

### uri($path)

When called without arguments, this method returns the URI of the namespace object, as defined by the argument passed to the **new()** constructor method.

```
    $xsd->uri();          # http://www.w3.org/2001/XMLSchema#
```

An argument can be passed to indicate a path relative to the namespace URI.  The method returns a simple concatenation of the namespace URI and the relative path argument.

```
    $xsd->uri('integer'); # http://www.w3.org/2001/XMLSchema#integer
```

### import($name,$uri,$name,$uri,...)

This method is provided to work with the Exporter mechanism.  It expects a list of `"($name, $uri)"` pairs as arguments.  It creates XML::Namespace objects and accessor subroutines that are then exported to the caller's package.

Although not intended for manual invocation, there's nothing to stop you from doing it.

```
    use XML::Namespace;
    XML::Namespace->import( xsd => 'http://www.w3.org/2001/XMLSchema#' );
    xsd()->integer;   # http://www.w3.org/2001/XMLSchema#integer
```

Note that the parentheses are required when accessing this subroutine.

```
    xsd()->integer;     # Good
    xsd->integer;       # Bad
```

Unlike those that are defined automatically by the Importer, Perl doesn't know anything about these subroutines at compile time. Without the parentheses, Perl will think you're trying to call the `"integer"` method on an unknown `"xsd"` package and you'll see an error like:

```
    Can't locate object method "integer" via package "xsd"
```

That's why it's better to define your namespaces when you load the  XML::Namespace module.

```
    use XML::Namespace
        xsd => 'http://www.w3.org/2001/XMLSchema#';
    xsd->integer;       # Good
```

### AUTOLOAD

The module defines an AUTOLOAD method that maps all other method calls to the **uri()** method.  Thus, the following return the same value.

```
    $xsd->uri('integer'); # http://www.w3.org/2001/XMLSchema#integer
    $xsd->integer;        # http://www.w3.org/2001/XMLSchema#integer
```

## AUTHOR

Andy Wardley \<mailto:abw@cpan.org\>

## VERSION

This is version 0.02 of XML::Namespace.

## COPYRIGHT

Copyright (C) 2005 Andy Wardley.  All Rights Reserved.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## SEE ALSO

The Class::RDF::NS module, distributed as part of Class::RDF, provided the inspiration for the module.  XML::Namespace essentially does the same thing, albeit in a slightly different way.  It's also available as a stand-alone module for use in places unrelated to RDF.

The XML::NamespaceFactory module also implements similar functionality to XML::Namespace, but instead uses the JClark notation (e.g. "{http://foo.org/ns/}title").
