| RDF-Trine documentation | Contained in the RDF-Trine distribution. |
RDF::Trine::NamespaceMap - Collection of Namespaces
This document describes RDF::Trine::NamespaceMap version 0.135
use RDF::Trine::NamespaceMap;
my $map = RDF::Trine::NamespaceMap->new( \%namespaces );
$serializer->serialize_model_to_string( $model, namespaces => $map );
$map->add_mapping( foaf => 'http://xmlns.com/foaf/0.1/' );
my $foaf_namespace = $map->foaf;
my $foaf_person = $map->foaf('Person');
This module provides an object to manage multiple namespaces for creating RDF::Trine::Node::Resource objects and for serializing.
new ( [ \%namespaces ] )Returns a new namespace map object. You can pass a hash reference with mappings from local names to namespace URIs (given as string or RDF::Trine::Node::Resource).
add_mapping ( $name => $uri )Adds a new namespace to the map. The namespace URI can be passed as string or some object, that provides an uri_value method.
remove_mapping ( $name )Removes a namespace from the map.
namespace_uri ( $name )Returns the namespace object (if any) associated with the given name.
uri ( $prefixed_name )Returns a URI (as RDF::Trine::Node::Resource) for an abbreviated string such as 'foaf:Person'.
Avoid using the names 'can', 'isa', 'VERSION', and 'DOES' as namespace prefix, because these names are defined as method for every Perl object by default. The method names 'new' and 'uri' are also forbidden.
Please report any bugs or feature requests to
<gwilliams@cpan.org>.
Gregory Todd Williams <gwilliams@cpan.org>
Copyright (c) 2006-2010 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| RDF-Trine documentation | Contained in the RDF-Trine distribution. |
# RDF::Trine::NamespaceMap # -----------------------------------------------------------------------------
package RDF::Trine::NamespaceMap; use strict; use warnings; no warnings 'redefine'; use Scalar::Util qw(blessed); use Data::Dumper; ###################################################################### our ($VERSION); BEGIN { $VERSION = '0.135'; } ######################################################################
sub new { my $class = shift; my $map = shift || {}; my $self = bless( {}, $class ); foreach my $name ( keys %$map ) { $self->add_mapping( $name => $map->{$name} ); } return $self; }
sub add_mapping { my $self = shift; my $name = shift; if ($name =~ /^(new|uri|can|isa|VERSION|DOES)$/) { # reserved names throw RDF::Trine::Error::MethodInvocationError -text => "Cannot use reserved name '$name' as a namespace prefix"; } my $ns = shift; foreach (qw(1 2)) { # loop twice because the first call to C<<uri_value>> might return a # RDF::Trine::Namespace. Calling C<<uri_value>> on the namespace object # will then return a URI string value. if (blessed($ns) and $ns->can('uri_value')) { $ns = $ns->uri_value; } } $ns = RDF::Trine::Namespace->new( $ns ); $self->{ $name } = $ns; }
sub remove_mapping { my $self = shift; my $name = shift; delete $self->{ $name }; }
sub namespace_uri { my $self = shift; my $name = shift; return $self->{ $name }; }
sub uri { my $self = shift; my $abbr = shift; my $ns; my $local = ""; if ($abbr =~ m/^([^:]+):(.*)$/) { $ns = $self->{ $1 }; $local = $2; } else { $ns = $self->{ $abbr }; } return unless (blessed($ns)); if ($local ne '') { return $ns->$local(); } else { return $ns->uri_value; } } sub AUTOLOAD { my $self = shift; our $AUTOLOAD; return if ($AUTOLOAD =~ /:DESTROY$/); my ($name) = ($AUTOLOAD =~ m/^.*:(.*)$/); my $ns = $self->{ $name }; return unless (blessed($ns)); if (scalar(@_)) { my $local = shift(@_); return $ns->$local( @_ ); } else { return $ns; } } 1; # Magic true value required at end of module __END__