This module provides a way of extracting, browsing and using RDF
metadata embedded in an SVG file.
The SVG spec itself does not provide any particular mechanisms for
handling metadata, but instead relies on embedded, namespaced RDF
sections, as per XML philosophy. Unfortunately, many SVG tools dont
support the concept of RDF metadata; indeed many dont support the idea
of embedded XML islands at all. Some will even ignore and drop the
rdf data entirely when encountered.
The motivation for this module is twofold. First, it provides a
mechanism for accessing this metadata from the SVG files. Second, it
provides a means of validating SVG files to detect if they have the
The motivation for this script is primarily for the Open Clip Art
Library (http://www.openclipart.org), as a way of filtering out
submissions that lack metadata from being included in the official
distributions. A secondary motivation is to serve as a testing tool for
SVG editors like Inkscape (http://www.inkscape.org).
Extracts RDF metadata out of an existing SVG file.
$svgmeta->parse($filename) || die "Error: " . $svgmeta->errormsg();
This routine looks for a field in the rdf:RDF section of the document
named ns:Work and then attempts to load the following keys from it:
dc:title, dc:rights->ns:Agent, and ns:license. If any are
The $filename parameter can be a filename, or a text string containing
the XML to parse, or an open IO::Handle, or a URL.
Returns false if there was a problem parsing the file, and sets an
error message appropriately. The conditions under which it will return
false are as follows:
* No filename parameter given.
* Filename does not exist.
* Document is not parseable XML.
* No rdf:RDF element was found in the document, and the try harder
option was not set.
* The rdf:RDF element did not have a ns:Work sub-element, and the
try_harder option was not set.
* Strict validation mode was turned on, and the document didnt
strictly comply with one or more of its extra criteria.
Gets or sets the title.
Gets or sets the description
Gets or sets the subject. Note that the parse() routine pulls the
keywords out of the subject and places them in the keywords
collection, so subject() will normally return undef. If you assign to
subject() it will override the internal keywords() mechanism, but this
may later be discarded again in favor of the keywords, if to_rdf() is
called, either directly or indirectly via to_svg().
Gets or sets the publisher name. E.g., Open Clip Art Library
Gets or sets the web URL for the publisher. E.g., http://www.openclipart.org
Gets or sets the creator.
Gets or sets the URL for the creator.
Alias for creator() - does the same thing
Gets or sets the owner.
Gets or sets the owner URL for the item
Gets or sets the license.
Gets or sets the date that the item was licensed
Gets or sets the language for the metadata. This should be in the
two-letter lettercodes, such as en, etc.
Gets or sets the XML retention option, which (if true) will cause any
subsequent call to parse() to retain the XML. You have to turn this
on if you want to_svg() to work later.
Gets or sets the strict validation option, which (if true) will cause
subsequent calls to parse() to be pickier about how things are
structured and possibly set an error and return undef when it
otherwise would succeed.
Gets or sets the try harder option option, which causes subsequent
calls to parse() to try to return a valid Metadata object even if it
cant find any metadata at all. The resulting object may contain
mostly empty fields.
Parse will still fail and return undef if the input file does not
exist or cannot be parsed as XML, but otherwise it will attempt to
return an object.
If you set both this option and the strict validation option at the
same time, the Undefined Behavior Fairy will come and zap you with a
frap ray blaster and take away your cookie.
Gets or sets an array of keywords. Keywords are a categorization
mechanism, and can be used, for example, to sort the files topically.
addKeyword($kw1 [, CW$kw2 ...])
Adds one or more a new keywords. Note that the keywords are stored
internally as a set, so only one copy of a given keyword will be stored.
$svgmeta->addKeyword(Fruits and Vegetables);
Compares this metadata to another metadata for equality.
Two SVG file metadata objects are considered equivalent if they
have exactly the same author, title, and license. Keywords can
vary, as can the SVG file itself.
Creates a plain text representation of the metadata, suitable for
debuggery, emails, etc. Example output:
Title: SVG Road Signs
Author: John Cliff
Return value is a string containing the title, author, license, and
keywords, each value on a separate line. The text always ends with
a newline character.