Zum Inhalt springen

MOF QVT

aus Wikipedia, der freien Enzyklopädie

Query View Transformation (MOF QVT) ist eine Spezifikation der Object Management Group, die eine (Programmier-)Sprache für Modell-zu-Modell-Transformationen beschreibt. QVT ist Teil der Meta Object Facilities (MOF), einer Sammlung von Dokumenten der OMG zur formalen Definition von Modellen sowie deren Anwendung, wie sie etwa im Rahmen der modellgetriebenen Architektur (MDA) benötigt wird.

Bei der Diskussion ist zwischen Sprachen zu unterscheiden, die von Dritten als Antwort auf den „Request for Proposals“ (RFP)<ref name="OMG02">OMG: MOF 2.0 Query / Views / Transformations RFP. ad/2002-04-10. Needham, MA: Object Management Group, April 2002. omg.org</ref> entworfen wurden und der Sprache QVT, wie sie in den Spezifikationen<ref name="OMG07">OMG: Meta Object Facility (MOF) 2.0 Query/View/Transformation Specification. Final Adopted Specification ptc/07-07-07. Needham, MA: Object Management Group, July 2007. omg.org</ref><ref name="OMG08">OMG: Meta Object Facility (MOF) 2.0 Query/View/Transformation Specification. Version 1.0 formal/08-04-03. Needham, MA: Object Management Group, April 2008. omg.org</ref> beschrieben ist.

So kann als einfaches Beispiel ein ER-Modell aus einem Klassenmodell durch Transformation erzeugt werden. Hierzu benötigt man im einfachsten Fall das Klassen- und ER-Modell und deren jeweiliges Metamodell sowie eine Vorschrift, wie das ER-Modell aus dem Klassenmodell zu erzeugen ist. Diese Vorschrift kann in einer der QVT-Sprachen beschrieben werden. Als besonders typisches Beispiel kann ein (rein fachliches) Analysemodell in ein (technisches) Designmodell transformiert werden, das heißt die Transformation fügt die Technik, in der das Modell realisiert werden soll, zum Analysemodell hinzu.

Das Akronym QVT steht für queries (Anfragen), views (Sichten) und transformations (Transformationen). Unter Anfragen versteht MOF formale Ausdrücke, mit denen einzelne Elemente eines Modells ausgewählt werden können; Sichten sind komplexe Anfragen, mit denen ganze Abschnitte aus einem Modell ausgewählt werden; mit Transformationen werden Beziehungen zwischen Modellen dargestellt. Trotz des Namens QVT versteht man unter MOF QVT jedoch meist nur einen Standard zur Beschreibung von MOF-Modelltransformationen, da diese als das Hauptanwendungsgebiet von QVT betrachtet werden und Queries und Views sich ohnehin als Teile einer Transformation interpretieren lassen.

Aufbau

Datei:QVT-Language-Architecture 591x387.jpg
QVT Spracharchitektur

Die QVT Spezifikation<ref name="OMG08" /> definiert zwei Arten von Sprachen: deklarative und imperative. Der deklarative Teil besteht aus den Sprachen QVT-Relations und QVT-Core sowie einer Abbildung der Relations auf die Core Sprache RelationsToCoreTransformation. QVT-Core verhält sich zu QVT-Relations wie Java-Bytecode zu Java-Quellcode und ist für Endanwender daher von untergeordneter Bedeutung. Der imperative Teil enthält die Sprache Operational Mappings Language sowie Vorgaben für Black Box Implementations, also eine Schnittstelle für außerhalb von QVT implementierte Transformationssprachen.

Deklarative und imperative Sprachen können auf folgende Weise gemeinsam verwendet werden: Es ist möglich, einzelne Relationen in einer relationalen Transformation in einer der imperativen Sprachen zu implementieren und diese in die relationale Transformation als plug-in quasi einzuklinken. Dies kann sinnvoll sein, um besonders komplexe Algorithmen zu implementieren oder vorhandene Programmbibliotheken wiederzuverwenden.

Nachfolgend ein simples Beispiel einer Transformation in der Sprache Operational Mappings, welche jede persistente Klasse eines UML-Modells auf eine Tabelle in einem Entity-Relationship-Modell abbildet. <syntaxhighlight lang="eiffel">

  -- Transformation von einem 'UML' Modell auf ein 'ERM' Modell
transformation uml2erm( in uml : UML, out erm : ERM )
  -- Einstiegspunkt
main() {
  uml.objects()[#Class]->map class2table();
}
  -- Abbildung von Class auf Table
mapping Class::class2table() : Table
  when { self.stereotypes->includes('persistent') }
  {
    name := self.name;
  }

</syntaxhighlight> Das Beispiel enthält die beiden OCL-Ausdrücke uml.objects()[#Class], welcher alle Klassen des UML-Modells selektiert, und self.stereotypes->includes('persistent'), der prüft ob die Klasse (self) vom Stereotyp 'persistent' ist. Die Methode main() bildet den Anfangspunkt des Programms. Sie wendet auf alle Klassen des UML-Modells das Mapping class2table an, das aus der übergebenen Klasse eine Tabelle im ER-Modell erzeugt.

Das QVT-Metamodell (welches QVT definiert) baut auf den Metamodellen von EMOF und Essential OCL auf. Letzteres wird um imperative Funktionen erweitert (imperative OCL).

Anwendung

Voraussetzungen: QVT-Transformationen basieren auf den Metamodellen der jeweiligen In- und Output-Modelle. Diese müssen daher zur Ausführung der Transformation vorliegen. Durch die Verwendung der Metamodelle können Abbildungen auf Basis der Elementtypen definiert werden. Auf diese Weise kann eine Transformation eine Abbildung so definieren, dass beispielsweise alle Elemente vom Typ EntityType aus einem ER-Modell auf je ein Element vom Typ Klasse im Klassenmodell transformiert werden. Die Metamodelle müssen für QVT mittels der MOF beschrieben sein.

Die Bedeutung von QVT liegt in der Modell-zu-Modell-Transformation im Rahmen von modellgetriebener Architektur. Im Gegensatz zur bisher weitgehend üblichen Modell-zu-Code-Transformation, kann so ein Platform Specific Model (PSM) nicht nur als Source-Code, sondern als Modell erstellt werden. Aus diesem kann dann später in einem zweiten Schritt der Source-Code generiert werden. Somit verfügt man durch das PSM als echtes Modell auch auf der Ebene der technischen Architektur über die Vorteile der Modellierung gegenüber einer rein Source-Code-basierten Softwareentwicklung (siehe hierzu auch Unified Modeling Language oder Software Engineering).

Typische Einsatzszenarien für QVT-Sprachen sind:

  • Verifikation von Modellen
  • Uni- und Bidirektionale Modell-Transformationen (N-direktionale sind ebenfalls möglich aber von geringer Relevanz)

Im Rahmen von Transformationen können Elemente von Modellen erzeugt, ersetzt, oder gelöscht werden. Hierzu können Traces zwischen Modellen gepflegt werden. Dies sind Zuordnungen zwischen Elementen der verschiedenen Modelle, die besagen welches Element auf welches abgebildet wurde. Dies ist notwendig, um Elemente konsistent erzeugen, ersetzen oder löschen zu können.

Implementierungen

Hier ist zwischen Implementierungen auf Basis des RFP<ref name="OMG02" /> und der Spezifikation<ref name="OMG08" /> zu unterscheiden, bei letzterer noch, welcher Teil (operational, relational, Core) umgesetzt wurde und welche Version der Spezifikation als Referenz dient. Handelt es sich um Antworten auf den RFP, so wurden „nur“ die im RFP beschriebenen Anforderungen (teilweise) umgesetzt, Umfang und Syntax der Sprachen können sich also stark voneinander unterscheiden.

Name Hersteller (Distributor) QVT Operational QVT Relational QVT Core Lizenz Anmerkung
Borland Together Architect<ref><templatestyles src="Webarchiv/styles.css" />{{#if:20061214175952 * Vorlage:Webarchiv/Wartung/Stern{{#if: borland.com | {{#invoke:WLink|getEscapedTitle|borland.com}} | {{#invoke:Webarchiv|getdomain|http://www.borland.com/de/products/together/index.html}} }} (Archivversionen) 20061214175952}} {{#if: }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein! {{#invoke:WLink|getEscapedTitle|borland.com}} | {{#invoke:Webarchiv|getdomain|http://www.borland.com/de/products/together/index.html}} }}] {{#ifeq: | [] | [ | ( }}Memento{{#if: {{#if: 2019-04-28 22:56:49 InternetArchiveBot | 2019-04-28 22:56:49 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20061214175952}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
      }}
  }}
{{#if: {{{webciteID}}}}} len|{{{webciteID}}}}} {{#invoke:WLink|getEscapedTitle|borland.com}} | {{#invoke:Webarchiv|getdomain|http://www.borland.com/de/products/together/index.html}} }}] {{#ifeq: | [] | [ | ( }}Memento{{#if: {{#if: 2019-04-28 22:56:49 InternetArchiveBot | 2019-04-28 22:56:49 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }} {{#invoke:WLink|getEscapedTitle|borland.com}} | {{#invoke:Webarchiv|getdomain|http://www.borland.com/de/products/together/index.html}} }}] {{#ifeq: | [] | [ | ( }}Memento{{#if: {{#if: 2019-04-28 22:56:49 InternetArchiveBot | 2019-04-28 22:56:49 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }} webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if: }}
      }}
{{{webciteID}}}}} {{#if: borland.com | {{#invoke:WLink|getEscapedTitle|borland.com}} | {{#invoke:Webarchiv|getdomain|http://www.borland.com/de/products/together/index.html}} }}] (Memento{{#if: {{#if: 2019-04-28 22:56:49 InternetArchiveBot | 2019-04-28 22:56:49 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
  }}
{{#if: Vorlage:Webarchiv/Today {{#if: Vorlage:Webarchiv/Generisch {{#invoke:WLink|getEscapedTitle|borland.com}} | {{#invoke:Webarchiv|getdomain|http://www.borland.com/de/products/together/index.html}} }}]
                 }}}}}}}}{{#if:2019-04-28 22:56:49 InternetArchiveBot
Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
all = url= opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original= cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv errNS = 0 template = Vorlage:Webarchiv format = * preview = 1
  }}{{#ifexpr: {{#if:20061214175952|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
{{#if: }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
getdomain|{{{archiv-url}}}}} web.archive.org =
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
webcitation.org =
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
Execute}}|}} {{#if: }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}} }} {{#if: }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
{{#if: {{#if: }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.borland.com/de/products/together/index.html}}
{{#if: }}
  }}{{#if: borland.com
isBracketedLink|borland.com}} {{#if: }}
      }}
{{#if: }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
addlpages= {{#if: }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|http://www.borland.com/de/products/together/index.html%7Carchiv}} |-1
{{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.borland.com/de/products/together/index.html%7C4}}%7Chttp}} |-1 {{#switch: {{#invoke:Webarchiv|getdomain|http://www.borland.com/de/products/together/index.html }} daserste.ndr.de | inarchive.com | webcitation.org = #default = {{#if: }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }}</ref> || Borland    ||style="text-align:center"| X ||  ||  || kommerziell || basiert auf Vorversion der Spezifikation
SmartQVT<ref><templatestyles src="Webarchiv/styles.css" />{{#if:20061209020728 * Vorlage:Webarchiv/Wartung/Stern{{#if: smartqvt.elibel.tm.fr | {{#invoke:WLink|getEscapedTitle|smartqvt.elibel.tm.fr}} | {{#invoke:Webarchiv|getdomain|http://smartqvt.elibel.tm.fr/}} }} (Archivversionen) 20061209020728}} {{#if: }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein! {{#invoke:WLink|getEscapedTitle|smartqvt.elibel.tm.fr}} | {{#invoke:Webarchiv|getdomain|http://smartqvt.elibel.tm.fr/}} }}] {{#ifeq: | [] | [ | ( }}Memento{{#if: {{#if: 2019-04-28 22:56:49 InternetArchiveBot | 2019-04-28 22:56:49 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20061209020728}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
      }}
  }}
{{#if: {{{webciteID}}}}} len|{{{webciteID}}}}} {{#invoke:WLink|getEscapedTitle|smartqvt.elibel.tm.fr}} | {{#invoke:Webarchiv|getdomain|http://smartqvt.elibel.tm.fr/}} }}] {{#ifeq: | [] | [ | ( }}Memento{{#if: {{#if: 2019-04-28 22:56:49 InternetArchiveBot | 2019-04-28 22:56:49 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }} {{#invoke:WLink|getEscapedTitle|smartqvt.elibel.tm.fr}} | {{#invoke:Webarchiv|getdomain|http://smartqvt.elibel.tm.fr/}} }}] {{#ifeq: | [] | [ | ( }}Memento{{#if: {{#if: 2019-04-28 22:56:49 InternetArchiveBot | 2019-04-28 22:56:49 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }} webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if: }}
      }}
{{{webciteID}}}}} {{#if: smartqvt.elibel.tm.fr | {{#invoke:WLink|getEscapedTitle|smartqvt.elibel.tm.fr}} | {{#invoke:Webarchiv|getdomain|http://smartqvt.elibel.tm.fr/}} }}] (Memento{{#if: {{#if: 2019-04-28 22:56:49 InternetArchiveBot | 2019-04-28 22:56:49 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
  }}
{{#if: Vorlage:Webarchiv/Today {{#if: Vorlage:Webarchiv/Generisch {{#invoke:WLink|getEscapedTitle|smartqvt.elibel.tm.fr}} | {{#invoke:Webarchiv|getdomain|http://smartqvt.elibel.tm.fr/}} }}]
                 }}}}}}}}{{#if:2019-04-28 22:56:49 InternetArchiveBot
Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
all = url= opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original= cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv errNS = 0 template = Vorlage:Webarchiv format = * preview = 1
  }}{{#ifexpr: {{#if:20061209020728|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
{{#if: }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
getdomain|{{{archiv-url}}}}} web.archive.org =
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
webcitation.org =
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
Execute}}|}} {{#if: }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}} }} {{#if: }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
{{#if: {{#if: }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|http://smartqvt.elibel.tm.fr/}}
{{#if: }}
  }}{{#if: smartqvt.elibel.tm.fr
isBracketedLink|smartqvt.elibel.tm.fr}} {{#if: }}
      }}
{{#if: }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
addlpages= {{#if: }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|http://smartqvt.elibel.tm.fr/%7Carchiv}} |-1
{{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://smartqvt.elibel.tm.fr/%7C4}}%7Chttp}} |-1 {{#switch: {{#invoke:Webarchiv|getdomain|http://smartqvt.elibel.tm.fr/ }} daserste.ndr.de | inarchive.com | webcitation.org = #default = {{#if: }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }}</ref> || France Telecom R&D ||style="text-align:center"| X ||  ||  || Open Source (EPL) || Java-basierte Umsetzung, Eclipse-Plugin
medini QVT<ref>ikv.de</ref> ikv++ technologies ag X* Open Source (EPL) * unterstützt noch keine Collection-Patterns
ModelMorf<ref><templatestyles src="Webarchiv/styles.css" />{{#if:20061119030152 * Vorlage:Webarchiv/Wartung/Stern{{#if: tcs-trddc.com | {{#invoke:WLink|getEscapedTitle|tcs-trddc.com}} | {{#invoke:Webarchiv|getdomain|http://www.tcs-trddc.com/ModelMorf/index.htm}} }} (Archivversionen) 20061119030152}} {{#if: }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein! {{#invoke:WLink|getEscapedTitle|tcs-trddc.com}} | {{#invoke:Webarchiv|getdomain|http://www.tcs-trddc.com/ModelMorf/index.htm}} }}] {{#ifeq: | [] | [ | ( }}Memento{{#if: {{#if: 2019-04-28 22:56:49 InternetArchiveBot | 2019-04-28 22:56:49 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20061119030152}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
      }}
  }}
{{#if: {{{webciteID}}}}} len|{{{webciteID}}}}} {{#invoke:WLink|getEscapedTitle|tcs-trddc.com}} | {{#invoke:Webarchiv|getdomain|http://www.tcs-trddc.com/ModelMorf/index.htm}} }}] {{#ifeq: | [] | [ | ( }}Memento{{#if: {{#if: 2019-04-28 22:56:49 InternetArchiveBot | 2019-04-28 22:56:49 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }} {{#invoke:WLink|getEscapedTitle|tcs-trddc.com}} | {{#invoke:Webarchiv|getdomain|http://www.tcs-trddc.com/ModelMorf/index.htm}} }}] {{#ifeq: | [] | [ | ( }}Memento{{#if: {{#if: 2019-04-28 22:56:49 InternetArchiveBot | 2019-04-28 22:56:49 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }} webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if: }}
      }}
{{{webciteID}}}}} {{#if: tcs-trddc.com | {{#invoke:WLink|getEscapedTitle|tcs-trddc.com}} | {{#invoke:Webarchiv|getdomain|http://www.tcs-trddc.com/ModelMorf/index.htm}} }}] (Memento{{#if: {{#if: 2019-04-28 22:56:49 InternetArchiveBot | 2019-04-28 22:56:49 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
  }}
{{#if: Vorlage:Webarchiv/Today {{#if: Vorlage:Webarchiv/Generisch {{#invoke:WLink|getEscapedTitle|tcs-trddc.com}} | {{#invoke:Webarchiv|getdomain|http://www.tcs-trddc.com/ModelMorf/index.htm}} }}]
                 }}}}}}}}{{#if:2019-04-28 22:56:49 InternetArchiveBot
Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
all = url= opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original= cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv errNS = 0 template = Vorlage:Webarchiv format = * preview = 1
  }}{{#ifexpr: {{#if:20061119030152|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
{{#if: }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
getdomain|{{{archiv-url}}}}} web.archive.org =
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
webcitation.org =
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
Execute}}|}} {{#if: }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}} }} {{#if: }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
{{#if: {{#if: }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.tcs-trddc.com/ModelMorf/index.htm}}
{{#if: }}
  }}{{#if: tcs-trddc.com
isBracketedLink|tcs-trddc.com}} {{#if: }}
      }}
{{#if: }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
addlpages= {{#if: }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|http://www.tcs-trddc.com/ModelMorf/index.htm%7Carchiv}} |-1
{{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.tcs-trddc.com/ModelMorf/index.htm%7C4}}%7Chttp}} |-1 {{#switch: {{#invoke:Webarchiv|getdomain|http://www.tcs-trddc.com/ModelMorf/index.htm }} daserste.ndr.de | inarchive.com | webcitation.org = #default = {{#if: }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }}</ref> || TRDDC || ||style="text-align:center"| X* ||  || kommerziell || * nicht vollständig
Tefkat<ref>tefkat bei SourceForge</ref> University of Queensland (SourceForge) Open Source (LGPL) Eclipse-Plugin, verwendet EMF
Atlas Transformation Language ATLAS INRIA & LINA (Eclipse Foundation) Open Source Hybride Sprache (kombiniert relationale und operationale Konzepte)
Eclipse MMT Projekt<ref>Model to Model Transformation - MMT - Eclipsepedia</ref> Eclipse Foundation geplant Open Source (EPL) Operationaler Teil befindet sich im Eclipse Incubator, Testversionen (des operationalen Teils) sind verfügbar.

Einzelnachweise

<references />