The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Data::TagHive - hierarchical tags with values

VERSION

version 0.001

SYNOPSIS

  use Data::TagHive;

  my $taghive = Data::TagHive->new;

  $taghive->add_tag('book.topic:programming');

  $taghive->has_tag('book'); # TRUE

OVERVIEW

Data::TagHive is the bizarre, corrupted union of String::TagString and Data::Hive. It combines the "simple list of strings" of the former with the "hierarchical key-value/value pairs" of the latter, using a different interface from either.

It's probably better than that sounds, though.

A Data::TagHive object represents a set of tags. Each tag is a string that represents a structure of nested key-value pairs. For example, a library book might be tagged:

  book.pages.size:letter
  book.pages.count:180
  book.type:hardcover
  book.topic:programming.perl.cpan

Each tag is a set of key-value pairs. Later pairs are qualified by earlier pairs. Values are optional. Keys and values are separated by colons. Key-value pairs are separated by dots.

A tag is considered present if it was set explicitly or if any more-specific subtag of it was set. For example, if we had explicitly added all the tags shown above, a tag hive would then report true if asked whether each of the following tags were set:

  book
  book.pages
  book.pages.size
  book.pages.size:letter
  book.pages.count
  book.pages.count:180
  book.type
  book.type:hardcover
  book.topic
  book.topic:programming
  book.topic:programming.perl
  book.topic:programming.perl.cpan

METHODS

add_tag

  $taghive->add_tag( $tagstr );

This method adds the given tag (given as a string) to the hive. It will fail if there are conflicts. For example, if "foo:bar" is already set, "foo:xyz" cannot be set. Each tag can only have one value.

Tags without values may be given values through add_tag, but only if they have no tags beneath them. For example, given a tag hive with "foo.bar" tagged, "foo.bar:baz" could be added, but not "foo:baz"

has_tag

  if ($taghive->has_tag( $tagstr )) { ... }

This method returns true if the tag hive has the tag.

delete_tag

  $taghive->delete_tag( $tagstr );

This method deletes the tag from the hive, along with any tags below it.

If your hive has "foo.bar:xyz.abc" and you delete_tag "foo.bar" it will be left with nothing but the tag "foo"

all_tags

This method returns, as a list of strings, all the tags set on the hive either explicitly or implicitly.

AUTHOR

Ricardo Signes <rjbs@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Ricardo Signes.

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