context()

Die context()-Methode erzeugt ein Element <context>, welches alle kontextspezifischen Informationen beinhaltet. Alle Strukturknoten in der Strukturabstraktion haben das <context>-Element der Eltern und können es um eigene Informationen erweitern. Auf diese Weise können Informationen nach unten vererbt werden.

Zugriffsschutz protected
Speicher reusable.memory
Datensicht progressive

Parameter

  • language :string
  • taps :string (optional)

Variablen

  • root :boolean
  • delegate :boolean
  • parents :node-set
  • current.xlink :node-set
  • merge :node-set

$root

Mit dieser Variablen wird festgelegt, welcher Strukturpunkt die Wurzel der Strukturabstraktion bildet. In der Regel ist dies die Startseite einer Website. Die Variable sollte dann unbedingt auf "true" gesetzt werden, damit Links innerhalb der SA (bspw. mittels sa:resolveTargetNode()) korrekt aufgelöst werden können.

Die Variable enthält keinen Standardwert. Sie muss explizit bei der Implementierung der context()-Methode auf sdem entsprechenden Strukturpunkt gesetzt werden.

$delegate

Mit Hilfe der $delegate-Variablen wird gesteuert, ob der Strukturpunkt in der Strukturabstraktion besuchbar ist und damit im Kontext auftaucht. Der Standardwert der Variablen ist false. Soll er geändert werden, muss die Variable explizit in der implementierenden Methode gesetzt werden.

$parents

Die Variable $parents ist ein Node-Set. Die Befüllung findet durch Implementierung von Templates mit dem Mode "parents" statt. Die Elemente sollten wie folgt aufgebaut sein:

<parent tap="true">onion://data/objects/12345</parent>

Das Attribut @tap ist optional.

$current.xlink

Die Variable enthält stets den korrekten XLink auf die Methode unter Berücksichtigung eines eventuellen Kontextes ($taps) inklusive der aktuellen Sprache.

$merge

Die Variable kann durch Implementierung von Templates mit dem Mode "merge" befüllt werden. Verarbeitet werden Elemente der folgenden Struktur:

<target tap="true">onion://data/objects/12345</target>

Das Attribut @tap ist optional.

Die context-Attribute der Ziel-Objekte, die hier aufgelistet werden, werden mit den Attributen des aktuellen Knotens verschmolzen. Bei Attributen gleichen Namens werden die des aktuellen Knoten an das <context>-Element geschrieben. Die Attribute der zu verschmelzenden Knoten werden also überschrieben.

Ausgabe/Ergebnis der Methode

<context>
  <node id="onion://data/objects/1">
    <meta  id="id" node="xlink" />
  </node>
  <node id="onion://data/objects/2">
    <meta  id="id" node="xlink" />
  </node>
  <node id="onion://data/objects/3">
    <meta  id="id" node="xlink" />
  </node>
</context>

Standard

Abhängig vom jeweiligen Kontext, in dem man sich befindet, enthält das <context>-Element den "Klickpfad" zum aktuellen Strukturpunkt. Voraussetzung dafür, dass die Strukturpunkte hier aufgelistet werden ist zum einen, dass die Variable $delegate nicht auf "true" gesetzt wurde und zum anderen, dass ein Template mit dem Mode "self" entsprechend implementiert ist. Der Inhalt dieses Templates muss das <node>-Element erzeugen, welches dann in den Kontext eingefügt wird. Es sollte wie folgt aussehen:

<xsl:template match="onion:content" mode="self">
  <xsl:for-each select="node">
    <node id="{c.id()}">
      <meta pro:href="{c.xlink($current.xlink, 'meta', 'mode', 'build')}" pro:mode="replace" />
    </node>
  </xsl:for-each>
</xsl:template>

Ein Matching auf "onion:content" an dieser Stelle stellt sicher, dass die Ausgabe ohne Störfaktoren geschieht, da der <onion:content>-Anteil des Dataviews progressive der einzige ist, der Elemente beinhalten kann, deren Inhalte ohne ein korrektes Matching einfach so in die Ausgabe geschrieben werden. (Alle anderen Bestandteile der Datensicht enthalten lediglich Elemente mit Attributen.)

Durch Implementierung von Templates mit dem Mode "attributes" kann jeder Strukturpunkt in der Hierarchie Attribute an das <context>-Element anfügen, die auf dem weiteren Weg nach unten erhalten bleiben. Beispielsweise kann die Startseite einen XLink auf sich selbst zum rendern von CSS an die Strukturabstraktion schreiben, der dann auf jeder Inhaltsseite verfügbar ist und immer auf der Startseite landet.

Erzeugt ein Strukturpunkt ein Attribut, was es bereits gibt, wird das des Elternkontextes von dem aktuellen Strukturpunkt überschrieben. Ab einer bestimmten Unterseite könnte dann beispielsweise ein anderes CSS verwendet werden.