/[drupal]/contributions/modules/relationship/README.txt
ViewVC logotype

Diff of /contributions/modules/relationship/README.txt

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.2, Wed Jan 25 13:08:52 2006 UTC revision 1.3, Wed Dec 5 09:17:02 2007 UTC
# Line 1  Line 1 
1  /* $Id: README.txt,v 1.1 2006/01/25 07:10:27 dman Exp $ */  /* $Id: README.txt,v 1.2 2006/01/25 13:08:52 dman Exp $ */
2    
3  Relationship Manager  All files cleared for a D6 replacement effort
4    
 @author - Dan Morrison <http://coders.co.nz>  
 Licensed under the GPL v2.0  
   
 About  
 -----------------------------  
   
 The Relationship Manager module is intended to allow free-form links between  
 nodes, recording not just that one page relates to another, but HOW it relates.  
   
 Taxonomy is sufficient for grouping or classifying nodes, but it can make no  
 statements about HOW each of those nodes relate to each other, only that they  
 are in the same 'group'.  
 In order to support complex metadata like 'this page REFERS TO that page' or  
 'this document IS DEPRECATED IN FAVOUR OF that document', we introduce the  
 concept of predicates, and provide both a user interface and a programmers API  
 to support this.  
   
 Following much discussion and reseach, this module exposes the concept of  
 'triples', as used throughout the RDF metadata initiatives and standards.  
 An understanding of the RDF syntax is NOT required to make use of this module,  
 although it becomes quite useful when using it to define your own predicates.  
   
 (  
   'predicates' are the phrases that provide the 'action' in a statement of fact.  
   In the sentence "The author of README.txt is Dan", "author of" is the  
   predicate.  
   Throughout the documentation, I use a subject-predicate-object structure that  
   attempts to make grammatical sense, eg "README.txt HAS AUTHOR Dan".  
 )  
   
   
 The core module is made available to be extended by other modules that wish to  
 make use of the generalized relationship management functions. Several examples  
 of simple modules that leverage this power are provided as optional plugins.  
   
   
 Features  
 -----------------------------  
   
 * Pluggable ontologies - a module can create its own predicates and define  
   the behaviour of what happens when a node has (or wants to have) a  
   user-defined property. (much like Taxonomy)  
 * RDF-compatable - Relationships between documents can be expressed using  
   RDF syntax. Internally, this should make no difference to a casual user,  
   but when used, each Drupal page truly becomes part of the 'Semantic Web'  
 * New properties and links are embedded in the HTML head as "meta content"  
   and "link rel" tags. This enables semantic navigation and access keys in  
   certain browsers, and should alos provide useful hints to indexers.  
 * Cute interface - Although the power and complexity of this approach can  
   be overwhelming, the editing of relationships is done through a simple  
   form. (simple at the node level - actually administering new terms is not)  
 * Some inference engine support - Depending on the ontology in use, extra  
   statements can be deduced about a resource. This is to be developed to  
   support OWL web ontology and  SPARQL RDF Query Language.  
 * Server-agnostic - Both the subject and object of a statement may be off-site  
   URLs. You can create a 'relationship' between your pages and any other  
   resource defined by a URI. You can even make statements about things  
   you have no control over at all... for whatever reason...  
 * Literal Metadata - the object of a statement is usually expected to be  
   another resource (as defined by a URI) but this is not enforced. Predicates  
   can make statements about literal strings  
   eg "This page has copyright 2005".  
   Using the relationship module in this way sort of emulates the flexinode  
   functionality - in a much more free-form way.  
   
   
 Install  
 -----------------------------  
   
 * 1. The main 'relationship.module' should have no dependances other than  
     Drupal core 4.6.  
   
 * 2. Untar the distribution file in your contributed modules folder.  
     The package may contain several *.module files - only relationship.module  
     is required to be enabled, the rest are optional to provide examples or  
     administration enhancements. *.inc files are libraries that may be  
     included on request by the modules.  
   
 * 3. Database setup IS AUTOMATIC ON INSTALL. You do not need to pipe the SQL  
     tables through mysql or anything. With appropriate rights, the tables  
     will be created the first time relationship.module is enabled in the  
     admin/modules interface.  
   
 * 4. Visit admin/modules on your site and enable 'relationship'.  
   
 * 5. Types of relationships can now be administered through the new admin menu  
     option 'relationships'. It's recommended to start with a sample set of  
     terms to see how this works. Only a couple of really basic terms are  
     available at first.  
   
 * 5.1 Enable (for example) 'ontology_navigation' which will expose a bunch of  
     book-type relationships - 'next' 'previous' 'up', 'first' and provide  
     a vanilla 'book.module' style navigation block under nodes that use these  
     terms.  
     This ontology also comes with a demo function (available under  
     admin/relationship) to populate the database with some sample, structured  
     content.  
   
 * 5.2 There is now an extra edit table appended to each node edit form.  
     This is where the relationships are maintained through select-boxes.  
   
 * 5.3 To actually see the relationships in action, try enabling the  
     metadata_blocks.module. Enable it in the admin/modules, then turn on the  
     'all metadata' block in admin/blocks. This will display the properties you  
     add to a node.  
   
 -----------------------------  
 Pluggable Additions  
 -----------------------------  
   
 Several extra modules are provided to expose different features of the system.  
 Not all the extras are needed for all uses, so these are distributed as  
 helper modules. They do all however rely on the 'relationship.module' to be  
 available.  
 Each module has extensive documentation of its own, but here's an overview.  
   
   
 metadata_blocks.module  
 -----------------------------  
   
 ... is a new type of block, administered through the 'admin/blocks' menu.  
 It exposes a default 'all metadata' block which will display all relationship  
 links (and literals) currently associated with whatever node it is displayed  
 alongside. While that could be useful, it's there primarily as development  
 utility.  
   
 It also allows you to define any number of custom blocks that expose only the  
 type of relations you wish users to see. A trivial example would be to use it  
 to show 'related' links as a side block. More interestingly, it could list  
 resources that link TO this page, or any 'metadata' about the page.  
   
 Note, the metadata_blocks.module requires another helper module called  
 listblock.module. It's a trivial rendering library, but it needs to be enabled.  
   
 ONTOLOGIES  
 -----------------------------  
   
 Ontologies are sets of terms, DEFINITIONS of predicates, usually containing  
 a little internal logic defining how these terms relate to one another.  
 A 'geneology' ontology may define that the phrase "is parent of" is a  
 meaningful relationship two things (people) may have to each other.  
 It would also include the rule that "is child of" is a required reciprocal  
 relationship.  
 An ontology module inside drupal MAY also define a presentational enhncement,  
 such as providing a link to 'parent(s)' in the links bar when rendering a node.  
   
 An 'ontology' containing 'predicates' can be thought of as being similar to  
 Drupal 'vocabulary' containing 'terms'.  
 The code and the interface was originally based on this model, then extended  
 to allow for distributed (external) definitions of terms through the use of  
 public schemas and URI identifiers. ... so everyone knows they are working  
 with the same terms, not installation-specific keywords.  
   
 ontology_navigation.module  
 -----------------------------  
   
 - defines a set of navigational relationships, as well as publishing a small  
 nav block and modifying the rendering of a node to provide 'book.module' type  
 buttons at the bottom of a 'page'. It is basically proof-of-concept, and not  
 intended to usurp the real book.module or menu.module, which both benefit from  
 a top-down heirachical approach and tree management interface.  
   
 ontology_geneology.module  
 -----------------------------  
   
 .. is another proof-of-concept, using predicate terms that have built-in  
 implications or characteristics when developing the inference engine.  
 If Cain is the son of Adam, and Enoch is the son of Cain,  
 then Enoch is an ancestor of Adam. ... stuff like that.  
   
 ontology_revision_control.module  
 -----------------------------  
   
 .. defines a set of document management type terms.  
 Intended to express concepts like:  
   if a document is replaced by another one,  
   (but is still required to be on file)  
   then the deprecated document should have a warning flag put on it to link  
 to the 'latest version', and other documents which refer to the old one may  
 be told to refer to the new one instead...  
   
 This is an attempt at realizing a real-world requirement,  
 (the prime mover for this entire system in fact)  
 but it exposed a lot of groundwork that needed to be done.  
   
   
 ontology_rdf.module  
 -----------------------------  
   
 .. Is in fact a lot more than just an ontology of terms.  
 It provides admin functionality to expose the underlying data structures of  
 the predicates in use, allows import and export of ontologies from  
 remote sources (like the Dublin Core) and provides a true RDF representation  
 of metadata for all nodes.  
 The terms it defines are those used in the definition of RDF/XML itself -  
 what is a 'property', what is a 'relationship', what does 'isSubpropertyOf'  
 mean.  
   
 Each predicate term can be defined in terms of other RDF statements. The whole  
 system can bootstrap itself up from first principles, the language can define  
 itself.  
   
 This is power-user stuff, well complicated for normal users.  
   
 A bonus feature to be found in this package however is the ability to import  
 statements from other sites. If pointed at an RSS feed, it can absorb  
 information about like "that blog links to that article" ... or, if someone  
 else out there is using Semantic web principles, it can discover what the  
 'author' and more of a remote document is ... and remember it.  

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

  ViewVC Help
Powered by ViewVC 1.1.2