cybertools/relation/interfaces.py
helmutm bc4a012b4f Extended interfaces for IRelation and IRelationsRegistry (still without real implementation); added IMonadicRelation
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@677 fd906abe-77d9-0310-91a1-e0d9ade77398
2005-11-14 07:39:25 +00:00

131 lines
4 KiB
Python

#
# Copyright (c) 2005 Helmut Merz helmutm@cy55.de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""
interface definitions for the Relations utility and relation objects.
$Id$
"""
from zope.interface import Interface, Attribute
from zope.app.event.interfaces import IObjectEvent
# relation interfaces
class IRelation(Interface):
""" Base interface for relations.
"""
def getPredicateName():
""" Return the predicate of this relation as a string that may be
used for indexing.
"""
def validate(registry=None):
""" Return True if this relation is valid.
If the registry argument is provided the check should be done
with respect to this relation registry, e.g. to
"""
class IMonadicRelation(IRelation):
""" Relation with just one object.
While a monadic relation could be easily represented by an attribute
or an annotation, monadic relations are e.g. useful when working with
an ontology-driven higher-level relation framework.
"""
first = Attribute('First and only object that belongs to the relation.')
class IDyadicRelation(IRelation):
""" Relation connecting two objects.
"""
first = Attribute('First object that belongs to the relation.')
second = Attribute('Second object that belongs to the relation.')
class ITriadicRelation(IDyadicRelation):
""" Relation connecting three objects.
"""
third = Attribute('Third object that belongs to the relation.')
class IPredicate(Interface):
""" A predicate signifies a relationship. This may be implemented
directly as a relation class, or the relation object may
hold the predicate as an attribute.
"""
def getPredicateName():
""" Return this predicate as a string that may be used for indexing.
"""
# event interfaces
class IRelationInvalidatedEvent(IObjectEvent):
""" This event fires when a relation is invalidated, typically because
an object that is involved in the relation is removed.
"""
# relations registry interfaces
class IRelationsRegistryUpdate(Interface):
""" Interface for registering and unregistering relations with a
relations registry.
"""
def register(relation):
""" Register the relation given with this registry.
"""
def unregister(relation):
""" Remove the relation given from this registry.
"""
class IRelationsRegistryQuery(Interface):
""" Interface for querying a relations registry.
"""
def query(relation=None, **kw):
""" Return a sequence of relations that fulfill the criteria given.
You may provide a relation object as an example that specifies the
search criteria, i.e. its predicate and first, second or third
attribute will be used for searching, or explicit criteria
via keyword arguments.
Example for using keyword criteria:
rr.queryRelations(first=someObject, second=anotherObject,
relationship=SomeRelationClass)
"""
class IRelationsRegistry(IRelationsRegistryUpdate, IRelationsRegistryQuery):
""" A registry for registering and searching relations typically
implemented as a local utility .
"""