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.005

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

PERL VERSION

This library should run on perls released even a long time ago. It should work on any version of perl released in the last five years.

Although it may work on older versions of perl, no guarantee is made that the minimum required version will not be increased. The version may be increased for any reason, and there is no promise that patches will be accepted to lower the minimum required perl.

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 <cpan@semiotic.systems>

CONTRIBUTOR

Ricardo Signes <rjbs@semiotic.systems>

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.