Announcement

Collapse
No announcement yet.

Xpath-Regel

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Xpath-Regel

    Liebe Kolleginnen und Kollegen,

    ich hoffe, ihr könnt mir helfen: Ich versuche - leider vergebens - eine gültige Xpath-Regel aus folgendem XML-Dokument zu erstellen. Es handelt sich hierbei um eine exportierte Terminologiedatenbank namens MultiTerm:
    <mtf>
    <conceptGrp>
    <concept>1</concept>
    <transacGrp>
    <transac type="origination">michael</transac>
    <date>2010-12-22T11:45:20</date>
    </transacGrp>
    <transacGrp>
    <transac type="modification">Michael</transac>
    <date>2012-08-08T11:40:21</date>
    </transacGrp>
    <languageGrp>
    <language type="Deutsch" lang="DE"></language>
    <termGrp>
    <term>Abbildung</term>
    <transacGrp>
    <transac type="origination">michael</transac>
    <date>2010-12-22T11:45:20</date>
    </transacGrp>
    <transacGrp>
    <transac type="modification">michael</transac>
    <date>2010-12-22T11:45:20</date>
    </transacGrp>
    </termGrp>
    </languageGrp>
    <languageGrp>
    <language type="Polnisch" lang="PL"></language>
    <termGrp>
    <term>ilustracja</term>
    <transacGrp>
    <transac type="origination">michael</transac>
    <date>2011-02-03T16:00:50</date>
    </transacGrp>
    <transacGrp>
    <transac type="modification">michael</transac>
    <date>2011-02-03T16:00:50</date>
    </transacGrp>
    </termGrp>
    </languageGrp>

    Ich versuche durch Transformation alle Terms, die zum Attribut "Deutsch" des Elements "language" gehören in eine Spalte zu schreiben, daneben dann alle Terms anderer Sprachen. Wie kann ich nun aber die Terms der termGrp vom Typ "Deutsch" aus der languageGrp anzusprechen??? Das übersteigt leider meine - zugegeben geringen - Fähigkeiten.

    Ich würde mich riesig freuen, wenn mich da jemand unterstützen könnte.

    Danke vielmals bereits im Voraus.

  • #2
    Ansatz: //languageGrp[language[@type='Deutsch']]/termGrp/term --> Abbildung

    Comment


    • #3
      Wow, tausend Dank und bitte entschuldige mein verspätetetes Dankeschön. Gönnte mir ein paar freie Tage

      Comment


      • #4
        Jetzt habe ich weiter versucht, und stehe vor folgenden Problem:


        Habe aus der bereits zitierten XML ein Stylesheet zur Umwandlung in HTML erstellt. Einträge werden in Spalten dargestellt, wobei jeder "term" aus der "termgroup" einer "languagegroup" auf einer separaten Zeile steht. In weiteren Spalten werden zusätzliche Informationen zu den einzelnen Terms dargestellt (description, author, ...). So weit so gut und kein Problem.

        Jede languagegroup kann nun mehrere Terms enthalten (Synonyme). Und genau hier beginne ich zu stolpern. Für jede Termgroup soll eine neue Zeile geschrieben werden und der Term wandert in eine Tabellenzelle . Kein Problem. Dabei wird immer der 1. Term eines Eintrags in eine neue Zeile geschrieben. Über eine choose-Funktion wähle ich die Kondition, dass für alle *Termgroups einer languagegroup (zum Beispiel Deutsch) mit der Position größer als 1 vorhanden, eine neue Zeile geschrieben werden soll. Denn ein Term kann immer auch Synonyme beinhalten.*

        Das Problem ist, dass wenn zum Beispiel ein deutscher Term 3 Synonyme hat und der englische Term 2, 3 Zeilen geschrieben werden, die alle 3 deutschen Synonyme untereinander auflistet, dann aber nicht beide englischen Synonyme.

        Es kann nämlich auch umgekehrt sein, dass es im Deutschen kein Synonym gibt, im Englischen aber wohl.

        Über eine choose-Funktion gelingt es mir folgende Szenarien abzuarbeiten:

        Deutsch hat 1 Term (also kein Synonym) und Englisch mehrere Terms
        Oder
        Englisch hat*1 Term (also kein Synonym) und Deutsch mehrere Terms

        Was nicht funktioniert:
        Sowohl Deutsch als auch Englisch haben Synonyme. Hier werden entweder nur die deutsch/englischen Synonyme in eine neue Zeile geschrieben (bei der jeweils anderen Sprache wird nur ein Term geschrieben), oder alle Terms jeder Sprache stehen in einer gemeinsamen Spalte

        Das Resultat müsste so aussehen, wobei neue Zeilen nur dann eingefügt werden sollen, wenn eine der Sprachen Synonyme hat. In der ersten Spalte steht jeweils die Concept-id für eine unteren Zuordnung.

        1. Dt. Term, En. Term
        2. Dt. Term, En. Term
        * * Dt. Synonym
        3. Dt. Term, En. Term
        * * * * * * * * *En. Synonym

        ...

        Irgendeine Idee? *Das wäre der Wahnsinn-) Micht treibt das in die Verzweiflung, aber vielleicht sehe ich auch den Wald vor lauter Bäumen nicht.
        Herzlichen Dank schon Mal für eure Mühen.
        Michael



        Hier nochmals, vielleicht klarer ausgedrückt:

        Schreibe für jede termGrp aus der languageGrp[langue[@lang='DE']] den Wert von term in eine neue Zeile. In Spalte 2 steht dann der Wert von term aus der languageGrp DE, in Spalte 3 der Wert von term aus der languageGrp EN (zum Beispiel).

        Dann prüfe Folgendes:

        Wenn für eine termGrp aus der languageGrp[langue[@lang='DE']] ein Synonym vorhanden ist (über Position größer als 1? oder als sibling?), füge eine neue Zeile ein jund schreibe den Wert von term wieder in Zelle 2.
        Prüfe gleichzeitig, ob für eine termGrp aus der languageGrp[langue[@lang='EN']] ein Synonym vorhanden ist, und wenn ja, füge den Wert von term in Zelle 3 ein.
        Die selbe Prüfung solle auch umgekehrt funktionieren, d.h. wenn für eine termGrp aus der languageGrp[langue[@lang='DE']] KEIN Synonym vorhanden ist, führe den test für die termGrp aus der languageGrp[langue[@lang='EN']] durch.

        Und Synonyme können in unbeschränkter Zahl vorhanden sein.

        Ich stolpere jedes Mal über die neue Zeilen, denn alle Synonyme aus dem Deutschen in eine neue Zeile zu sxhreiben ist kein Problem. Wenn aber BEIDE Sprachen Synonyme haben, gibt es Probleme, denn dann habe ich bereits eine neue Zeile und komme nicht mehr zurück. In diesem nicht gewünschten Fall sieht das Ergebnis so aus:

        DE EN
        1 SYNDE
        2 SYNDE
        3 SYNEN
        4 SYNEN
        5 SYNEN
        6 NEUDE


        Die Einträge sollten jeweils nebeneinander ohne Lücken stehen.
        Zuletzt editiert von michael.widemann; 28.08.2012, 09:21. Reason: Verdeutlichung

        Comment

        Working...
        X