Sonntag, 7. Dezember 2008

A4: XPath Abfragen

Nach der Deadline gibt es nun auch die "Auflösung":
  • Zu welchen Tumoren wurde noch kein Krebsmeldeblatt angelegt?

    //tumor[count(krebsmeldeblatt)=0]

  • Untersuchungen, bei denen ein Residuum entdeckt wurde

    //untersuchung[diagnose/tumorstatus="Residuum"]

  • Die Ausdehnung aller benignen Tumoren des Patienten mit der SVNR 1234010155

    //patient[@svnr="1234010155"]/untersuchung/diagnose[id(@tumor)
    [differenzierung/@name="benign"]]/ausdehnung
Das ganze auch für die Regierungs-Teilaufgabe:

  • Die Namen aller SPÖ-Sozialminister

    id(//minister[@ressort="sozial"]/@person_id)[@partei="SPÖ"]/@name
    XPath2: distinct-values( id(//minister[@ressort="sozial"]/@person_id)[@partei="SPÖ"]/@name)

  • Zurückgetretene FPÖ-Minister

    //minister[ id(@person_id)/@partei="FPÖ" and @durchgehalten="nein" ]

  • Bundeskanzler gescheiterter Regierungen

    //minister[ @bundeskanzler="ja" and ../@vorzeitige_neuwahlen="ja" ]

  • Die durchschnittliche Amtszeit von Regierungen (nur XPath 2)

    sum(//legislaturperiode/number(@end_jahr - @beginn_jahr)) div count(//legislaturperiode)
Da sind auch einige Abfragen mit id() dabei, die ResultSets werden daher in der Übungsumgebung nicht ganz wie gewohnt farblich markiert - aber sie funktionieren.

Wer vor ähnlichen Problemen steht, kann ganz einfach mit Saxon arbeiten (unterstützt auch XPath2, Download: http://saxon.sf.net). Die Abfrage muss in eine Datei geschrieben werden (zb q.txt), der Aufruf lautet dann wie folgt:

java -cp saxon9.jar net.sf.saxon.Query -s file.xml q.txt

1 Kommentar:

Michael Derntl hat gesagt…

Sehr fein. Die Abfrage
//tumor[count(krebsmeldeblatt)=0]

könnte man auch so formulieren:
//tumor[not(krebsmeldeblatt)]