This is the home of the Pointrel Social Semantic Desktop.

The project is hosted on SourceForge:  https://sourceforge.net/projects/pointrel/. 

The current version is based on Jython and Python, and requires the Java JVM for the desktop side.


The latest version is primarily under the LGPL license; content, included dependencies, and some applications may be under other free and open source licenses.


* What is a quick summary?

Pointrel was coined by Paul Fernhout from pointers and relationships around 1982. The main conceptual difference from many other common storage systems based on lists or objects is that the focus in the Pointrel Data Repository System is on relationships. Pointrel is more similar to the Entity-Relationship database model. NEPOMUK is a system with some similar aspirations.

The Pointrel Data Repository System (upon which the Pointrel Social Semantic Desktop rests) 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. It can also be thought of as like RDF triples and the Semantic Web and the Social Semantic Desktop.

The Pointrel Data Repository System includes a triadal data storage system. A triad is an object with three links defined in a context. These links can point to arbitrary strings. When strings (especially uniquely generated ones) are treated as nodes, triads can build arbitrarily complex structures, as well as add to these structures at any time. Using triads, one can build arbitrary complex networks of relationships. These dynamic relationships can define the equivalent of records or objects in a database.

The Pointrel Data Repository System is a variant of an Entity-Relationship model database. The Pointrel system provides a way to easily handle loosely structured data stored on disk, like for INI files, version control systems, bug tracking systems, or simple AI type applications. It takes an approach to data storage which emphasizes flexibility over speed. It also emphasizes storing new information for the long term over modifying or deleting old information. It hopefully makes it easier to build new layers of abstraction and indexing over old data.

The Pointrel Data Repository System helps you build associations which define relationships between entitites. These associations are essentially triadal links between things indicating one thing is linked to a second thing in a way defined by a third thing. The simplest way to use such links is to make the equivalent of object properties or a dictionary, such as "Fluffy weight 20kg" which if a Python dictionary would be Fluffy["weight] = "20kg". However, Pointrel differs from a dictionary in that is supports queries like one for all dictionaries which define a weight of 20kg or all relationships between "Fluffy" and "20kg". Triads are all defined within a specific context that gives meaning to the associations (making triads actually have four fields). The context allows triads to be handled within an archive in a somewhat more modular fashion using them as filters, since you can easily ignore triads not in the context of interest. All fields of a triad are indefinite length UTF-8 strings -- so they could be anything from "foo" to the contents of a binary file.

* What is a simple example of the Pointrel API being used?

[This is an example for a very old version of Pointrel for Python found here: 

   http://prdownloads.sourceforge.net/pointrel/Pointrel20010915.zip

The API has change since then, but the basic concepts are similar.]

See "fluffyExample.py" for an example of using the simplified global function interface.

Here is an excerpt from that file:
  from pointrel20010915SimpleInterface import *

  Pointrel_initialize("myArchive")

  Pointrel_startTransaction()
  Pointrel_add("simpleexamplecontext", "Fluffy", "weight", "20kg")
  Pointrel_add("simpleexamplecontext", "Fluffy", "color", "beige")
  Pointrel_add("simpleexamplecontext", "Fluffy", "teeth", "pointy")
  Pointrel_add("simpleexamplecontext", "Fluffy", "teeth", "nasty")
  Pointrel_add("simpleexamplecontext", "Fluffy", "preferred food", "Knights who say 'Nie!'")
  Pointrel_finishTransaction()

  string = Pointrel_lastMatch("simpleexamplecontext", "*", "weight", "20kg")
  print string
  # string would be --> "Fluffy"

  string = Pointrel_lastMatch("simpleexamplecontext", "Fluffy", "weight", "*")
  print string
  # string would be  --> "20kg"

  string = Pointrel_lastMatch("simpleexamplecontext", "Fluffy", "teeth", "*")
  print string
  #string would be --> "nasty"

  list = Pointrel_allMatches("simpleexamplecontext", "Fluffy", "teeth", "*")
  print list
  #list would be  --> ["pointy", "nasty"]

* What is a more complex example of using the Pointrel system?

See the file "pointrelMemex.py". It implements a version of the Memex archiveing system proposed by Vannevar Bush it the 1940s.

Here is a typical API useage for the more complex OO API:

  repository = PointrelDataRepositorySystem(archiveName)
  repository.startTransaction()
  repository.add(context, a, b, c)
  repository.finishTransaction()
  string = repository.lastMatch(context, "*", b, c)
  string = repository.lastMatch(context, a, b, "*")
  list = repository.allMatches(context, a, b, "*")
  string = repository.generateUniqueID()

* How reliable is the Pointrel System?

The Pointrel system should not be relied on for mission critical systems yet. It has not undergone enough testing, expecially in terms of multiple simultaneous users of the same archive. It may be adequate at this point for INI file handing or similar non-critical applications if you do some testing on your own for suitability in your particular circumstance -- however I cannot guarantee that. The software comes with NO WARRANTY. I do not yet use Pointrel for anything mission critical. One reason for this release is in hopes people will try it, provide feedback, and perhaps make suggestions for improving its reliability. I will say that ensuring the long term integrity of the data stored is a high priority. The latest version stores all your data in UTF-8 plain text, so much of it should be very recoverable in many worse case scenarios (thought there is always the unexpected, so keep good backups).

* Why is there a version number in the Pointrel library file name, like "pointrel20010915.py"?

The Pointrel Data Repository System is intended for the long term storage for data. It is likely better systems for putting the data on disk will be created from tiem to time with potentially incompatible formats. By including a version number in the library name, it will be possible to import both versions fo a library to migrate data to new formats as desired. The version number is also included in the archives themselves. The version number reflects the date on which a non-backwardly compatible change was made to the file format. It does not reflect the last date for change to that version of the system in terms of API improvements or bug fixes.

* How do you delete things in Pointrel?

The Pointrel API does not have a delete function -- or even a function to change data. Everything added to an archive is there indefinitely. However, one can build higher levels of abstraction that allow deletions and changes to application data. The example "pointrelToDoApplication.py" shows how items can be deleted in practice -- essentially by setting a deleted flag associated with the item and then removing flagged items from a search result before using or displaying the list of items. For permanent deletion of materials, an archive needs to be cloned by copying the parts you want and leaving deleted material behind. The example "pointrelMemex.py" includes code to selectively export and import part of an archive.

* Why are you working in this field of data and knowledge management?

I am interested in archiving and structuring knowledge using a fine grained approach, especially knowledge on how to make things in a sustainable way as proposed by Buckminster Fuller's "Design Science" and many others, and making that knowledge freely available to all people of the world to help reduce ignorance and want and to increase humanity's chances of surviving with style on Earth and even someday in space habitats. See: http://www.kurtz-fernhout.com/oscomak/index.htm for more details. If you are interested in others doing work with knowledge about sustainability, look at:  http://www.bfi.org/ and:  http://www.humaninfo.org/

This system is:
Copyright 2000-2008 Paul D. Fernhout.
pdfernhout@kurtz-fernhout.com

Pointrel is a trademark of Paul D. Fernhout.