Announcement

Collapse
No announcement yet.

Vergleich von mehreren Elementinhalten

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

  • Vergleich von mehreren Elementinhalten

    Hallo, ich habe folgendes Problem: Ich habe zwei Wörterbücher und möchte gern aus dem einen diejenigen Einträge herausfiltern, die zwar als Stichwort schon vorhanden sind, aber eine Übersetzung beinhalten, die im anderen Wörterbuch nicht vorkommt.
    Folgendes habe ich bereits versucht:

    Code:
    for $e in doc('wb_1.xml')/wb/eintrag, $f in doc('wb_2.xml')/wb/eintrag,
    where $e/stichw eq $f/stichw and some $tra_1 in $e//translat ne every $tra_2 in $f//translat
    return $e
    Die beiden XML-Dokumente = Wörterbücher sind folgendermaßen aufgebaut:
    Code:
    <wb>
    <eintrag>
    <stichw>Wort</stichw>
    <translat>word</translat>
    <translat>...
    </eintrag>
    ...
    </wb>
    Ich weiß nicht, ob man so etwas mit XQuery überhaupt hinbekommt oder ob man da mit Python o.ä. ranmuss. Vielen Dank schonmal für Eure Hilfe!!!!!!

  • #2
    Versuch's mal mit
    Code:
    let $w1 := doc('wb1.xml')
    let $w2 := doc('wb2.xml')
    for $e in $w1/wb/eintrag
    where $e/stichw = $w2/wb/eintrag[not(translat = $e/translat)]/stichw
    return $e
    aber ich zumindest tue mich schwer, Anfragen zu schreiben, ohne Beispieldaten (Eingabe und gewünschte Ausgabe) zu haben.

    Comment


    • #3
      Super, ich musste nur noch [not(//translat = $e//translat)] daraus machen, dann hats funktioniert. Danke schön!

      P.S. Das nächste Mal gibts Beispieldaten...

      Comment


      • #4
        [not(//translat = $e//translat)] ist mit Sicherheit falsch, wenn dann [not(.//translat = $e//translat)]

        Comment


        • #5
          Originally posted by Martin Honnen View Post
          [not(//translat = $e//translat)] ist mit Sicherheit falsch, wenn dann [not(.//translat = $e//translat)]
          Oops, ja, das fällt eigentlich gleich auf. Jetzt funktioniert es aber nicht mehr. Hier ist wb1:
          Code:
          <?xml version="1.0" encoding="UTF-8"?>
          <wb>
          	<eintrag>
          		<stichw>test</stichw>
          		<ROM>I</ROM>
          		<WORTK>VERB</WORTK>
          		<translat>etw prüfen</translat>
          		<ROM>II</ROM>
          		<WORTK>SUBST</WORTK>
          		<translat>Nachweis</translat>		
          	</eintrag>
          	<eintrag>
          		<stichw>testosterone</stichw>
          		<PHON>tesˈtɒstərəʊn</PHON>
          		<WORTK>SUBST</WORTK>
          		<translat>Testosteron</translat>
          	</eintrag>
          </wb>
          und wb2
          Code:
          <wb>
          	<eintrag>
          		<stichw>test</stichw>
          		<ROM>I</ROM>
          		<WORTK>VERB</WORTK>
          		<translat>etw prüfen</translat>
          		<ROM>II</ROM>
          		<WORTK>SUBST</WORTK>
          		<translat>Prüfung</translat>
          		<wend>
          		<wendung>to pass a test</wendung>
          		<translat>einen Prüfung bestehen</translat>
          		</wend>
          	</eintrag>
          	<eintrag>
          		<stichw>testosterone</stichw>
          		<PHON>tesˈtɒstərəʊn</PHON>
          		<WORTK>SUBST</WORTK>
          		<translat>Testosteron</translat>
          	</eintrag>
          </wb>
          Das gewünschte Ergebnis wäre der erste Eintrag aus wb1, weil dort die Übersetzung "Nachweis" neu ist und nicht in dem entsprechenden Eintrag aus wb2 vorkommt. "Testosteron" ist gleich und soll nicht mit in der Ergebnisdatei auftreten. Der springende Punkt ist, dass es reichen soll, wenn ein Wert von <translat> abweicht.

          Comment


          • #6
            Dann
            Code:
            let $w1 := doc('file1.xml')
            let $w2 := doc('file2.xml')
            for $e in $w1/wb/eintrag
            where $e//translat[not(. = $w2/wb/eintrag[stichw = $e/stichw]//translat)]
            return $e
            Zuletzt editiert von Martin Honnen; 25.08.2010, 17:36. Reason: Korrektur, um Schachtelung von "translat" zu berücksichtigen

            Comment


            • #7
              Vielen Dank!!!

              Comment

              Working...
              X