{"id":174,"date":"2012-09-12T18:59:05","date_gmt":"2012-09-12T16:59:05","guid":{"rendered":"http:\/\/marko-seifert.de\/blog\/?p=174"},"modified":"2020-01-15T12:23:37","modified_gmt":"2020-01-15T10:23:37","slug":"coremedia-cartridge-fur-andromda","status":"publish","type":"post","link":"http:\/\/marko-seifert.de\/blog\/?p=174","title":{"rendered":"CoreMedia Cartridge f\u00fcr AndroMDA"},"content":{"rendered":"<h3>CoreMedia MDA Ansatz<\/h3>\n<p>Herz eines jeden CoreMedia-CMS-Projekts ist das Dokumentenmodell. Das ist vergleichbar mit Dom\u00e4nenmodell einer fachlichen Anwendung. Im Unterschied dazu wird im Dokumentenmodell die Struktur des Contents beschrieben. Es wird definiert, welche Dokumenttypen es gibt (z.B. Teaser oder Bild), welche Eigenschaften diese haben (z.B. \u00dcberschrift, Text oder weitere) und welche Beziehungen es zwischen den Dokumenttypen gibt (z.B. ein Teaser hat ein Teaserbild). Neben den bereits erw\u00e4hnten Beziehungen zwischen Dokumenttypen(Assoziationen), gibt es die Vererbung von Dokumenttypen (z.B. ein Teaser ist ein Untertyp von Content).<\/p>\n<p><div id='gallery-1' class='gallery galleryid-174 gallery-columns-4 gallery-size-thumbnail'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=178'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/landingpage-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/landingpage-150x150.png 150w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/landingpage.png 708w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=180'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/klassendiagramm-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-180\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-180'>\n\t\t\t\tAbbildung 2: fachliche Struktur des Dokumentenmodells\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=181'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/teaser-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-181\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-181'>\n\t\t\t\tAbbildung 3: Auszug aus dem technischen Dokumentenmodell\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=183'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/ast-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-183\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-183'>\n\t\t\t\tAbbildung 4: Abstract Syntax Tree\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=185'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/metamodell-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-185\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-185'>\n\t\t\t\tAbbildung 5: Auszug aus dem Metamodell der UML\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=187'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/metafacades-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-187\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-187'>\n\t\t\t\tAbbildung 6: Zugriff auf Metaobjekte \u00fcber AndroMDA Metafacaden \n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=189'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/aufbau-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-189\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-189'>\n\t\t\t\tAbbildung 7: schematischer Aufbau der CoreMedia Cartridge\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=191'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/profil-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-191\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-191'>\n\t\t\t\tAbbildung 8: UML-Profil f\u00fcr die CoreMedia Cartridge\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=192'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/teaser-taggedvalues-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-192\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-192'>\n\t\t\t\tAbbildung 9: TaggedValue-Ansicht des Teasers\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=193'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/teaser-bild-taggedvalues-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-193\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-193'>\n\t\t\t\tAbbildung 10: : TaggedValue-Ansicht der Teasers-Property: incImage\n\t\t\t\t<\/dd><\/dl>\n\t\t\t<br style='clear: both' \/>\n\t\t<\/div>\n<!--more--><\/p>\n<h2>Fachliche Beschreibung des Contents am Beispiel einer Teaserseite (Landing Page)<\/h2>\n<p>In unserem gew\u00e4hlten Beispiel gibt es 3 konkrete Klassen: eine Seite, einen Teaser und ein Bild. Der Aufbau und das Layout ist in Abbildung 1 dargestellt. Die Seite, aus inhaltlicher Sicht, ist der wei\u00dfe Bereich in der Mitte. Linke Spalte, Top- und Fu\u00dfbereich werden hier in diesem Beispiel nicht betrachtet.<\/p>\n<div id=\"attachment_178\" style=\"width: 307px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/landingpage.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-178\" class=\"size-medium wp-image-178 \" title=\"landingpage\" alt=\"\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/landingpage-297x300.png\" width=\"297\" height=\"300\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/landingpage-297x300.png 297w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/landingpage.png 708w\" sizes=\"auto, (max-width: 297px) 100vw, 297px\" \/><\/a><p id=\"caption-attachment-178\" class=\"wp-caption-text\">Abbildung 1 Layout Teaserseite<\/p><\/div>\n<p>In Abbildung 2 ist die fachliche Struktur des Seitenaufbaus dargestellt. Wir unterschieden dabei in zwei Typen: Contenttypen und verlinkbare Typen. Wobei die Contenttypen auch eine Untergruppe der verlinkbaren Typen sind. Damit sind alle konkreten Klassen (Bild, Teaser und Seite) verlinkbar und ich kann Links darauf bauen. Die Links haben einen dargestellten Text und ggf. eine Beschreibung.<\/p>\n<p>Die Seite stellt den Rahmen f\u00fcr die Inhalte bereit. Sie kann auf eine Elternseite verlinken. Dies wird z.B. f\u00fcr die Navigation verwendet. Des Weiteren werden die verschiedenen Inhalte mit der Seite verkn\u00fcpft. In unserem Beispiel sind das 1 Bild (Top-Teaser oder Emotional) und 3 einspaltige Teaser. Ein Teaser kann wiederum auch auf ein Bild verlinken, das Teaserbild. Ein Teaser hat normalerweise auch noch einen \u201emehr\u201c-Link zur Detailseite und ggf. Links zu verwandten Dokumenten.<\/p>\n<div id=\"attachment_180\" style=\"width: 511px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/klassendiagramm.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-180\" class=\"size-full wp-image-180\" title=\"klassendiagramm\" alt=\"\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/klassendiagramm.png\" width=\"501\" height=\"444\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/klassendiagramm.png 501w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/klassendiagramm-300x265.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/klassendiagramm-338x300.png 338w\" sizes=\"auto, (max-width: 501px) 100vw, 501px\" \/><\/a><p id=\"caption-attachment-180\" class=\"wp-caption-text\">Abbildung 2: fachliche Struktur des Dokumentenmodells<\/p><\/div>\n<h2>CoreMedia Cartridge<\/h2>\n<p>Die CoreMedia Cartridge basiert auf dem MDA-Framework AndroMDA und generiert aus den Modellen Komponenten f\u00fcr das CoreMedia CMS. F\u00fcr einfache CMS-Systeme (wie im Beispiel) kann damit ein komplettes CMS aufgebaut werden, ohne eine Zeile Code zu schreiben (mit Ausnahme CSS). F\u00fcr komplexere CMS-Systeme (der Normalfall)\u00a0 stellt der generierte Code einen guten Rahmen f\u00fcr manuelle Entwicklung dar. Anhand des Teasers soll nun der Aufbau und die Funktionsweise der CoreMedia Cartridge erl\u00e4utert werden.<\/p>\n<p>Das fachliche Modell (siehe Abbildung 2) ist f\u00fcr die modellgetriebene Softwareentwicklung nicht detailliert genug. Es muss in ein technisches Dokumentenmodell \u00fcberf\u00fchrt werden. In Abbildung 3 ist ein Auszug (der Teaser) aus dem technischen Dokumentenmodell dargestellt. Durch Stereotypen gruppiert man Komponenten, die durch ihre Aufgabe in der Architektur zusammengeh\u00f6ren (z.B. Entity, Service, ValueObject). In unserm Fall beschreiben die Klassen des Dokumentenmodells die Struktur des Contents im CoreMedia CMS. Sie erhalten den Stereotyp<em> \u00abDocType\u00bb<\/em>. Die zugeh\u00f6rigen Attribute erhalten den Stereotyp <em>\u00abDocTypeAttribute\u00bb<\/em>.<\/p>\n<div id=\"attachment_181\" style=\"width: 318px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/teaser.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-181\" class=\"size-full wp-image-181\" title=\"teaser\" alt=\"\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/teaser.png\" width=\"308\" height=\"189\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/teaser.png 308w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/teaser-300x184.png 300w\" sizes=\"auto, (max-width: 308px) 100vw, 308px\" \/><\/a><p id=\"caption-attachment-181\" class=\"wp-caption-text\">Abbildung 3: Auszug aus dem technischen Dokumentenmodell<\/p><\/div>\n<p>Das fertige Modell wird als XMI exportiert. Dieses wird von AndroMDA geladen und validiert. F\u00fcr jedes Element aus dem Modell wird ein Metaobjekt durch das MOF<a title=\"\" href=\"#_ftn1\">[1]<\/a> Repository erzeugt. Die Klassen der Objekte sind Teile des Metamodells der UML. In Abbildung 5 ist ein Auszug daraus zu sehen. Dieser Metaobjekt-Graph wird Abstract Syntax Tree (AST) genannt. In Abbildung 4 ist er am vereinfachten Beispiel des Teasers zu sehen.<\/p>\n<div>\n<div id=\"attachment_183\" style=\"width: 615px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/ast.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-183\" class=\"size-full wp-image-183\" title=\"ast\" alt=\"\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/ast.png\" width=\"605\" height=\"327\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/ast.png 605w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/ast-300x162.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/ast-500x270.png 500w\" sizes=\"auto, (max-width: 605px) 100vw, 605px\" \/><\/a><p id=\"caption-attachment-183\" class=\"wp-caption-text\">Abbildung 4: Abstract Syntax Tree<\/p><\/div>\n<div id=\"attachment_185\" style=\"width: 401px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/metamodell.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-185\" class=\"size-full wp-image-185\" title=\"metamodell\" alt=\"\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/metamodell.png\" width=\"391\" height=\"421\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/metamodell.png 391w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/metamodell-278x300.png 278w\" sizes=\"auto, (max-width: 391px) 100vw, 391px\" \/><\/a><p id=\"caption-attachment-185\" class=\"wp-caption-text\">Abbildung 5: Auszug aus dem Metamodell der UML<\/p><\/div>\n<p>Die Anbindung der Sprache Java an die MOF-Spezifikation ist das Java Metadata Interface (JMI). Die Implementierungen werden bei der UML 1.4 dynamisch zur Laufzeit durch Netbeans MDR erzeugt (byte code generation). Eine Erweiterung des Metamodells ist somit nicht so einfach m\u00f6glich. Das AndroMDA-Framework kapselt darum den Zugriff auf Metaobjekte durch eigene Facaden, sogenannte Metafacaden (siehe Abbildung 6). F\u00fcr jede Metaklasse gibt es eine Metafacade. \u00dcber die Konfiguration der Cartridge wird festgelegt, \u00fcber welche Facade ich im Template auf die Metaobjekte zugreife. Damit habe ich die M\u00f6glichkeit, eigene abgeleitete Facaden zu schreiben, die z.B. komplexere Logik enthalten.<\/p>\n<div id=\"attachment_187\" style=\"width: 479px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/metafacades.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-187\" class=\"size-full wp-image-187\" title=\"metafacades\" alt=\"\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/metafacades.png\" width=\"469\" height=\"357\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/metafacades.png 469w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/metafacades-300x228.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/metafacades-394x300.png 394w\" sizes=\"auto, (max-width: 469px) 100vw, 469px\" \/><\/a><p id=\"caption-attachment-187\" class=\"wp-caption-text\">Abbildung 6: Zugriff auf Metaobjekte \u00fcber AndroMDA Metafacaden<\/p><\/div>\n<p>Die CoreMedia Cartridge besteht aus 2 Metafacaden: die Doctype- und die View-Metafacade. F\u00fcr die Generierung des Codes werden folgende Velocity-Templates verwendet:<\/p>\n<ul>\n<li><strong>Contentbeans<\/strong> \u2013 generiert die Interfaces f\u00fcr die Contentbeans<\/li>\n<li><strong>ContentbeansBase<\/strong> \u2013 generiert die abstrakten ContentbeansBase-Klassen<\/li>\n<li><strong>ContentbeansImpl<\/strong> \u2013 generiert die Implementierungsklasse f\u00fcr die Contentbeans<\/li>\n<li><strong>Dataviews<\/strong> \u2013 generiert die Caching-Anweisung in den dataviews.xml<\/li>\n<li><strong>Editor.labels<\/strong> \u2013 generiert die Label-Dateien f\u00fcr Java- und Webeditor<\/li>\n<li><strong>JSPTemplates<\/strong> \u2013 generiert aus den View-Modell die JSP-Templates zu den Dokumenten aus dem Dokumentenmodell<\/li>\n<\/ul>\n<p>Der schematische Aufbau der CoreMedia Cartridge ist in Abbildung 7 dargestellt.<\/p>\n<div id=\"attachment_189\" style=\"width: 616px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/aufbau.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-189\" class=\"size-full wp-image-189\" title=\"aufbau\" alt=\"\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/aufbau.png\" width=\"606\" height=\"620\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/aufbau.png 606w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/aufbau-293x300.png 293w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><\/a><p id=\"caption-attachment-189\" class=\"wp-caption-text\">Abbildung 7: schematischer Aufbau der CoreMedia Cartridge<\/p><\/div>\n<p>\u00dcber entsprechende Getter-Methoden der Metafacaden kann so in den Templates auf Attribute, Operationen, Stereotypen oder TaggedValues zugegriffen werden. Letzter werden verwendet, um das Model noch detaillierter zu beschreiben, was z.B. beim Caching oder bei den Views notwendig ist.<\/p>\n<p>Dazu wurde ein UML-Profil im Enterprise Architect erstellt, was die Zusammenh\u00e4nge von Stereotypen, TaggedValues und Wertebereiche definiert. In Abbildung 8 ist ein Auszug davon dargestellt.<\/p>\n<div id=\"attachment_191\" style=\"width: 615px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/profil.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-191\" class=\"size-full wp-image-191\" title=\"profil\" alt=\"\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/profil.png\" width=\"605\" height=\"480\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/profil.png 605w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/profil-300x238.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/profil-378x300.png 378w\" sizes=\"auto, (max-width: 605px) 100vw, 605px\" \/><\/a><p id=\"caption-attachment-191\" class=\"wp-caption-text\">Abbildung 8: UML-Profil f\u00fcr die CoreMedia Cartridge<\/p><\/div>\n<p>In der CoreMedia Cartridge ist das Caching f\u00fcr Klassen vom Stereotyp<em> \u00abDocType\u00bb<\/em> per default eingeschalten. Das Profil hat dazu im Stereotyp <em>\u00abDocType\u00bb<\/em> ein Attribute dataview.caching hat. Dieses ist vom Typ\u00a0 boolean und hat den initialen Wert true. In der TaggedValue-Ansicht der Klasse Teaser sieht das wie in Abbildung 9 aus.<\/p>\n<div id=\"attachment_192\" style=\"width: 275px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/teaser-taggedvalues.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-192\" class=\"size-full wp-image-192\" title=\"teaser-taggedvalues\" alt=\"\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/teaser-taggedvalues.png\" width=\"265\" height=\"261\" \/><\/a><p id=\"caption-attachment-192\" class=\"wp-caption-text\">Abbildung 9: TaggedValue-Ansicht des Teasers<\/p><\/div>\n<p>Weiterhin sieht man darin<em> editor.label<\/em> mit dem Wert \u201eTeaser\u201c. Dieser Eintrag f\u00fcr das Editor.labels-Template verwendet. Das Caching der Attribute ist per default ausgeschalten muss (<em>dataview.caching initial=false<\/em>) und muss explizit eingeschalten werden.<\/p>\n<p>Bei Verlinkung auf andere Dokumente \u00fcber LinklistPropeties\u00a0 kann zus\u00e4tzlich der dataview.associationType angegeben werden. Dieser hat den Wertebereich <em>{COMPOSITION, AGGREGATION, STATIC, DYNAMIC}<\/em> und wird \u00fcber Enumeration modelliert (siehe Abbildung 8). In der TaggedValue-Ansicht des Attributs incImage des Teasers (siehe Abbildung 10) sieht man, dass das Caching eingeschalten ist und dass der AssociationType Aggregation ist.<\/p>\n<div id=\"attachment_193\" style=\"width: 275px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/teaser-bild-taggedvalues.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-193\" class=\"size-full wp-image-193\" title=\"teaser-bild-taggedvalues\" alt=\"\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2012\/09\/teaser-bild-taggedvalues.png\" width=\"265\" height=\"261\" \/><\/a><p id=\"caption-attachment-193\" class=\"wp-caption-text\">Abbildung 10: : TaggedValue-Ansicht der Teasers-Property: incImage<\/p><\/div>\n<h2>Ressourcen<\/h2>\n<ul>\n<li><a title=\"CoreMedia Cartridge f\u00fcr AndroMDA\" href=\"http:\/\/marko-seifert.de\/blog\/?p=174\">MDA Enterprise Architect Projekt<\/a><\/li>\n<\/ul>\n<hr align=\"left\" size=\"1\" width=\"33%\" \/>\n<div>\n<p><a title=\"\" href=\"#_ftnref1\">[1]<\/a> MOF \u2013 Meta-Object Facility, ist die Beschreibung des UML-Metamodells der OMG\u00a0 (Meta-Metamodell der UML)<\/p>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>CoreMedia MDA Ansatz Herz eines jeden CoreMedia-CMS-Projekts ist das Dokumentenmodell. Das ist vergleichbar mit Dom\u00e4nenmodell einer fachlichen Anwendung. Im Unterschied dazu wird im Dokumentenmodell die Struktur des Contents beschrieben. Es wird definiert, welche Dokumenttypen es gibt (z.B. Teaser oder Bild), welche Eigenschaften diese haben (z.B. \u00dcberschrift, Text oder weitere) und welche Beziehungen es zwischen den Dokumenttypen gibt (z.B. ein Teaser hat ein Teaserbild). Neben den bereits erw\u00e4hnten Beziehungen zwischen Dokumenttypen(Assoziationen), gibt es die Vererbung von Dokumenttypen (z.B. ein Teaser ist ein Untertyp von Content).<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,38,11],"tags":[49,162,17,164,6,48],"class_list":["post-174","post","type-post","status-publish","format-standard","hentry","category-cms","category-coremedia","category-development","tag-andromda","tag-cms","tag-content-management","tag-coremedia","tag-java","tag-mda"],"_links":{"self":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/174","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=174"}],"version-history":[{"count":20,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/174\/revisions"}],"predecessor-version":[{"id":650,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/174\/revisions\/650"}],"wp:attachment":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=174"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}