NAME
XMLNews::Meta - A module for reading and writing XMLNews metadata files.
SYNOPSIS
  use XMLNews::Meta;
  my $namespace = "http://www.xmlnews.org/namespaces/meta#";
				# Create a Meta object.
  my $meta = new XMLNews::Meta();
				# Read in the metadata file.
  $meta->importRDF("data.rdf");
				# Look up a singleton value.
  my $expireTime = $meta->getValue($namespace, "expireTime");
				# Add a new value to a property.
  $meta->addValue($namespace, "companyCode", "WAVO");
				# Write the metadata back out.
  $meta->exportRDF("data.rdf");
DESCRIPTION
NOTE: This module requires the XML::Parser module, version 2.19 or higher.
WARNING: This module is not re-entrant or thread-safe due to the use of static variables while importing XML.
The XMLNews::Meta module handles the import, export, and programmatic manipulation of metadata for XMLNews resources. You can read or write a metadata file using a single method call, and can easily add or remove values.
Traditionally, resource files consist of simple pairs of the form
NAME = VALUE
XMLNews metadata, which is based on the W3C's Resource Description Format (RDF), allows richer metadata in two ways:
Property names are partitioned into namespaces, so that two different providers can use the same property name without fear of collision (a namespaces is simply a URI (URL or URN); following RDF practice, the URI should end with the fragment separator "#". To look up a property, you always need to use both the namespace and the property name:
$xn_ns = "http://www.xmlnews.org/namespaces/meta#"; # Use getValue only for # singleton values!!! $title = $meta->getValue($xn_ns, "title"); $creator = $meta->getValue($xn_ns, "creator");The same property can have more than one value, which the getValues method will deliver as an array:
$xn_ns = "http://www.xmlnews.org/namespaces/meta#"; @companyCodes = $meta->getValues($xn_ns, 'companyCodes');
METHODS
- new()
 - 
Create a new (empty) metadata collection:
use XMLNews::Meta; my $meta = new XMLNews::Meta();Once you have created the collection, you can add values manually using the addValue() method, or import one or more files into the collection using the importRDF() method.
 - importRDF(INPUT)
 - 
Read an RDF file from the IO::Handle input stream provided, and add its properties to this metadata collection:
$meta->importRDF($handle);If INPUT is a string, it will be treated as a file name; otherwise, it will be treated as an instance of IO::Handle.
Note that duplicate properties will not be filtered out, so it is possible to have the same property with the same value more than once. Importing a file does not remove any properties already in the collection.
 - exportRDF(OUTPUT)
 - 
Export all of the properties in the collection to an IO::Handle output stream of some sort:
$meta->exportRDF($output);If OUTPUT is a string, it will be treated as a file name; otherwise, it will be treated as an instance of IO::Handle.
The XML::Meta module will create its own namespace prefixes for the different namespaces in the document, but the namespaces themselves will not be changed.
 - getValues(NAMESPACE, PROPERTY)
 - 
Return all of the values for a property in a namespace as an array. If the property does not exist, return an empty array:
my $namespace = "http://www.xmlnews.org/namespaces/meta#"; my @people = $meta->getValues($namespace, 'personName'); foreach $person (@people) { print "This resource mentions $person\n"; }Note that it is always necessary to provide a namespace as well as a property name; the property 'personName' might have a different meaning in another namespace.
(When you know for certain that a property will never have more than one value, you can use the getValue() method instead to avoid dealing with an array.)
 - getValue(NAMESPACE, PROPERTY)
 - 
Return a single value (or undef) for a property in a namespace:
my $resourceId = $meta->getValue($namespace, 'resourceId');This method is convenient for properties (like XMLNews's 'resourceId') which should never have more than one value.
NOTE: If there is more than one value present for the resource, the getValue() method will croak().
 - hasValue(NAMESPACE, PROPERTY)
 - 
Return true if the specified property has one or more values, and false otherwise:
unless ($meta->hasValue($namespace, 'provider')) { print "No provider information available\n"; } - getNamespaces()
 - 
Return an array containing all of the namespaces used in the metadata collection:
my @namespaces = $meta->getNamespaces();Each namespace is a URI (URL or URN) represented as a string.
 - getProperties(NAMESPACE)
 - 
Return an array containing all of the properties defined for a specific namespace in the metadata collection:
my @properties = $meta->getProperties($namespace);If the namespace does not exist, this method will croak().
 - addValue(NAMESPACE, PROPERTY, VALUE)
 - 
Add a value for a property in a namespace:
$meta->addValue($namespace, "locationName", "Salt Lake City"); - removeValue(NAMESPACE, PROPERTY, VALUE)
 - 
Remove a value for a property in a namespace:
$meta->removeValue($namespace, "locationName", "Dallas");If the namespace, property, or value does not exist, this method will croak().
 
CONFORMANCE NOTE
The XMLNews metadata format is based on RDF, but this tool is not a general RDF processor; instead, it relies on a particular usage profile and a particular abbreviated syntax, like the following:
<?xml version="1.0"?>
<xn:Resource xmlns:xn="http://www.xmlnews.org/namespaces/meta#">
 <xn:resourceId>12345</xn:resourceId>
 <xn:title>Sample</xn:title>
 <xn:description>Sample resource.</xn:description>
 <xn:rendition>12345.xml</xn:rendition>
 <xn:rendition>12345.html</xn:rendition>
</xn:Resource>
AUTHOR
This module was originally written for WavePhore by David Megginson (david@megginson.com).
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 579:
 =cut found outside a pod block. Skipping to next block.