Technische Dokumentation – Version 1.0


3  Elemente der IPA-Tabelle

Die meisten Elemente der IPA-Tabelle sind in Tabellenform angelegt. Aus diesem Grund werden in diesem Abschnitt lediglich einige stereotype Konzepte zum Aufbau erläutert, die sich in ähnlicher Form in anderen Templates wiederfinden. Da sich der Aufbau der Konsonantentabelle und der Aufbau des Vokaltrapezes zum Teil anderer Methoden bedienen, sind sie in diesem Kapitel separat aufgeführt.

3.1  Konsonantentabelle („Consonants“)


Listing 3.1: Auszüge aus der Konsonanten-Tabelle aus dem body-Tag und dem „Consonants“-Template
<div xsl:use−attribute−sets="div.consonants" id="consonants"
<caption  xsl:use−attribute−sets ="caption.style"><h3>Consonants (Pulmonic)</h3></caption
  <table id="con" xsl:use−attribute−sets="table.consonants"
    <tr xsl:use−attribute−sets="space.adjustment">         <!−− Überschriftenzeile mit angepasster Höhe −−> 
       <th xsl:use−attribute−sets="th.manner_and_place"></th>  <!−− Tabellenspalte für Artikulationsart −−> 
       <th xsl:use−attribute−sets="th.place">Bilabial</th>     <!−− neue Spalte für bilabiale Laute     −−> 
       <th xsl:use−attribute−sets="th.place.large">Labiodental</th><!−− breitere Spalte (längerer Text) −−> 
       ... 
    <tr manner="plosive">                                     <!−− neue Tabellenzeile für die Plosive   −−> 
       <th xsl:use−attribute−sets="th.manner">Plosive</th>    <!−− setzt die Zeilenüberschrift: Plosive −−> 
         <xsl:call−template name="Consonants">                <!−− 1. Aufruf des "Consonants"−Templates −−> 
           <xsl:with−param name="manner" select="plosive"/<!−− übergebener Parameter plosive      −−> 
         </xsl:call−template>          <!−− alle gefundenen Elemente werden der Reihe nach abgearbeitet −−> 
     </tr
     <tr manner="nasal">                                      <!−− neue Tabellenzeile für nasale Laute  −−> 
       <th xsl:use−attribute−sets="th.manner">Nasal</th
          <xsl:call−template name="Consonants">               <!−− 2. Aufruf des "Consonants"−Templates −−> 
            <xsl:with−param name="manner" select="nasal"/>  <!−− übergebener Parameter nasal        −−> 
          </xsl:call−template
     </tr
     ... 
   </table
</div
 
<!−− ##########################  TEMPLATE CONSONANTS  ########################### −−> 
  <xsl:template name="Consonants"
    <xsl:param name="manner"/>      <!−− liest den übergebenen Wert des Parameters aus (z.B. plosive’) −−> 
    <xsl:for−each select="ipa/sound[@type=’consonant and manner=$manner]">      <!−− for−each−Schleife −−> 
      <xsl:choose<!−− für jedes gefundene Element vom Typ consonant und dem jeweiligen Parameter... −−> 
        <xsl:when test="category=’voiceless"<!−− test: wenn die Kategorie des Lautes voiceless ist −−> 
          <td class="{class/text()}"  xsl:use−attribute−sets ="no.border.right"><!−− kein Rahmen rechts −−> 
            <xsl:if test="name/unicode != ’’">     <!−− wenn das name/unicode−Element nicht leer ist... −−> 
            <xsl:call−template name="Transcribe">  <!−− Aufruf des Transcribe Templates (vgl. 3.4, 3.5) −−> 
              <xsl:with−param name="name" select="./name"></xsl:with−param>    <!−− Übergabe des Pfades −−> 
            </xsl:call−template>         <!−− (Aufruf von Transcribe führt zum Aufruf von Add_metadata) −−> 
            </xsl:if>  <!−− Ausgabe des Unicode−Zeichens durch <xsl:value−of select="./name/unicode"/>  −−> 
          </td>        <!−− Ende der Tabellenzelle  wenn kein Zeichen existiert, bleibt die Zelle leer −−> 
        </xsl:when
        <xsl:when test="category=’voiced">  <!−− gleiches Vorgehen mit dem Attribut−Set no.border.left −−> 
        ... 
        </xsl:when
      </xsl:choose
    </xsl:for−each
  </xsl:template>

3.2  Weitere Tabellen (am Bsp. der Tabelle „OtherSymbols“)

Das Template OtherSymbols dient prototypisch der Beschreibung aller Elemente, die zusätzlich eine Ausgabe der Lautbezeichnung, der Kategorie des Lautes oder eine zusätzliche Beschreibung beinhalten.


Listing 3.2: Erstellung der Tabelle „Other Symbols“
<!−− ############################  TABLE OTHER SYMBOLS ########################## −−> 
<div xsl:use−attribute−sets="div.other_symbols" id="other_symbols"
<caption  xsl:use−attribute−sets ="caption.style"><h3>Other Symbols</h3></caption>     <!−− Überschrift −−> 
  <table id="oth" xsl:use−attribute−sets="table.other_symbols"><!−− Abruf der passenden Style−Attribute −−> 
     <xsl:call−template name="OtherSymbols"/>                  <!−− Aufruf des "OtherSymbols"−Templates −−> 
   </table
</div
 
<!−− #########################  TEMPLATE OTHER SYMBOLS  ######################### −−> 
<xsl:template name="OtherSymbols"
 
    <xsl:for−each select="//sound[@type=’other’]">         <!−− für jedes Element vom Typ other wird: −−> 
     <tr>                                                  <!−− eine neue Zeile in der Tabelle erstellt −−> 
     <xsl:choose
      <xsl:when test ="name2 != ’’">          <!−− wenn ein <name2>−Element existiert, dann zwei Spalten−−> 
        <td class="{class/text()}" width="10%" xsl:use−attribute−sets="no.border.right"<!−− 1. Spalte −−> 
           <xsl:call−template name="Transcribe">             <!−− in die erste (schmale) Zelle wird das −−> 
             <xsl:with−param name="name" select="./name"></xsl:with−param><!−− <name>−Element eingefügt −−> 
           </xsl:call−template
       </td
        <td class="{class/text()}" width="10%" xsl:use−attribute−sets="no.borders">      <!−− 2. Spalte −−> 
         <xsl:call−template name="Transcribe">              <!−− in die zweite (schmale) Zelle wird das −−> 
           <xsl:with−param name="name" select="./name2"></xsl:with−param><!−− <name2>−Element eingefügt −−> 
         </xsl:call−template
       </td
      </xsl:when
      <xsl:otherwise>         <!−− wenn kein <name2>−Element existiert, wird eine breite Spalte erzeugt −−> 
        <td class="{class/text()}" width="20%" colspan="2" xsl:use−attribute−sets="single.symbol"
           <xsl:call−template name="Transcribe">        <!−− in die breite, zweispaltige Zelle wird das −−> 
             <xsl:with−param name="name" select="./name"></xsl:with−param><!−− <name>−Element eingefügt −−> 
           </xsl:call−template
       </td
      </xsl:otherwise
     </xsl:choose
  <td class="emp" width="80%" xsl:use−attribute−sets="td.text.style"<!−− neue Spalte für Beschreibung −−> 
     <xsl:if test="category != ’’">              <!−− Ausgabe der Kategorie (wenn diese nicht leer ist) −−> 
    <!−− Inhalt des Kategorie−Elements wird ausgegeben, 1. Zeichen wird in Großbuchstaben transformiert −−> 
        <xsl:value−of select="concat(substring(translate(./category/text(),$lowercase,$uppercase),1,1), substring(./category/text(),2))"/
    <!−− Großschreibung des ersten Zeichens (durch Aufruf der Variablen lowercase und uppercase’)    −−> 
     </xsl:if
     <xsl:if test="category = ’’">                <!−− wenn das Kategorie−Element des Zeichens leer ist −−> 
       <xsl:text</xsl:text>                <!−− Ausgabe eines Leerzeichens und des Artikulationsortes −−> 
          <xsl:value−of select="concat(substring(translate(./place/text(),$lowercase,$uppercase),1,1), substring(./place/text(),2))"/
     </xsl:if
     <xsl:if test="category != ’’">  <!−− Anfügen weiterer Angaben (bei nicht−leerem Kategorie−Eintrag) −−> 
       <xsl:text</xsl:text>                 <!−− Leerzeichen (folgt hinter der Ausgabe der Kategorie) −−> 
         <xsl:value−of select="place/text()"/>                      <!−− Ausgabe des Artikulationsortes −−> 
     </xsl:if
       <xsl:text</xsl:text
           <!−− Ausgabe des Artikulationsmodus (bzw. der im manner−Element hinterlegten Beschreibung) −−> 
          <xsl:value−of select="manner/text()"/
       </td
    </tr
 
   </xsl:for−each
</xsl:template>

3.3  Vektorgrafik der Vokale („Vowels“)

Das Vokaltrapez wird in XIPA durch eine Grafik im SVG-Format dargestellt. Die Grundstruktur der Grafik – das Koordinatensystem1 und die unterschiedlichen Ebenen der Grafik sowie die Beschriftungen – werden im body-Tag des XSL-Stylesheets definiert. Nach der SVG-Deklaration folgen mehrere Ebenen, die den Rahmen bestimmen, das Trapez aufspannen und letztendlich den Vokalraum füllen. Die einzelnen Ebenen befinden sich in Tags mit der Bezeichnung g. Elemente innerhalb des öffnenden und des schließenden g-Tags sind zu einer Gruppe zusammengefasst. Innerhalb der Gruppen werden die Elemente Pfad, Text und Kreis (path, text und circle) verwendet, die unterschiedliche Aufgaben übernehmen. Das Auffüllen des Vokaltrapezes mit Inhalten (Lauten) ist im darauffolgenden Beispiel in Abschnitt 3.3.2 beschrieben.

3.3.1  Grundgerüst der Vektorgrafik


Listing 3.3: Auszug aus dem body-Tag des Vokaltrapezes (Grundgerüst der Vektorgrafik)
<!−− ###########################  SVG CHART VOWELS  ############################## −−> 
<svg 
  xmlns="http://www.w3.org/2000/svg"    <!−− Deklaration des SVG−Namensraums −−> 
  version="1.1"                         <!−− Angabe der SVG−Version bzw. Spezifikation −−> 
  width="465"                           <!−− Angabe der relativen Breite −−> 
  height="280"                          <!−− Angabe der relativen Höhe   −−> 
  viewBox="0 0 465 280">                <!−− Angabe des sichtbaren Bereichs (Min−x, Min−y Breite, Höhe) −−> 
 
  <!−−############# MAIN FRAME ##############−−> 
  <g id="description">       <!−− <g>−Gruppe zur Beschriftung von Zungenposition und Kieferöffnungsgrad −−> 
   <!−−DESCRIPTION TEXT−−> 
   <!−− Text−Elemente zur Ausgabe der Beschriftung. Die Position wird durch die Werte x und y bestimmt  −−> 
   <text x="83" y="10" text−anchor="middle" xsl:use−attribute−sets="vowels.text">Front</text
   <text x="260" y="10" text−anchor="middle" xsl:use−attribute−sets="vowels.text">Central</text
    ... 
     <!−−########### QUADRILATERAL #############−−>  <!−− Aufspannen des Vokaltrapezes (Verhältnis 3:2) −−> 
     <!−−  <g>−Gruppe des Trapezgerüsts  Ausgabe von horizontalen/vertikalen Linien und Ankerpunkten   −−> 
     <g id="quadrilateral" transform="translate(84,34)"<!−− Verschieben aller folgenden Gruppierungen −−> 
        <!−−VERTICAL LINES−−>       <!−− durch die Verschiebung liegt der Ursprung des Trapezes bei 0:0 −−> 
        <!−− Pfade zur Darstellung der vertikalen und schrägen Linien des Trapezes                      −−> 
        <path d="M0   0 176   234" stroke−width=".3"/>  <!−− erste vertikale Linie (von i bis a)        −−> 
        <path d="M176 0 263.5 234" stroke−width=".3"/
         ... 
        <!−−HORIZONTAL LINES−−> 
        <!−− Pfade zur Darstellung der horizontalen Linien (Koordinatenangaben und Strichstärke)        −−> 
        <path d="M0   0   351 0" stroke−width=".3"/>  <!−− erste horizontale Linie (von i bis u)        −−> 
        <path d="M59  78  351 78" stroke−width=".3"/
         ... 
        <!−−########### ANCHORPOINTS ##############−−> 
        <!−− Koordinaten und Radius der Ankerpunkte (gefüllte schwarze Kreiselemente im Trapez)         −−> 
        <!−−CLOSE−−> 
        <circle cx="0" cy="0" r="2.5"/>  <!−− 1. Punkt im Ursprung des Koordinatensystems (zw. i und y) −−> 
        <circle cx="176" cy="0" r="2.5"/
         ... 
          <!−−########### VOWELSPACE ##############−−> 
          <g id="vowelspace">   <!−− Erstellen einer Gruppe für das Auffüllen des Trapezes mit Inhalten −−> 
            <xsl:call−template name="Vowels"/<!−− Aufruf des Vowels−Templates zur Auswahl der Inhalte −−> 
          </g
       </g
    </g
</svg>

3.3.2  Das Vowels-Template

Das folgende Template ist modular aufgebaut, um eine spätere Integration sprachspezifischer Vokalräume zu ermöglichen. Das Template bedient sich in der Standardausführung an den in einer weiteren XSL-Datei hinterlegten x- und y-Koordinaten für die Position der jeweiligen Vokale. Die Koordinaten sind in der Datei vowels.xsl in Form von Attribut-Sets hinterlegt. Diese „internationale Variante“ gruppiert die Laute um die jeweiligen Ankerpunkte herum.

Die zur Anordnung verwendeten Positionen sind in Attribut-Sets hinterlegt, deren Bezeichnung eine Kombination des Präfix „int-“ und der Kardinalzahl des Vokals ist (vgl. Abb. 3.1 und Abb. 3.2). Die Attribut-Sets bestehen aus zwei Attributen mit den Namen x und y. In diesen sind die x- und y-Koordinaten der jeweiligen Laute gespeichert (z.B. im Attribut-Set int-301 die Werte x=-20 und y=0 für den Vokal i).


Listing 3.4: Das Vowels-Template
<!−− ###########################  TEMPLATE VOWELS  ############################## −−> 
<xsl:template name="Vowels"
  <!−− Auswahl aller nicht−leeren Vokal−Elemente zur weiteren Verarbeitung im Template −−> 
  <xsl:for−each select="/ipa/sound[@type=’vowel and class!=’emp’]"
    <!−− Erzeugung der Variablen setname’, Zusammensetzung aus dem Präfix int− und der Kardinalzahl  −−> 
    <xsl:variable name="setname" select="concat(’int−’,name/cardinal/text())" /
    <!−− Die Variable set sucht aus der Datei vowels.xsl das zum setname passende Attribut−Set aus  −−> 
    <xsl:variable name="set" select="document(’./vowels.xsl’)/ /xsl:attribute−set [@name = $setname]" /
 
    <circle xmlns="http://www.w3.org/2000/svg" class=’pos’><!−− erzeugt ein Kreiselement der Klasse pos −−> 
       <xsl:for−each select=" $set/xsl:attribute "><!−− für jedes Attribut−Set aus vowels.xsl werden: −−> 
         <xsl:attribute name="r">13</xsl:attribute>        <!−− der Radius des Kreis−Elements definiert −−> 
         <xsl:attribute name="c{@name}"<!−− die Attribut−Namen von x und y in cx und cy gewandelt −−> 
           <xsl:value−of select="." />   <!−− die Werte von x/y für die Kreis−Attribute cx/cy gewählt   −−> 
         </xsl:attribute
       </xsl:for−each
         <xsl:call−template name="Transcribe">    <!−− Aufruf des Transcribe−Templates im Kreis−Element −−> 
           <xsl:with−param name="name" select="./name" />           <!−− Weitergabe des name−Parameters −−> 
         </xsl:call−template
     <!−− durch den internen Aufruf von Add_metadata werden die Kreis−Elemente mit Metadaten versehen   −−> 
     <!−− die aktiven (klickbaren) Kreis−Elemente sind in Abb.2 durch orangene Umrandung dargestellt    −−> 
     </circle
 
     <text xmlns="http://www.w3.org/2000/svg"
       <xsl:for−each select=" $set/xsl:attribute "<!−− erneute Auswahl der Attribut−Sets −−> 
         <xsl:attribute name="pointer−events">none</xsl:attribute>       <!−− deaktiviert Maus−Events −−> 
           <xsl:attribute name="{@name}">          <!−− <text>−Elemente sind damit quasi durchsichtig −−> 
             <xsl:choose>                          <!−−  −−> 
               <xsl:when test="@name = y">       <!−− Auswahl des Attributs mit dem Namen y           −−> 
                 <xsl:value−of select=". + 4" /><!−− Manipulation des y−Werts (horizontaler Ausgleich)  −−> 
               </xsl:when
               <xsl:otherwise>     <!−− wenn @name (Name des Attributs) nicht y ist, dann ist @name = x −−> 
                 <xsl:value−of select="." /><!−− Auswahl des unveränderten x−Werts aus dem Attribut−Set −−> 
               </xsl:otherwise
             </xsl:choose
           </xsl:attribute
       </xsl:for−each
        <xsl:call−template name="Plot_Symbol">                    <!−− Aufruf des Templates Plot_Symbol −−> 
          <xsl:with−param name="name" select="./name"></xsl:with−param><!−− Ausgabe der Unicode−Zeichen −−> 
        </xsl:call−template
     </text
 
   </xsl:for−each
</xsl:template>

PIC

Abb. 3.1: IDs und Koordinaten der Vokale im Vokaltrapez (Notation der Koordinaten: x : y)


PIC

Abb. 3.2: IDs und Circle-Elemente der Grafik (IDs entsprechen der Kardinalzahl der Vokale)

1Das Koordinatensystem hat in SVG-Grafiken seinen Ursprung (0, 0) am linken oberen Rand der Grafik und spannt sich nach unten hin auf. Die Koordinaten der Vokale im Vokaltrapez sind in Abbildung 3.1 dargestellt.