Version: GSB 7Konzeption und technische Umsetzung
Mithilfe der Dokumente des Typs „LinkClassifier“ können Links eines Dokuments, die in beliebigen Dokumenten eingebunden werden können, klassifiziert werden. Die Klassifizierung des Links erfolgt dann stets im Zusammenspiel mit einer entsprechenden Gruppe von Dokumenten des Typs „ClassifiedLink“.
Konzeption
In den unterschiedlichsten Dokumenttypen werden mehrere "cl2<Typ_Name>"-Attribute definiert. Diese beschreiben Attribute, die mithilfe des Stereotyps "classifiedLinkEnts" definiert worden sind. Diese Attribute modellieren auf der Basis von XML-Texten und Dependencies mehrstellige Assoziationen.
Der Standardeinsatzfall erfolgt im Dokumenttyp DocumentCompnt über LinkClassifier und DocumentItems, welche den Einsatzzweck der verknüpften DokumentItems bestimmen (vgl. Abbildung 1).
Die mehrstelligen Assoziationen werden jeweils auf der Basis einer Dependency-Beziehung zu den Dokumenttypen "<Typ_Name>" definiert. Ein Attribut "cl2<Typ_Name>" des referenzierenden Dokumenttyps definiert dann auf der Basis des XML-Textes die entsprechende Linkstruktur.
Hierdurch wird es ermöglicht, die Dokumente vom Typ DokumentItem in ein Dokument einzubinden und deren Rolle in diesem Dokument mithilfe der LinkClassifier bzw. der zugehörigen Texte genau zu spezifizieren.
In der graphischen Darstellung des Content Modells wird eine mehrstellige Assoziation auf der Basis einer Dependency-Beziehung zu den Dokumenttypen "<Typ_Name>" definiert (vgl. Abbildung 1). Innerhalb des referenzierenden Dokumenttyps wird das zugehörige Link-Ende als Attribut mit dem Namen "cl2<Typ_Name>" definiert. Dieses hat die folgende generische Struktur:
- entries: [0..*] ClassifiedLinkEntry
Ein LinkEnde kann also beliebig viele ClassifiedLinkEntries enthalten. Dabei ist ein ClassifiedLinkEntry wie folgt strukturiert:
- groupClassifier: [0..1] <Stereotyp_Name>
(entspricht dem eingesetzten Dokumenttyp; in der Regel ist dies der Typ "LinkClassifier")
- groupName: StringProperty (Length 255).
- linkedObjects: [1..*] <Typ_Name>;
Angabe der verlinkten Dokumente
Der Einsatz von groupClassifier bzw. groupName hängt von der gewählten Umsetzungsalternative für die Mehrsprachigkeit ab. Bei einsprachigen bzw. nicht parallel-mehrsprachigen Webauftritten können sowohl groupClassifier als auch groupName eingesetzt werden. Bei parallel-mehrsprachigen Webauftritten können nur groupClassifier benutzt werden.
Beispiel
Eine Redaktion besteht in der Regel aus mehreren Personen. Die Redaktion kann als Organisationseinheit und die Redaktionsmitglieder können als Dokumente des Typs „Employee“ erfasst werden. Diese Beziehung zwischen einer Redaktion und den Redaktionsmitgliedern kann durch klassifizierte Links erfasst werden. Diese würde im einfachsten Fall wie eine normale binäre Assoziation durch einen einzigen ClassifiedLinkEntry erfasst, der wie folgt aussehen könnte:
- 1. Eintrag:
Link Classifier: ---
Group Name: ---
Linked Objects: Michaela Meier, Gerlinde Groß; Klaus Klein;Martina Müller; Petra Pingelig; Willi Wichtig
In der Regel existieren innerhalb einer Redaktion unterschiedliche Aufgaben und Rollen, die von den Redaktionsmitgliedern wahrgenommen werden können. Dies könnten beispielsweise Chef Redakteure, Redakteure, Qualitätsbeauftragte und Site Administratoren sein. Diese Rollen können als Dokumente des Typs LinkClassifier modelliert werden. Bei der Beschreibung der Redaktion besteht dann die Möglichkeit, die Mitglieder der Redaktion durch klassifizierte Links zu bestimmen. Dabei könnten sich die folgenden ClassifiedLinkEntries ergeben:
- 1. Eintrag:
LinkClassifier: Chef Redakteure
LinkedObjects: Michaela Meier
- 2. Eintrag:
LinkClassifier: Redakteure
LinkedObjects: Gerlinde Groß; Klaus Klein; Martina Müller
- 3. Eintrag:
LinkClassifier: Qualitätsbeauftragte
LinkedObjects: Petra Pingelig
- 4. Eintrag:
LinkClassifier: Site Administratoren
LinkedObjects: Willi Wichtig
Technische Umsetzung
ClassifiedLinkLists sind typisierte Links auf CoreMedia Dokumente. Dabei kann die Typisierung durch einen String repräsentiert werden (Typ) oder einen Link auf ein weiteres CoreMedia Dokument (Classifier). Innerhalb einer solchen ClassifiedLinkList kann es mehrere Unterlisten geben, die alle Ihren eigenen Typ und Classifier haben. Diese Listen enthalten die Links auf CoreMedia Dokumente.
Die Beschreibung einer ClassifiedLinkList erfolgt als XML gemäß der classifiedlinklist.dtd (bund/dtd/classifiedlinklist.dtd).
Beispiel
<classifiedlinklists>
<classifiedlinklist>
<classifiertext>some kind of type or text</classifiertext>
<classifierlink>
<HOX.LINK ID="12"/>
</classifierlink>
<HOX.LINK ID="1234"/>
<HOX.LINK ID="123456"/>
<HOX.LINK ID="12345678"/>
</classifiedlinklist>
</classifiedlinklists>
Abbildung 2: Auszug aus der classifiedlinklist.dtd
Zur Auswertung eines derartigen XML-Textfelds steht ein ClassifiedLinkListAdapter zur Verfügung, der die Daten parsed und zugänglich macht. Um unabhängig von verschiedenen CoreMedia APIs zu bleiben, gibt es eine abstrakte Klasse, die die wesentlichen Funktionen bereitstellt.
Lediglich das Auslesen der TextProperties und die Erstellung von API-abhängigen Document Implementierungen müssen in spezifischen Klassen erledigt werden. Dazu gibt es drei Implementierungen:
- de.bundonline.basis.web.beans.ClassifiedLinkListAdapter
- de.bundonline.basis.scripting.ClassifiedLinkListAdapter
- de.bundonline.basis.editor.property.ClassifiedLinkListModel
Über die Methoden getClassifiedLinkLists(), getClassifiedLinkLists (String type), getClassifiedLinkLists(Object classifier) kann man auf die ClassifiedLinkList Objekte zugreifen.
Hier ist zu beachten, dass bei der Abfrage der ClassifiedLinkLists auch bei der Angabe von Typ oder Classifier potenziell mehrere ClassifiedLinkList Objekte zurückkommen können.
Beispiel
ClassifiedLinkListAdapter classifiedLLAdapter = new ClassifiedLinkListAdapter(document, "PropertyName", resourceFactory);
ClassifiedLinkList[] classifiedLL = classifiedLLAdapter.getClassifiedLinkLists("test");
for (int i=0; i<classifiedLL.length;i++)
{
System.out.println("found classified LinkList with type= "+classifiedLL[i].getType());
}
Abbildung 3: Code Sample: classifiedLLAdapter