<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF xmlns="http://usefulinc.com/ns/doap#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Project><name>Products.ExtendedPathIndex</name>
<shortdesc>Zope catalog index for paths</shortdesc>
<description>Introduction
============

This is an index that supports depth limiting, and the ability to build a
structure usable for navtrees and sitemaps. The actual navtree implementations
are not (and should not) be in this Product, this is the index implementation
only.

Assumptions
===========

EPI makes an assumption about the catalog and index being in the
same container as all the content. This makes a lot of sense in a
Plone setting, but might not work as expected in other scenarios.

A query like ``/plonesite/folder, level=0`` is transformed internally to
``/folder, level=1``. This avoids touching the rather large plonesite set
which contains reference to all content in your site.

Features
========

- Can construct a site map with a single catalog query

- Can construct a navigation tree with a single catalog query

Usage
=====

``catalog(path='some/path')``
  search for all objects below some/path (recursive, equivalent to depth = -1)

``catalog(path=dict(query='some/path', depth=0))``
  search for the object with the given path.

``catalog(path=dict(query='some/path', depth=2))``
  search for all objects below some/path but only down to a depth of 2

``catalog(path=dict(query='some/path', navtree=True))``
  search for all objects below some/path for rendering a navigation tree. This
  includes all objects below some/path up to a depth of 1 and all parent
  objects.

``catalog(path=dict(query='some/path', navtree=True, depth=0))``
  search for all objects below some/path for rendering a breadcrumb trail.
  This includes only the parent objects themselves.

``catalog(path=dict(query='some/path', navtree=True, navtree_start=1))``
  search for all objects below some/path for rendering a partial
  navigation tree. This includes all objects below the path but stops
  1 level above the root.  The given path is included, even if it is at a
  shorter path in the portal than the level parameter would allow.

``catalog(path=dict(query='some/path', navtree=True, depth=0, navtree_start=1))``
  search for all objects below some/path for rendering a partial
  breadcrumb trail. This includes all parents below the path but stops
  1 level above the root.  The given path is included, even if it is at a
  lower level in the portal than the start parameter would allow.

``catalog(path=dict(query='some/path', level=2))``
  search for all objects whose path contains some/path at level 2. This 
  includes paths like /foo/bar/some/path and /spam/eggs/some/path, plus all
  children of those paths.

``catalog(path=dict(query='some/path', level=-1, depth=0))``
  search for all objects whose path contains some/path at *any* level. This
  includes paths like /spam/some/path as well as /foo/bar/baz/some/path, but
  only those exact matches are included in the result because depth is set to
  0.

``catalog(path=dict(query=(('foo/bar', 2), ('bar/baz'), 1), depth=0))``
  search for multiple paths, each at different levels (foo/bar at level 2,
  and bar/baz at level 1), and return exact matches only.

Credits
=======

- Zope Corporation for the initial PathIndex code

- Helge Tesdal and Martijn Pieters from Jarn_ for the ExtendedPathIndex implementation

- Alec Mitchell for the navtree and listing optimizations

.. _Jarn: http://jarn.com


License
=======

This software is released under the GPL license.


Changelog
=========

2.6 - 2009-05-18
----------------

* Clarified license to be only GPL.
  [hannosch]

* Declare package dependencies and fixed deprecation warnings for use
  of Globals.
  [hannosch]

2.5 - December 19, 2008
-----------------------

* Cleaned out tests: removing ZTC cruft, turning them into proper unit tests
  and removing tests that tested other non-index components.
  [mj]

* Fixed level handling for queries where a (path, level) tuple is passed in
  instead of using the general level parameter.
  [mj]

* Refactored and documented the index codebase. Several bugs were discovered 
  and solved in the process. Missing functionality was also added, all search
  options should now work across all scenarios.
  [mj]

2.4.1 - September 28, 2008
--------------------------

- Fix typo in setup.py which broke installation of the egg
  [ree]

  

2.4 - September 11, 2006
------------------------

- Relaxed a check for path only allowing strings so far. Now we except all
  basestrings. This closes http://dev.plone.org/plone/ticket/5617.
  [hannosch]

- Converted log infrastructure to use Python's logging module instead zLOG.
  [hannosch] 

2.3 - December 18, 2005
-----------------------

- Added some extra debug information when an improper path is cataloged.
  [sidnei]

2.2 - October 7, 2005
---------------------

- Add seperate index structures on the parent path and the full path of all
  objects.  This significantly improves scaling for navtrees, breadcrumbs,
  and listings.
  [alecm]

- Assume that EPI is used inside same container as content and use relative
  search instead of absolute - basically transforming / plonesite search
  to / search with startlevel set to 1 instead of 0.
  [tesdal]

2.1 - May 20, 2005
------------------

- Implement 'indexed_attrs' support for ExtendedPathIndex.

- Prevent navigation tree queries from stopping prematurely if the
  queried-for path does not actually exist in the index, but its parents do.

1.0
---

- Path index capable of generating a navigation tree structure from
  cataloged data.</description>
<maintainer><foaf:Person><foaf:name>Plone Foundation</foaf:name>
<foaf:mbox_sha1sum>7a7fecc394759b12e477801b9a3b3df2747d421c</foaf:mbox_sha1sum></foaf:Person></maintainer>
<release><Version><revision>2.6</revision></Version></release>
</Project></rdf:RDF>