---
name: "Wiki::Toolkit::Plugin::Categoriser"
section: "3pm"
platform: "linux"
package: "libwiki-toolkit-plugin-categoriser-perl"
version: "0.08-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Wiki::Toolkit::Plugin::Categoriser"
---

# Wiki::Toolkit::Plugin::Categoriser(3pm)

Category management for Wiki::Toolkit.

## NAME

Wiki::Toolkit::Plugin::Categoriser - Category management for Wiki::Toolkit.

## DESCRIPTION

Uses node metadata to build a model of how nodes are related to each other in terms of categories.

## SYNOPSIS

```
  use Wiki::Toolkit;
  use Wiki::Toolkit::Plugin::Categoriser;
  my $wiki = Wiki::Toolkit->new( ... );
  $wiki->write_node( "Red Lion", "nice beer", $checksum,
                     { category => [ "Pubs", "Pub Food" ] }
                   ) or die "Can't write node";
  $wiki->write_node( "Holborn Station", "busy at peak times", $checksum,
                     { category => "Tube Station" }
                   ) or die "Can't write node";
  my $categoriser = Wiki::Toolkit::Plugin::Categoriser->new;
  $wiki->register_plugin( plugin => $categoriser );
  my $isa_pub = $categoriser->in_category( category => "Pubs",
                                           node     => "Red Lion" );
  my @categories = $categoriser->categories( node => "Holborn Station" );
```

## METHODS

- **new**

  ```
    my $categoriser = Wiki::Toolkit::Plugin::Categoriser->new;
    $wiki->register_plugin( plugin => $categoriser );
  ```

- **in\_category**

  ```
    my $isa_pub = $categoriser->in_category( category => "Pubs",
                                             node     => "Red Lion" );
  ```

  Returns true if the node is in the category, and false otherwise. Note that this is **case-insensitive**, so `"Pubs"` is the same category as `"pubs"`. I might do something to make it plural-insensitive at some point too.

- **subcategories**

  ```
    $wiki->write_node( "Category Pub Food", "mmm food", $checksum,
                       { category => [ "Pubs", "Food", "Category" ] }
                     ) or die "Can't write node";
    my @subcats = $categoriser->subcategories( category => "Pubs" );
    # will return ( "Pub Food" )
    # Or if you prefer CamelCase node names:
    $wiki->write_node( "CategoryPubFood", "mmm food", $checksum,
                       { category => [ "Pubs", "Food", "Category" ] }
                     ) or die "Can't write node";
    my @subcats = $categoriser->subcategories( category => "Pubs" );
    # will return ( "PubFood" )
  ```

  To add a subcategory `"Foo"` to a given category `"Bar"`, write a node called any one of `"Foo"`, `"Category Foo"`, or `"CategoryFoo"` with metadata indicating that it's in categories `"Bar"` and `"Category"`.

  Yes, this pays specific attention to the Wiki convention of defining categories by prefacing the category name with `"Category"` and creating a node by that name. If different behaviour is required we should probably implement it using an optional argument in the constructor.

- **categories**

  ```
    my @cats = $categoriser->categories( node => "Holborn Station" );
  ```

  Returns an array of category names in no particular order.

## SEE ALSO

- •

  Wiki::Toolkit

- •

  Wiki::Toolkit::Plugin

## AUTHOR

Kake Pugh (kake@earth.li). The Wiki::Toolkit team (http://www.wiki-toolkit.org/)

## COPYRIGHT

```
     Copyright (C) 2003-4 Kake Pugh.  All Rights Reserved.
     Copyright (C) 2006-2009 the Wiki::Toolkit team. All Rights Reserved.
```

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