You are not logged in Log in Join
You are here: Home » Members » klm » OrganizingContent » LinkObjects

Log in
Name

Password

 
 

History for LinkObjects

??changed:
-
Link Objects

  Culprit: Ken Manheimer

  This is a proposal for a new type of elementary zope object,
  LinkObjects, and a LinkRegistry, by which content links are
  explicitly surfaced, and inherently track the location of other
  local content elements.

  Use the 'Reply' link in the Actions box to comment - suggestions,
  questions, corrections, etc. are welcome.

Problem

  The *interlinking* between pages is, itself, a manifestation of
  content on a site.  Not only must a content management system help
  site managers and contributors with the evolution of the content
  pages, it must also provide for the critical challenge presented by
  evolving site organization.  It needs to provide for a way to have
  content links track relocation of target content elements.

  Not all position changes should be tracked, however.  Editors need
  the discretion to move content *out* of targeted slots without
  tracking.  We need to distinguish between tracked relocation and
  non-tracked moves.

  Finally, we need to keep an eye towards the future, when syndication
  or other site federation mechanisms could provide for tracking of
  reorganization across sites.

Context

  Content management includes interconnection between bits of content
  - linking - as well as the contents of the pages themselves.

  The Zope catalog internally maintains a sort of registry that may be
  applicable to this task.  It maintains an internal mapping from an
  id for each object tracked by the catalog and the object's physical
  path.  For objects that are actively cataloged, the catalog
  effectively is notified about and tracks location changes of an
  object, as well as changes to its content.

  Organization Objects (see OrganizationObjectsProposal) are intended to be based
  on a generalization of something like the catalog, where a registry
  for various kinds of content relationships, not just text-specific
  indexes, is maintained.  This proposal fleshes out part of that
  superstructure, sketching a requirement that uses something like the
  catalog's object-location registry for purposes beyond text-index
  resolution.

Forces

  Digital Creations is increasingly focusing our efforts with Zope on
  content management, and management of the organization of a site is
  an important component of that job.  In particular, Zope's
  flexibility makes it a prime vehicle for managing rapidly changing,
  evolving sites.  This is an area where we can excell - and, in the
  emerging web-speed world, an area with ever increasing demand.

  There are many uses for explicit recognition of a piece of content's
  links in addition to change tracking.  The Dublin Core 'Relation'
  attribute represents general concern with this piece of metadata.
  Backlinks and generic navigation links like next and previous
  represent structuring in a site, and so on.

Solution

  Provide a mechanism so interlinking between content on a site, and
  incoming links from outside, can automatically track changes in the
  organization of the site, when appropriate.

  Establish "link objects" --
    which indirect through an object location registry (like the one
    currently internal to the catalog) to get the URL (via
    getPhysicalPath()) of the the target objects.  DTML and ZPT based
    documents could expressly refer to these link objects.
    StructuredText could use these objects instead of substiuting an
    href for the desired text - and, in general, this sort of approach
    (see the next item) will probably be the primary way that link
    objects are employed.

  Translate content links to internal LinkObjects --
    For example, in html this would cover the URLs for href and name
    anchors, img src, etc.  StructuredText and other *ML formats have
    corresponding structures.  (I'm referring to something like what
    the "Parsed XML",
    http://dev.zope.org/Wikis/DevSite/Projects/ParsedXML effort
    provides - a fast, efficient DOM storage.)

    Note that the *expressed form* of the original link would need to
    be preserved.  This would be to enable presentation of new
    location in similar style - for instance, relative versus absolute
    links.

    [Ideally, translated documents like wvWave-parsed MS Word files,
    could be similarly manipulated, but i'm not clear about the impact
    on round-tripping or even whether editing via the wvWave parsing
    is possible.]

  Register Intrinsic and Explicit Link References Via Event Channel --
    A document's intrinsic content links and other link oriented
    metadata (many of which would belong in the DublinCore Relation
    field - see the "Implement the Dublin Core's Relation / Source
    Elements":metadata/dublin_core_relation proposal) are
    automatically propagated via the event channel (see the
    OranizationObjectsProposal) to the object
    location registry, and link objects are substituted for them in
    the document's internal representation.

  Provide a new "relocate" operation --
    (at user and programming levels), to contrast with the existing
    "move".

    "Relocate" would revise the indirection to the object to point to
    the new location, so internal links would track the change, while
    the old move operation would keep its old behavior, and not cause
    tracking of the change.

    This opens the door to collective reorganization operations, like
    moving offspring from a CommonNameSpaces
    page down to its own namespace, with all incident links to the
    pages tracking the change.

  Institute the object/location mapping for consumption outside the site --
    along the lines of the "XML Linking Language":http://www.w3.org/TR/xlink
    "'linkbase'":http://www.w3.org/TR/xlink/#dt-linkbase#dt-linkbase, 
    so that other sites can track locations.  (Presence of a linkbase
    entries for a document should depend on the document being freely
    published.)

  (Note that LinkObjects also offer the basis for presenting an option
  for content consumers (including the author, as well as other
  visitors) to create the target content of internal links that don't
  already exist, a la ", contingent to the user having the privilege, the
  feature being enabled, etc.  This will afford one of wiki's
  low-impedence features without being bound to specialized content
  types.  See CommonNameSpaces for
  more details.)

Resulting Context

  A system with rich link tracking options.

  Use cases:

  Editor Adds or Changes Content --
    Content links are assessed:

    - For some documents types, links are automatically identified

    - Some, the editor has to explicitly specify them as metadata

    - For all, user may be able to specify additional objects for
      metadata links - eg, next and previous, parents, etc.

    Links are propagated:

    - Event channel propagates edit commit, links assessed by
      LinkRegistry organization object.

    - If LinkRegistry is syndicated, updates to syndication partners
      are queued for immediate or eventual propagation.

    Links are internally represented as link objects.

    Links are externally presented via consultation with LinkRegistry
    - so they track current location, etc.

  Visitor Traverses Document Links --
    They track the current location, or can indicate a stale link
    without the user having to traverse them (like, eg, the red
    superscript 'x' that WikiForNow uses for absent-but-uncreatable
    targets).

  Visitor to External Site Follows Stale Incoming link --
    Publisher encounters "Not Found" condition, consults link registry
    to obtain new location.  If it's a relocated object (and published
    at new location), publisher returns http "Address changed/Revise
    your URL" status (or whatever that is, i forget) with new
    location.  If it's for a moved or deleted object (and the object
    is published), present an error page which indicates the new
    location.

  Editor *Relocates* Content --
    LinkRegistry entry for object is updated so incoming link references
    inherently resolve to new location.

  Editor *Moves* or *Deletes* Content --
    LinkRegistry entry for object marked as moved or deleted, but new
    location is not registered as being current.  Ie, incoming
    LinkObject references will not point to new location - but they
    can be set to indicate that they are broken until a new object
    falls into place, and even consulted for the new location.
    (LinkObjects can present links to a 'create' form for the absent
    target, if the feature is enabled and the visitor is privileged.)

  Editor Relocates Content Collection --
    Eg, via lineage 'gather' or 'merge' - all LinkRegistry entries are
    updated to track new locations.
[45 more lines...]