xpath joins: wie?

nautiLus`

Erfahrenes Mitglied
Hallo, ich habe ein Problem bei einem xpath query...

Folgende XML Datenstruktur sei mir gegeben:

Code:
<konferenzverwaltung>
	
	<person pid="p1"><name>Sebastian</name></person>
	<person pid="p2"><name>Christian</name></person>
	<person pid="p3"><name>Maria</name></person>
	<person pid="p4"><name>Georg</name></person>
	<person pid="p5"><name>Sabine</name></person>
	
	<konferenz kid="k1">
		<name>Konferenz Nr. 1</name>
		<datum>10.10.2005</datum>
		<ort>Graz</ort>
	</konferenz>
	
	<konferenz kid="k2">
		<name>Konferenz Nr. 2</name>
		<datum>10.10.2005</datum>
		<ort>Wien</ort>
	</konferenz>
	
	<konferenz kid="k3">
		<name>Konferenz Nr. 3</name>
		<datum>10.10.2005</datum>
		<ort>Wien</ort>
	</konferenz>
	
	<vortrag vid="v1"><titel>Datenbanksysteme</titel></vortrag>
	<vortrag vid="v2"><titel>Verteilte Systeme</titel></vortrag>
	<vortrag vid="v3"><titel>Mathematik 1</titel></vortrag>
	
	<teilnahme pid="p1" kid="k1" vid="v1" />
	<teilnahme pid="p2" kid="k2" vid="v2" />
	<teilnahme pid="p3" kid="k2" vid="v1" />
	<teilnahme pid="p4" kid="k2" vid="v1" />
	<teilnahme pid="p5" kid="k2" vid="v1" />
	<teilnahme pid="p5" kid="k3" vid="v3" />
	<teilnahme pid="p3" kid="k2" vid="v1" />
    
</konferenzverwaltung>

Wie kann ich nun z.B. die Namen aller Personen filtern, welche jemals auf Konferenzen in Wien einen Vortrag zum Thema "Datenbanksysteme" gehalten haben.

Ich hab es mal in xquery gemacht, was etwa so aussieht:

Code:
for $p in /konferenzverwaltung/person,
    $k in /konferenzverwaltung/konferenz,
    $v in /konferenzverwaltung/vortrag,
    $t in /konferenzverwaltung/teilnahme
where $t/@pid = $p/@pid and $t/@kid = $k/@kid and $t/@vid = $v/@vid
and $v/titel = "Datenbanksysteme" and $k/ort = "Wien"
return string($p/name)

Nur der Ansatz für xpath fehlt mir joins oder was ähnliches durchzuführen wie in xquery.

Habe mal sowas zusammengewürfelt (ist aber irgendwie kein join):

konferenzverwaltung/konferenz[ort='Wien']/../vortrag[titel='Datenbanksysteme']/../person/name/text()

Hat wer einen Ansatz?
 
Hallo Nautilus,

ich kann dir zwar nicht weiterhelfen, aber mich interessiert das Thema. Woher hast du dein Wissen darüber? Kannst du ein Tutorial oder ein anderes Dokument im Internet empfehlen?
 
hi, also grundsätzlich hab ich mir alles aus dem netz geholt.

zb so suche ich nach xquery tutorials:

http://www.google.com/search?hl=en&q=xquery+tutorial+filetype:pdf

oder so nach xpath:

http://www.google.com/search?hl=en&lr=&q=xpath+tutorial+filetype:pdf

das W3C ist meistens auch super:
http://www.w3schools.com/w3c/w3c_xquery.asp
http://www.w3schools.com/xpath/default.asp

hier übrigens noch die lösung zu meinem problem:

Code:
/konferenzverwaltung/person[@pid=/konferenzverwaltung/teilnahme[@kid=/konferenzverwaltung/konferenz[ort='Wien']/@kid][@vid=/konferenzverwaltung/vortrag[titel='Datenbanksysteme']/@vid]/@pid]/name/text()
 
Zurück