nam: Seltsames Verhalten von IE bei getAttribute('xml:lang')

Hallo

Der IE nervt wieder einmal:
Ich versuche mit Javascript die xml:lang-Attribute auszulesen. Funktioniert bei allen Elementen bis auf das <table>-Element ganz gut.
Beim <table> versagt das Script und der IE meldet einen Fehler 'Invalid Argument'.

Hier der Code (stark reduziert):

  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
 <head>  
  <meta http-equiv="content-type" content="text/html; charset=utf8">  
  <title>Test</title>  
  <script type="text/javascript">  
  window.onload=function() {  
   var el=document.getElementsByTagName('table');  
   for(var i=0; i<el.length; i++) {  
    if(!!el[i].getAttribute('xml:lang')) {  
     alert(el[i].getAttribute('xml:lang'));  
    }  
   }  
  };  
  </script>  
 </head>  
 <body>  
  <table>  
   <thead>  
    <tr><th>Browser</th><th>Version</th><th>Bemerkung(en)</th></tr>  
   </thead>  
   <tbody>  
    <tr><td>IE</td><td>&gt;=6</td><td>Fehldarstellungen</td></tr>  
   </tbody>  
  </table>  
 </body>  
</html>  

Ist das mein Fehler? Wenn ja, wie kann ich das besser machen?

Danke und Gruss,
nam

  1. @@nam:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    Ein 'xml:lang'-Attribut hat in HTML 4.01 nichts zu suchen. Verwende 'lang'. [http://de.selfhtml.org/html/xhtml/unterschiede.htm#lang]

    Warum schickst du IEs in den Quirks-Modus?

    <meta http-equiv="content-type" content="text/html; charset=utf8">

    Die Codierung heißt "UTF-8", mit Bindestrich anzugeben (außer in VRML).

    Live long and prosper,
    Gunnar

    --
    „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
    1. Ein 'xml:lang'-Attribut hat in HTML 4.01 nichts zu suchen.

      Ich weiss, bei allen anderen Elementen gehts aber (nur bei <table> nicht) und wenn ich das Dokument als XHTML-formatiere, ändert das auch nichts.

      Warum schickst du IEs in den Quirks-Modus?

      Keine Ahnung. Wo mache ich das? Woran erkannt man das?

      Die Codierung heißt "UTF-8", mit Bindestrich anzugeben (außer in VRML).

      Oh, Tippfehler.
      Ändert aber auch nichts :-(

      1. @@nam:

        Warum schickst du IEs in den Quirks-Modus?
        Keine Ahnung. Wo mache ich das? Woran erkannt man das?

        http://forum.de.selfhtml.org/archiv/2007/10/t161006/#m1047394

        Live long and prosper,
        Gunnar

        --
        „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
      2. Hallo,

        Keine Ahnung. Wo mache ich das? Woran erkannt man das?

        Ich empfehle diese Lektüre: Der DOCTYPE-Switch und seine Auswirkungen.

        Gruß

        1. So, ich habe

          http://forum.de.selfhtml.org/archiv/2007/10/t161006/#m1047394

          und

          Der DOCTYPE-Switch und seine Auswirkungen.

          studiert; haaresträubend, aber interessant, da mal den Durchblick (na ja - fast) zu haben.
          Danke.

          Bei meinem Problem hat mir das jedoch nicht weitergeholfen. Dieses bleibt konsistent über alle Doctypes und Modes, sowohl im IE6 als auch 7.

          1. Hallo,

            Bei meinem Problem hat mir das jedoch nicht weitergeholfen. Dieses bleibt konsistent über alle Doctypes und Modes, sowohl im IE6 als auch 7.

            Schade, dennoch der Hinweis, dass du den Quirksmode vermeiden und wenn möglich den Full Standards Mode verwenden solltest.

            Im IE 8 wird dir vermutlich nur noch der standardkonformste Modus übrig bleiben, von daher solltest du dich dran gewöhnen.

            Gruß;

      3. @@nam:

        Ein 'xml:lang'-Attribut hat in HTML 4.01 nichts zu suchen.
        Ich weiss,

        Warum nutzst du es dann? Auch bei HTML-kompatiblen XHTML [XHTML10 §C] sollte das 'lang'-Attribut vorhanden sein [XHTML10 §C.7] ...

        bei allen anderen Elementen gehts aber (nur bei <table> nicht)

        ... und mit 'lang'-Attribut geht’s auch bei 'table'.

        und wenn ich das Dokument als XHTML-formatiere, ändert das auch nichts.

        Das 'xml:lang'-Attribut wird auch nur beachtet, wenn XHTML als XML ('application/xhtml+xml') verarbeitet wird; das kann der IE sowieso nicht.

        Ich weiß jetzt nicht, worüber ich mich mehr wundern sollte: dass der IE bei anderen Elementen die Fehlermeldung nicht bringt oder dass er sie bei 'table' bringt. Das unterschiedliche Verhalten ist in der Tat verwunderlich. Andererseits ist bei JavaScript angewandt auf invalides HTML* durchaus verwunderliches Verhalten zu erwarten.

        Live long and prosper,
        Gunnar

        * auch XHTML als 'text/html' wird von Tagsoup-Parsern wie HTML behandelt

        --
        „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
        1. @@Gunnar Bittersmann:

          Das unterschiedliche Verhalten ist in der Tat verwunderlich.

          Probleme des IE mit 'setAttribute()' sind ja bekannt; möglich, dass er auch mit 'getAttribute()' Probleme hat.

          Man braucht die Methode aber gar nicht, der Wert eines Attributs (sofern vorhanden) ist ja als Eigenschaft des Elementobjekts verfügbar; das 'lang'-Attribut als 'el[i].lang':

          if(el[i].lang)  
          {  
            alert(el[i].lang);  
          }
          

          Das in http://de.selfhtml.org/javascript/objekte/forms.htm zu 'document.forms' Gesagte gilt auch für andere Objekte und ihre Eigenschaften: eine andere Schreibweise für 'el[i].lang' ist 'el[i]["lang"]'.

          Diese wäre auch für das 'xml:lang'-Attribut zu gebrauchen; aber die Unsinnigkeit von dessen Verwendung in JavaScript hatte ich ja schon erwähnt.

          Live long and prosper,
          Gunnar

          --
          „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
          1. Hi Gunnar

            Man braucht die Methode aber gar nicht, der Wert eines Attributs (sofern vorhanden) ist ja als Eigenschaft des Elementobjekts verfügbar; das 'lang'-Attribut als 'el[i].lang':

            if(el[i].lang)

            {
              alert(el[i].lang);
            }

            
            >   
            > Das in <http://de.selfhtml.org/javascript/objekte/forms.htm> zu '`document.forms`{:.language-javascript}' Gesagte gilt auch für andere Objekte und ihre Eigenschaften: eine andere Schreibweise für '`el[i].lang`{:.language-javascript}' ist '`el[i]["lang"]`{:.language-javascript}'.  
              
            Oh!  
            Ich sehe einen Silberstreife am Horizont.  
              
            Vielleicht schreiben die Browser den Wert von xml:lang ja auch in element.lang...?  
            Mal sehen (off zum coden);-)  
              
            Danke und Gruss,  
            Mathias
            
            1. @@nam:

              Vielleicht schreiben die Browser den Wert von xml:lang ja auch in element.lang...?

              Nö. Warum sollten sie?

              Live long and prosper,
              Gunnar

              --
              „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
          2. @@Gunnar Bittersmann:

            eine andere Schreibweise für 'el[i].lang' ist 'el[i]["lang"]'.
            Diese wäre auch für das 'xml:lang'-Attribut zu gebrauchen

            Nicht im Firefox. (Grmpf, hätte ich erstmal testen sollen.)

            Da kommste wohl um eine doppelte Abfage nicht drumrum:
            var lang = element.getAttribute("xml:lang") || element["xml:lang"];

            Mit der Abfrage nach 'lang'-Attribut kombiniert ('xml:lang' hat Vorrang):
            var lang = element.getAttribute("xml:lang") || element["xml:lang"] || element.lang;

            Das brauchst du aber nur für XHTML-Dokumente, für HTML reicht
            var lang = element.lang;

            Die Unterscheidung, ob es XHTML oder HTML ist, kannste anhand des in XHTML vorhandenen 'xmlns'-Attributs des 'html'-Elements vornehmen und, damit du sie nur einmal tätigen musst, deren Ergebnis in einer Variablen speichern:
            var isXHTML = !!document.body.parentNode.getAttribute("xmlns");

            Genaugenommen müsstest du aber auch prüfen, ob XHTML als XML verarbeitet wird, da bei der Verarbeitung als HTML das 'xml:lang'-Attribut keinerlei Wirkung hat. Das ist möglich im XHTML-Dokument:
            <script type="text/javascript">[code lang=javascript]var isXML = ("&auml;" == "ä");<script>[/code]

            Beides zusammen:
            var isXHTMLplusXML = isXHTML && isXML;

            Später damit dann
            var lang = isXHTMLplusXML ? element.getAttribute("xml:lang") || element["xml:lang"] || element.lang : element.lang;

            Live long and prosper,
            Gunnar

            --
            „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
            1. Hi Gunnar
              Danke für deine Mühe, genau das

              var lang = element.getAttribute("xml:lang") || element["xml:lang"];

              verursacht im IE 6/7 einen Fehler, wenn element ein <table> ist.
              Alles andere ist für mich _kein_ Problem!

              1. @@nam:

                Der IE scheint wirklich beim 'table'-Element kein 'xml:lang'-Attribut haben zu wollen.

                Da bleibt wohl nur, per String-Verarbeitung alle 'xml:lang'-Attribute umzubenennen, bspw. in "xml_lang":

                document.body.innerHTML = document.body.innerHTML.replace(/xml:lang/g, "xml_lang");

                Da du damit nur den Inhalt des 'body'-Elements erreichst, für dessen Elementobjekt die Eigenschaft 'xml_lang' setzen:

                document.body.xml_lang = document.body.getAttribute("xml:lang") || document.body["xml:lang"];

                ('getAttribute()' wäre für Firefox; aber dazu später.)

                Und dasselbe fürs Wurzelelement 'html':

                document.body.parentNode.xml_lang = document.body.parentNode.getAttribute("xml:lang") || document.body.parentNode["xml:lang"];

                Dann funktioniert auch

                ~~~javascript var table = document.getElementsByTagName("table")[0];
                  var lang = table.xml_lang);
                  alert(lang);

                  
                angewandt auf  
                  
                  `<table xml:lang="zxx"><tr><td>Lorem ipsum</td></tr></table>`{:.language-html}  
                  
                bzw.  
                  
                  `<table><tr><td>Lorem ipsum</td></tr></table>`{:.language-html}  
                  
                im IE.  
                  
                  
                Aber nicht anderen Browsern wie Firefox, die für ein ungültiges 'xml\_lang'-Attribut keine entsprechende Eigenschaft für das Elementobjekt anlegen.  
                  
                Also den ganzen Ramsch per conditional compiling nur für den IE machen (dann wird 'getAttribute()' nicht mer benötigt):  
                  
                  ~~~javascript
                /*@cc_on  
                  @if (@_jscript)  
                    window.isIE = true;  
                    document.body.innerHTML = document.body.innerHTML.replace(/xml:lang/g, "xml_lang");  
                    document.body.xml_lang = document.body["xml:lang"];  
                    document.body.parentNode.xml_lang = document.body.parentNode["xml:lang"];  
                  @else @*/  
                    window.isIE = false;  
                  /*@end @*/
                

                Und je nach Browser 'xml_lang' bzw. 'xml:lang' abfragen:

                ~~~javascript var table = document.getElementsByTagName("table")[0];
                  var lang = (window.isIE ? table.xml_lang : table.getAttribute("xml:lang"));
                  alert(lang);

                  
                Live long and prosper,  
                Gunnar
                
                -- 
                „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
                
                1. Hi Gunnar

                  Habe diese Lösung von dir eben erst gesehen. Ist zwar umständlich, funktioniert aber.
                  Werde mir mal überlegen müssen, ob ich das so einbauen will...

                  Viele Dank für deine Mühen!

                  Mathias

        2. Hi Gunnar

          Natürlich verwende ich xml:lang und lang bei XHTML, bzw. nur lang bei HTML.
          Das tut hier aber nichts zur Sache. Das Script versucht für die jeweiligen Elemente in mehrsprachigen Dokumenten die Sprache zu bestimmen. Hat ein Element kein eigenes Sprachattribut, klettert das Script im Baum nach unten (Richtung root), bis es eines findet (bei Tabellenzellen geht das anders, aber Detail).
          Um auch xhtml zu unterstützen muss ich auch xml:lang abfragen, das ggf. lang überschreibt.
          Bei table scheitert es dann im IE (wie gesagt, alle anderen Browser machen da keine Zicken).

          Weil die ganze Prozedur ziemlich zeitintensiv ist, soll das ganze so klein und schnell sein wie möglich. Komplizierte Browserweichen (sollten ja sowieso nicht sein) und eine IE-Spezialbehandlung liegen also nicht drin.

          Gruss,
          nam

          1. @@nam:

            Das Script versucht für die jeweiligen Elemente in mehrsprachigen Dokumenten die Sprache zu bestimmen.

            Mal neugierig gefragt: Wozu brauchst du das?

            Um auch xhtml zu unterstützen muss ich auch xml:lang abfragen, das ggf. lang überschreibt.

            Hm, unterschiedliche Werte der beiden Attribute wäre wohl ein Verstoß gegen die Kompatibilitätsrichtlinien [XHTML10 §C], sollten also eigentlich nicht vorkommen. (Die Verantwortung dafür liegt beim Autor des XHTML-Quelltextes.)

            Live long and prosper,
            Gunnar

            --
            „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
            1. Mal neugierig gefragt: Wozu brauchst du das?

              Silbentrennung: http://www.mnn.ch/hyph/silbentrennung1.html, http://www.mnn.ch/hyph/silbentrennung1.html
              oder neu:
              http://code.google.com/p/hyphenator/

              Dasselbe Problem hatte auch http://aktuell.de.selfhtml.org/artikel/javascript/typographie/, hab ich eben gesehen.

              Gruss,
              nam

              1. @@nam:

                Willst du wissen, was ich von solcher automatischer Silbentrennung für die deutsche Sprache halte?

                Kurze Antwort: Gar nichts.

                Lange Antwort: Jedenfalls nicht mit (ausschließlich) diesem Algorithmus. Der berücksichtigt nicht, dass es im Deutschen viele zusammengesetzte Wörter gibt, die auch zusammengeschrieben werden (außer von Deppen ;-)).

                Zusammengesetzte Wörter sollten nur an den Stellen getrennt werden, wo zwei Teilwörter zusammentreffen; nicht jedoch Silbentrennung innerhalb eines Teilwortes. Also nur „Haus-esel“; nicht jedoch „Hause-sel“.*

                Ein Algorithmus, der das nicht beachtet, ist zumindest für die deutsche Sprache recht unbrauchbar.

                Live long and prosper,
                Gunnar

                * Die Trennung von „E-sel“ könnte man sicher verbieten, indem man fordert, dass bei Trennungen jeder Teil mindestens 2 Buchstaben lang sein muss. Das Problem des „Hause-sels“ bekommt man so nicht in den Griff; dazu bedarf es dann wohl doch eines Wörterbuchs (was diser Algorithmus ja gerade vermeiden will).

                --
                „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
                1. Hi Gunnar

                  Willst du wissen, was ich von solcher automatischer Silbentrennung für die deutsche Sprache halte?
                  Kurze Antwort: Gar nichts.

                  Dann nutze sie nicht oder liefere etwas besseres!

                  Lange Antwort: Jedenfalls nicht mit (ausschließlich) diesem Algorithmus. Der berücksichtigt nicht, dass es im Deutschen viele zusammengesetzte Wörter gibt, die auch zusammengeschrieben werden. […]

                  Er trennt sehr viele Komposita besser als der wortlistenbasierte Algorithmus von Word (was kein Qualitätszeichen ist, ich weiss, aber wohl der am weitesten verbreitete). Linguistische oder phonetische Algorithmen haben es bis jetzt auch nicht in ein Endprodukt geschafft, warum wohl?

                  Zusammengesetzte Wörter sollten nur an den Stellen getrennt werden, wo zwei Teilwörter zusammentreffen; nicht jedoch Silbentrennung innerhalb eines Teilwortes. Also nur „Haus-esel“; nicht jedoch „Hause-sel“.

                  Dies «Wortfuge» ist als Trennstelle zu bevorzugen, das stimmt. Es sind aber auch alle anderen «Nebentrennstellen» erlaubt. Zum Beispiel: Sil-ben=tren-nung.
                  Esel darf nach aktueller Rechtschreibung nicht getrennt werden.

                  Es gibt einen ähnlichen Algorithmus, der gute und schlechte Trennstellen unterscheidet http://www.ads.tuwien.ac.at/research/SiSiSi/; ohne dazu passende Trennmuster nützt er mir allerdings nichts (ausserdem wir er vom Entwickler kommerziell genutzt und ist nicht frei).

                  Ein Algorithmus, der das nicht beachtet, ist zumindest für die deutsche Sprache recht unbrauchbar.

                  Der Algorithmus beachtete das schon, wenn denn ein ensprechendes Trennmuster vorhanden wäre. Die verwendeten Trennmuster basieren auf einer Liste von 380599 deutschen Wörtern bis zur Häufigkeitsklasse 18. Bis dahin wurden die Wörter bereits getrennt (http://groups.google.de/group/trennmuster-opensource). Dein Hausesel kommt aber erst in der Häufigkeitsklasse 22 vor, das heisst, er ist 2^4=16 mal seltener als ein Wort der Klasse 18. Bis auch für deinen Hausesel ein Trennmuster vorhanden ist, müssen noch rund 890'000 Wörter getrennt werden und dann die Muster neu berechnet werden.

                  Dein aufgeführtes Beispiel ist also kein echtes Problem für diesen Algorithmus.
                  (Wie lange hast du übrigens suchen müssen, bis du ein Wort gefunden hast, das falsch getrennt wird?)

                  Was ein echtes Problem darstellt, sind zweideutige Komposita. Das bekannteste ist Staubecken (Stau=be-cken oder Staub-ecken); wie hier getrennt werden soll, lässt sich nur aus dem Kontext bestimmen und da scheitert die heutige Informatik noch immer.

                  Um eine wiklich gute und fehlerfreie Silbentrennung zu erhalten, kommt man ohnehin nicht um eine manuelle (Nach-)Bearbeitung herum.

                  Gruss,
                  Mathias

                  1. @@nam:

                    Also nur „Haus-esel“; nicht jedoch „Hause-sel“.
                    Dies «Wortfuge» ist als Trennstelle zu bevorzugen, das stimmt. Es sind aber auch alle anderen «Nebentrennstellen» erlaubt. Zum Beispiel: Sil-ben=tren-nung.

                    Erlaubt ja; aber IMHO nicht sinnvoll, denn das erschwert die Lesbarkeit.

                    Esel darf nach aktueller Rechtschreibung nicht getrennt werden.

                    Wurde die Trennmöglichkeit nicht mit der neuen Rechtschreibung eingeführt? Und wieder: erlaubt heißt nicht sinnvoll.

                    Um eine wiklich gute und fehlerfreie Silbentrennung zu erhalten, kommt man ohnehin nicht um eine manuelle (Nach-)Bearbeitung herum.

                    ACK. Nur wird diese oft nicht gemacht. Man verlässt sich auf Maschinen und verkauft dem Leser deren Ergebnis als richtiges. Das lehne ich ab.

                    Live long and prosper,
                    Gunnar

                    --
                    „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
                    1. Esel darf nach aktueller Rechtschreibung nicht getrennt werden.

                      Wurde die Trennmöglichkeit nicht mit der neuen Rechtschreibung eingeführt?[…]

                      In der RS von 1996 war das erlaubt. Seit März 2006 gilt
                      § 107 E1: «Einzelen Vokalbuchstaben am Wortanfang oder -ende werden nicht abgetrennt, auch nicht bei Komposita[…]»

                      1. @@nam:

                        In der RS von 1996 war das [die Trennung von bspw. „E-sel“] erlaubt.

                        Das habe ich anders in Erinnerung.

                        (Wie lange hast du übrigens suchen müssen, bis du ein Wort gefunden hast, das falsch getrennt wird?)

                        Das ging ganz fix.

                        Wie trennt dein Algorithmus „Mustopf“?

                        Live long and prosper,
                        Gunnar

                        --
                        „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
                        1. Hi Gunnar

                          In der RS von 1996 war das [die Trennung von bspw. „E-sel“] erlaubt.
                          Das habe ich anders in Erinnerung.

                          Leider habe ich kein Nachschlagewerk aus jener Zeit. In meinem aktuellen Duden steht aber unter «Die wichtigsten Regeländerungen seit 1996 im Überblick»:
                          «Einzelvokale am Wortanfang oder -ende werden – auch in Zusammensetzungen – nicht mehr abgetrennt.»

                          Daher ging davon aus das E-sel, sowie auch A-bend getrennt werden durften.

                          Wie trennt dein Algorithmus „Mustopf“?

                          Korrekt.
                          Hier eine Liste mit kritische Wörtern.

                          Gruss,
                          Mathias

                          1. @@nam:

                            In der RS von 1996 war das [die Trennung von bspw. „E-sel“] erlaubt.
                            Das habe ich anders in Erinnerung.
                            Leider habe ich kein Nachschlagewerk aus jener Zeit.

                            Ich hab eins:
                            Horst Klien (Hrsg.): Der Großen Duden. Wörtebuch und Leitfaden der deutschen Rechtschreibung. VEB Bibliographisches Institut, Leipzig 1968.

                            Im Leitfaden unter Kennzahl 79:
                            „Ein einzelner Vokal wird nicht abgetrennt. Zweisilbige Wörter, von denen eine Silbe nur aus einem Vokal besteht, sind deshalb _untrennbar_. Vgl. auch K 80.
                            Beispiele: Abend, Esel, Oder, Ufer, Uhu, Taue; Echo, Idee

                            Auch bei mehrsilbigen Wörtern und bei Präfixen wirkt sich diese Regel aus.
                            Beispiele: Amei-se, Apri-ko-se (K 86); ano-mal, Evo-lu-tion

                            Nur in Notentexten ist die Abtrennung eines einzelnen Vokals manchmal unvermeidlich.“

                            Und unter K 70 steht explizit:
                            „Bei der Trennung zusammengesetzter Wörter vermeide man sinnentstellende Trennungen. Sie stören den Leseablauf.
                            Beispiele: Spar-gelder (nicht: Spargel-der); Spiel-eröffnung od. Spieleröff-nung (nicht: Spieler-öffnung); Text-illustration od. Textillu-stration (nicht: Textil-lustration); be-erben (nicht: beer-ben)“

                            Ein Algorithmus sollte solche Trennungen unbedingt vermeiden, sonst leidet seine Brauchbarkeit erheblich.

                            Live long and prosper,
                            Gunnar

                            --
                            „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
                            1. Hi Gunnar

                              Ich hab eins:
                              Horst Klien (Hrsg.): Der Großen Duden. Wörtebuch und Leitfaden der deutschen Rechtschreibung. VEB Bibliographisches Institut, Leipzig 1968.

                              Gesucht ist eins für die Zeit von 1996 bis 2004/2006.
                              In dieser Zeit war es offenbar und unsinnigerweise erlaubt einen Vokalbuchstaben abzutrennen.
                              Und dann ist jeweils zu unterscheiden zwischen der amtlichen Regelung und der Auslegung derselben durch die Wörterbuchsredaktion!

                              Gruss,
                              Mathias

                          2. Hi,

                            Hier eine Liste mit kritische Wörtern.

                            Die "Ve-rand-ab-rüs-tung" gefaellt mir besonders gut :-)

                            Ansonsten scheint's doch auch in den meisten dieser Faelle recht ordentlich zu funktionieren - nur die "trin-k-nah-rung" ist wohl ein Totalausfall.

                            Auf jeden Fall ein sehr interessantes Projekt - ich werd's weiter verfolgen, und ggf. auch mal fuer den Einsatz in einem englischensprachigen Weblog testen. In der englischen Sprache duerfte die Erfolgsquote ja vermutlich noch besser sein, auf Grund deren simpleren Struktur.

                            MfG ChrisB

                2. Hi,

                  Lange Antwort: Jedenfalls nicht mit (ausschließlich) diesem Algorithmus. Der berücksichtigt nicht, dass es im Deutschen viele zusammengesetzte Wörter gibt, die auch zusammengeschrieben werden (außer von Deppen ;-)).

                  Zusammengesetzte Wörter sollten nur an den Stellen getrennt werden, wo zwei Teilwörter zusammentreffen; nicht jedoch Silbentrennung innerhalb eines Teilwortes. Also nur „Haus-esel“; nicht jedoch „Hause-sel“.*

                  Automatisch zu erkennen, aus welchen Teilen das Wort zusammengesetzt ist, ist nicht immer möglich.
                  Ein Beispiel:
                  Gastraum
                  Träumt hier jemand von Blähungen? Im Gästezimmer?

                  cu,
                  Andreas

                  --
                  Warum nennt sich Andreas hier MudGuard?
                  O o ostern ...
                  Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                  1. Hi

                    Automatisch zu erkennen, aus welchen Teilen das Wort zusammengesetzt ist, ist nicht immer möglich.
                    Ein Beispiel:
                    Gastraum
                    Träumt hier jemand von Blähungen? Im Gästezimmer?

                    Das hab ich unter https://forum.selfhtml.org/?t=164464&m=1073102 ja bereits beschrieben. Allerdings könnte man bei diesem Beispiel IMHO von Gast-raum ausgehen, da die andere Bedeutung doch kaum je gebraucht wird.

                    Dasselbe gilt z.B. für «abtrennen». Erstens würde ein Abt-rennen gross geschrieben und zweitens gibt es AFAIK kein Abt-rennen.

                    Ausserdem sagt die amtliche Regelung 2006 in Abschnitt C.0.1: «Der Bindestrich bietet dem Schreibenden die Möglichkeit, anstelle der sonst bei Zusammensetzungen und Ableitungen üblichen Zusammenschreibung die einzelnen Bestandteile als solche zu kennzeichnen, sie gegeneinander abzusetzen und sie dadurch für den Lesenden hervorzuheben.»

                    Dies würde sich gerade bei doppeldeutigen Komposita anbieten, vor allem, wenn die seltenere Bedeutung gemeint ist.

                    Gruss,
                    Mathias

                    1. @@nam:

                      Ausserdem sagt die amtliche Regelung 2006 in Abschnitt C.0.1: «Der Bindestrich bietet dem Schreibenden die Möglichkeit, anstelle der sonst bei Zusammensetzungen und Ableitungen üblichen Zusammenschreibung die einzelnen Bestandteile als solche zu kennzeichnen, sie gegeneinander abzusetzen und sie dadurch für den Lesenden hervorzuheben.»

                      Dies würde sich gerade bei doppeldeutigen Komposita anbieten, vor allem, wenn die seltenere Bedeutung gemeint ist.

                      Damit schiebst du den Schwarzen Peter wieder dem Autor des Textes zu. Dann könnte er statt Bindestriche auch soft hyphens setzen und damit wäre ein Algorithmus zum Finden von möglichen Trennstellen hinfällig.

                      Wie ich dich verstanden habe, willst du das ja gerade nicht; sondern ein Autor soll den Text einer Webseite normal schreiben und sich um Silbentrennung keine Gedanken machen. Das erledigt dann ein unobtrusives JavaScript beim Aufruf der Webseite.

                      Du schriebst: „Um eine wiklich gute und fehlerfreie Silbentrennung zu erhalten, kommt man ohnehin nicht um eine manuelle (Nach-)Bearbeitung herum.“ [nam]

                      Eben! Da darf die Frage nach dem Sinn eines solchen JavaScripts, das eigens dafür gedacht ist, dass dessen Ergebnis NICHT manuell nachbearbeitet wird, doch gestellt werden.

                      Live long and prosper,
                      Gunnar

                      --
                      „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
                      1. Damit schiebst du den Schwarzen Peter wieder dem Autor des Textes zu. Dann könnte er statt Bindestriche auch soft hyphens setzen und damit wäre ein Algorithmus zum Finden von möglichen Trennstellen hinfällig.

                        Nein.
                        Bindestriche und Trennstriche sind nicht das selbe und lassen sich somit nicht einfach austauschen. Was ich oben sagen wollte, ist, dass es bei zweideutigen Komposita zu einer besseren Lesbarkeit beiträgt, wenn man statt «Die Staubecken sind voll.» «Die Stau-Becken sind voll.» oder «Die Staub-Ecken sind voll.» schreibt.
                        Mit der zweiten Schreibweise ist gleichzeitig auch das Problem der Fehltrennung umgangen.

                        Wie ich dich verstanden habe, willst du das ja gerade nicht; sondern ein Autor soll den Text einer Webseite normal schreiben und sich um Silbentrennung keine Gedanken machen. Das erledigt dann ein unobtrusives JavaScript beim Aufruf der Webseite.

                        Du schriebst: „Um eine wiklich gute und fehlerfreie Silbentrennung zu erhalten, kommt man ohnehin nicht um eine manuelle (Nach-)Bearbeitung herum.“ [nam]

                        Eben! Da darf die Frage nach dem Sinn eines solchen JavaScripts, das eigens dafür gedacht ist, dass dessen Ergebnis NICHT manuell nachbearbeitet wird, doch gestellt werden.

                        Hast du einmal mit LaTeX gearbeitet? Dieses Programm verwendet ja den selben Algorithmus. Auch da gibt es Fehler und ein Autor muss bei der Überarbeitung gewisse  Trennungen manuell vornehmen; entweder direkt im Text oder indem er eine externe Datei einbindet.
                        Die grosse Arbeit übernimmt aber der Algorithmus und die seltenen Spezialtrennungen sind vergleichsweise schnell korrigiert.

                        Mein Script und HTML funktionieren ganz ähnlich. Statt von Hand in allen Wörtern mittels &shy; sämtliche Trennstellen einzutragen (was niemand tun würde), übernimmt auch hier ein Programm die grosse Arbeit. Das Feinheiten liegen in der Hand des Autors. Wenn also das Script ein Wort falsch trennt kann der Autor dieses Wort manuell trennen (&shy; reinschreiben) – somit wird es vom Script übersprungen.
                        Die Möglichkeit eine eigene Ausnahmenliste zu erstellen, ist noch eine Pendenz.

                        So gesehen ist das Script IMHO nicht sinnlos.

                        Gruss,
                        Mathias

                        1. @@nam:

                          Mein Script und HTML funktionieren ganz ähnlich. Statt von Hand in allen Wörtern mittels &shy; sämtliche Trennstellen einzutragen (was niemand tun würde), übernimmt auch hier ein Programm die grosse Arbeit.

                          Was genau tut dein Script? Es schreibt bei allen möglichen Trennstellen '&shy;' in den Text?

                          Warum clientseitig? Warum läuft das nicht auf dem Server?

                          Und dort nicht bei jedem Seitenaufruf neu, sondern nur einmal – bis zur nächsten Änderung am Text? (Also generiertes Dokument mit den '&shy;' abspeichern; Änderung am Text in dem Dokument ohne die '&shy;' vornehmen; bei jedem Seitenaufruf ist der Timestamp der letzten Aktualisierung beider Dokumente zu vergleichen und ggfs. das mit den '&shy;' neu zu generieren.)

                          Das Feinheiten liegen in der Hand des Autors. Wenn also das Script ein Wort falsch trennt kann der Autor dieses Wort manuell trennen (&shy; reinschreiben)

                          Das ist ein Irrglaube. Woher sollte ein Autor wissen, dass ein Wort falsch getrennt wird? Was er bei sich sieht, ist nicht das, was jeder Nutzer der Webseite sieht. Er weiß nichts über Viewport- und Schriftgröße beim Nutzer, kann daher auch nicht wissen, wo bei diesem die Zeilen enden.

                          Das unterscheidet sich völlig von dem Arbeiten mit LaTeX: Dort siehst du nach  gewählter Formatierung auftretende problematische Trennungen und kannst korrigieren, denn das erzeugte Dokument wird ja genau so, wie es auf deinem Bildschirm aussieht, herausgegeben.

                          Live long and prosper,
                          Gunnar

                          --
                          „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
                          1. Was genau tut dein Script? Es schreibt bei allen möglichen Trennstellen '&shy;' in den Text?

                            Ja. Bei fast allen. Der Autor kann die Silbentrennung allerdings auf Elemente mit class="hyphenate" beschränken.

                            Warum clientseitig? Warum läuft das nicht auf dem Server?
                            Und dort nicht bei jedem Seitenaufruf neu, sondern nur einmal – bis zur nächsten Änderung am Text?

                            Weil ich das Script auch als Bookmarklet verwenden können will und ich der Meinung bin, dass Silbentrennung auf den Client gehört. Dazu ist die Serverlast kleiner, wenn es clientseitig läuft.

                            Das Feinheiten liegen in der Hand des Autors. Wenn also das Script ein Wort falsch trennt kann der Autor dieses Wort manuell trennen (&shy; reinschreiben)

                            Das ist ein Irrglaube. Woher sollte ein Autor wissen, dass ein Wort falsch getrennt wird? Was er bei sich sieht, ist nicht das, was jeder Nutzer der Webseite sieht. Er weiß nichts über Viewport- und Schriftgröße beim Nutzer, kann daher auch nicht wissen, wo bei diesem die Zeilen enden.

                            Ich stelle mir einen Workflow so vor:

                            • Text schreiben
                            • Hyphenator laufen lassen mit Hyphenator.setHyphenChar('|'); o.ä.
                            • Fehltrennungen suchen und ausbessern
                            • Online stellen mit Hyphenator.setHyphenChar('&shy;');

                            Oder einfach mit den kleinen Ungenauigkeiten leben.

                            Gruss,
                            Mathias

          2. @@nam:

            Hat ein Element kein eigenes Sprachattribut, klettert das Script im Baum nach unten (Richtung root), bis es eines findet […]
            Weil die ganze Prozedur ziemlich zeitintensiv ist, soll das ganze so klein und schnell sein wie möglich.

            Du erkennst den Widerspruch?

            In einem (X)HTML-Dokument ist wohl davon auszugehen, dass nur wenige Elemente ein 'lang'-/'xml:lang'-Attribut haben.

            Wenn du von jedem Element den Weg nach – wie du sagst – unten* zur Wurzel gehst, gehst du viele Pfade im Baum öfter als einmal, da du für mehrere Elemente, die kein 'lang'-/'xml:lang'-Attribut haben, das gemeinsame Vorfahrenelement suchst, das ein solches hat.

            Schneller bist du wohl, wenn du von der Wurzel hoch* zu den Blättern gehst und die Sprache jedes Elementknotens an seine Kinder vererbst, wenn diese selbst kein 'lang'-/'xml:lang'-Attribut haben; dann kommst du bei jedem Knoten nur einmal vorbei.

            Live long and prosper,
            Gunnar

            * Du hängst in Australien? Bei mir ist die Wurzel oben und die Blätter sind unten.

            --
            „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
            1. Schneller bist du wohl, wenn du von der Wurzel hoch* zu den Blättern gehst und die Sprache jedes Elementknotens an seine Kinder vererbst, wenn diese selbst kein 'lang'-/'xml:lang'-Attribut haben; dann kommst du bei jedem Knoten nur einmal vorbei.

              Äh ja, so gehts eigentlich. Wenn das Element kein lang/xml:lang hat, dann erbt es vom Elter

              * Du hängst in Australien? Bei mir ist die Wurzel oben und die Blätter sind unten.

              Ein Baum, steht auf dem Boden, die Wurzeln in der Erde (unten), die Blätter in der Luft (oben), oder? Umgekehrt wäre es bei einer Vererbungstafel, wo der Ursprung oben steht.
              Analog auch Stammbaum und Stammtafel (siehe Müllhalde des Wissens).

              Gruss,
              Mathias

              1. Hi,

                * Du hängst in Australien? Bei mir ist die Wurzel oben und die Blätter sind unten.
                Ein Baum, steht auf dem Boden, die Wurzeln in der Erde (unten), die Blätter in der Luft (oben), oder?

                Fuer Informatiker hat in aller Regel ein Baum die Wurzel oben, und die Aeste und Blaetter haengen (da-)runter - muss wohl was damit zu tun haben, wie fuersorglich der gemeine Nerd mit seinen Zimmerpflanzen umgeht.

                MfG ChrisB