Pointrel Data Repository System for Python

Paul Fernhout pdfernhout at kurtz-fernhout.com
Tue May 23 11:31:10 EDT 2000

This is the very first (rough!) version of the Pointrel Data Repository

It is available for download here under an MIT/X11 (Python-ish/Software
Carpentry-ish) type license from this web page:

One example (versioned file system viewer) requires wxPython, but
otherwise the code just uses plain Python. See the web page for more

The Pointrel Data Repository System is a loosely coupled set of concepts
for data representation. It can be thought of as an information storage
architecture. The code presented here implements the simplest concepts
in this system. William Kent's ROSE/STAR system described in his 1979
book "Data and Reality" is similar to the Pointrel Data Repository
System in intent in many ways.

The Pointrel Data Repository System includes a triadal data storage
system. Using triads, one can build arbitrary complex networks of
relationships. These dynamic relationships can define the equivalent of
records or objects in a database. 

A primary concept in the Pointrel Data Repository System is a triad. A
triad is an object with three links and an optional string. These links
can point to other triads. This allows one to build arbitrarily complex
structures, as well as add to these structures at any time. 

What is distributed here is one possible implementation in Python of
this "idea", which I have been playing around with in various languages
for about twenty years.  I've been going for an elegant compromise
between flexibility, speed, and simplicity in storing and retrieving
information. The Pointrel system aims at having a small number of
unifying concepts that can be arranged in endless ways to build layers
of complexity above them. 

I'm also trying to avoid the bloat where it takes 100MB and endless DLLs
just to install a database system, let alone use it for anything. The
core Pointrel source is around 20K. That makes it nicer for embedded
systems and stand-alone programs. 

To do (for anyone who wants to help):
* Integrate with IDLE for version control / version differencing.
* Integrate with Zope for general repository use (bug tracking, source
code tracking, file sharing, etc.).
* Make into a HTTP server version both using some sort of binary Python
query object and using plain text CGI like calls.
* Make wxPython interface to file system work under TK.
* General graphical interface for manipulating triads and exploring the
* Lots of improvements to the versioning structure in the file system
(wxPython example shows the content of each version of a python script,
not a version name).
* Make a CVS look-alike interface.
* Use as a caching proxy for web page downloading.
* Use to store and retrieve mail and newsgroups.
* Use as part of a distributed file/knowledge system.
* Create a suite of export / import Python scripts and related viewers.
* Make a simple front-end that makes it look like a familiar
"relational" database with tables.
* Flesh out the transaction support.
* Use it for implementing tuple-spaces.
* Make optimized C version w/DLL.
* Build optimized C version into base Python.exe so *.py libraries,
*.pyc, and maybe DLLs can all be in one common file.

A FAQ on deletion: you can only add to the Pointrel repository (not
delete). Deletion needs to be handled at a meta level, by tagging items
as deleted (hidden) and looking for the tag in an appllication using the
data, by creating new indexes without referencing deleted items, or by
cloning the entire repository and leaving behind data you don't want in
the new copy.

The system is still in flux, so think of it as more of an experiment in
this version and a way to get useability & conceptual feedback. Comments
appreciated (including pointers to similar work).

-Paul Fernhout
Kurtz-Fernhout Software 
Developers of custom software and educational simulations
Creators of the Garden with Insight(TM) garden simulator

More information about the Python-list mailing list