# Human-Usable Textual Notation

Die Human-Usable Textual Notation (HUTN) ist in der modellgetriebenen Softwareentwicklung ein Standard der Object Management Group zur allgemeinen textbasierten Notation für MOF-konforme Metamodelle. HUTN-konforme Sprachen zur Beschreibung von Metamodellen sind eine Ergänzung zur graphischen UML-Notation und zum textbasierten XMI-Format mit dem Unterschied, dass sie trotz Textbasiertheit auf einfache Lesbarkeit für Menschen ausgerichtet sind.
Aus jedem (MOF-konformen) Metamodell können modellspezifische HUTN-Sprachen erzeugt werden und anschließend Dokumente in dieser Sprache geparst werden. Jedes in einer HUTN-Sprache beschriebene Modell kann vollautomatisch in eine XMI-Repräsentation des Modells übersetzt werden.
Die HUTN-Spezifikation wurde 2004 durch die Object Management Group abgeschlossen. HUTN zielt darauf ab, zu grafischen UML-Modellen eine alternative textbasierte Notation anzubieten. Derzeit gibt es nur wenige Anwendungen, die von HUTN Gebrauch machen. Ähnliche Ansätze verfolgen JSON und YAML.

## Überblick

UML hat sich als allgemeine grafische Notation in der modellgetriebenen Softwareentwicklung etabliert. UML stellt unterschiedliche Diagrammtypen zur Verfügung, um die statischen oder dynamischen Aspekte von Softwaresystemen zu beschreiben. Die grafische Notation bietet oft Vorteile, um die Strukturen komplexer Systeme zu veranschaulichen. Dennoch kann es einfacher sein, Änderungen an den Modellen mit einem textbasierten Editor zu schreiben, anstatt Maus und Editor im Wechselspiel zu nutzen; vergleichbar mit anderen Routinesituationen des Computergebrauchs, in denen die Nutzung der Maus oft auch als lästig empfunden wird. Dafür wurde HUTN entwickelt. Jedes beliebige UML-Modell kann in HUTN beschrieben werden, da HUTN auf dem gleichen Metamodell wie UML beruht – dem MOF-Metamodell.
Die für die textbasierte Notation von MOF-Modellen bereits entwickelte XMI-Notation dient dagegen dem Austausch von (UML-)Modellen zwischen Softwareapplikationen. Sie ist eine XML-konforme Notation, die für menschliche Anwender nur umständlich zu gebrauchen ist. Dafür ist in erster Linie der XML-typische Notationsballast in Form von öffnenden und schließenden Elementnamen verantwortlich, auf den in HUTN verzichtet wird. Dennoch lassen sich HUTN und XMI vollautomatisch ineinander umwandeln, sodass HUTN vor allem als alternative Notation für UML zu sehen ist. Die damit mögliche Barrierefreiheit der UML-Notation beispielsweise für die Brailleschrift wird derzeit nicht wahrgenommen oder diskutiert.

## Beispiel

Ein Metamodell zur Personendatenverwaltung, das die Klasse Person mit Attributen Vorname, Nachname und Alter und eine Vater-Sohn-Relation definiert, spezifiziert eine HUTN-Sprache, die Worte wie Person und Vorname usw. enthält. Das folgende konkrete Modell bestehend aus zwei Personen in Vater-Sohn-Relation wird durch eine XMI-Spezifikation, ein UML-Objektdiagramm und eine HUTN-Beschreibung gleichermaßen repräsentiert.
| <?xml version = "1.0"?> <XMI> <XMI.header> <XMI.model xmi.name = "PersonenPaket" xmi.version = "1.1"/> </XMI.header> <XMI.content> <PersonenPaket xmi.id="xmi-id-001"> <PersonenPaket.Person xmi.id="Hans"> <PersonenPaket.Person.Vorname> Hans </PersonenPaket.Person.Vorname> <PersonenPaket.Person.Name> Meier </PersonenPaket.Person.Name> <PersonenPaket.Person.Alter> 50 </PersonenPaket.Person.Alter> <PersonenPaket.Person.Sohn> <PersonenPaket.Person xmi.idref="Peter"> </PersonenPaket.Person.Sohn> </PersonenPaket.Person> <PersonenPaket.Person xmi.id="Peter"> <PersonenPaket.Person.Vorname> Peter </PersonenPaket.Person.Vorname> <PersonenPaket.Person.Name> Meier </PersonenPaket.Person.Name> <PersonenPaket.Person.Alter> 20 </PersonenPaket.Person.Alter> <PersonenPaket.Person.Vater> <PersonenPaket.Person xmi.idref="Hans"> </PersonenPaket.Person.Vater> </PersonenPaket.Person> </PersonenPaket> </XMI.content> </XMI> | HUTN PersonenPaket “id-001” { Person “Hans” { Vorname: “Hans” Nachname: “Meier” Alter: 50 Sohn: Person “Peter” } Person “Peter” { Vorname: “Peter” Nachname: “Meier” Alter: 20 Vater: Person “Hans” } } |
| <?xml version = "1.0"?> <XMI> <XMI.header> <XMI.model xmi.name = "PersonenPaket" xmi.version = "1.1"/> </XMI.header> <XMI.content> <PersonenPaket xmi.id="xmi-id-001"> <PersonenPaket.Person xmi.id="Hans"> <PersonenPaket.Person.Vorname> Hans </PersonenPaket.Person.Vorname> <PersonenPaket.Person.Name> Meier </PersonenPaket.Person.Name> <PersonenPaket.Person.Alter> 50 </PersonenPaket.Person.Alter> <PersonenPaket.Person.Sohn> <PersonenPaket.Person xmi.idref="Peter"> </PersonenPaket.Person.Sohn> </PersonenPaket.Person> <PersonenPaket.Person xmi.id="Peter"> <PersonenPaket.Person.Vorname> Peter </PersonenPaket.Person.Vorname> <PersonenPaket.Person.Name> Meier </PersonenPaket.Person.Name> <PersonenPaket.Person.Alter> 20 </PersonenPaket.Person.Alter> <PersonenPaket.Person.Vater> <PersonenPaket.Person xmi.idref="Hans"> </PersonenPaket.Person.Vater> </PersonenPaket.Person> </PersonenPaket> </XMI.content> </XMI> | UML |