Java / XML / XPath / Schnittmenge

  • ALso folgendes progblem:

    wir nehmen an es existieren 5 Rechner und auf jedem Rechner im cache ist eine XML Datei gespeichert.


    Ich stelle eine XPATH Anfrage.
    Stelle die Anfrage zuerst an Rechner 1.....er kann nur eine teilantwort geben.....
    danach leitet rechner 1 die anfrage mit teilantwort an rechner 2 und er kann auch ein teilantwort geben...
    die Anfrage wird solange weitergeleitet, bis es vollständig beantwortet ist....

    ich will das in Java implementieren.... wie gehe ich da vor ?

    Gruß
    Sergen
  • in Java.

    ich meine wenn Rechner 1 die anfrage nur teilweise aus seinem cache beantworten kann, gibt er ja die anfrage weiter an dem nächsten rechner...und er prüft ob er den fehlenden teil beantworten kann.....

    wie geht man da eigentlich vor ????
    ich weiss nicht so genau wie ich die methode in java schreiben kann??

    Gruß
    Sergen
  • Es geht eigentlich dadrum das ich bsp. X Clients im Netzwerk habe.
    Jeder Client hat sein Cache. Im Cache werden alle "alten" XP-Anfragen, Timestamp(wann die anfrage geschickt wurde) und das ergebnis gespeichert.


    Nun kommt eine Anfrage rein...der ClientX prüft ob er die Anfrage selber aus seinem eigenen Cache beantworten kann.
    Es gibt 3 Fälle.

    Fall 1: Er kann die Anfrage vollständig beantworten =>Ergebnis wird gespeichert=>ENDE

    Fall 2: Er kann die anfrage überhauptnicht beantworten => weiterleiten an den nächsten Client.

    Fall 3: Er kann die Anfrage nur teilweise beantworten => Er leitet die Anfrage mit sein teilergebnis(fragment) an den nächsten Client....der nächste schaut ob er die fehlende fragmente bei sich im cache hat wenn ja dann geht die nachricht zurück mit antwort, sonst wird die anfrage wieder an den nächsten client weitergeleitet...solange bis die antwort vollständig beantwortet wird.

    Mein Problem ist wie realisiere ich Fall 3 in Java ?????
    Oder kann man Fall 3 auch anders gestalten ????



    Gruß
    Sergen
  • Ich finde das hört sich vernünftig an.
    Zur Realisierung findest du unter den Begriffen Client-Server-Architektur oder eben Peer to Peer genug Stoff.

    Die Basics sind hier ganz gut erläutert:
    http://www-sst.informatik.tu-cottbus.de/~an/Books/HJP/html/k100286.html#kapitelnetzwerkprogrammierung

    Die Schnittmengenbildung sollte da das kleinste Problem sein.
  • vielen Dank für die Hilfe aber irgendwie brauche ich nur tden Teil wie ich die Teilmengen bilde bzw. bekomme.

    XPA_new ist die neue Anfrage

    XPA_old die alte anfrage...

    nun ist die frage, kann ich die neue Anfrage mit der alten Anfrage beantworten...
    und da muss ich auf Schnittmenge überprüfen.....da brauche ich dann die methode die das macht...

    Gruß
    Sergen
  • Kleiner Nachtrag: Mengenoperationen sind doch möglich.
    $a[count(.|$b) = count($b)] berechnet die Schnittmenge aus zwei Mengen
    $a[count(.|$b) != count($b)] berechnet die Vereinigungsmenge aus zwei Mengen


    Dennoch weiß ich nicht, wie du das ohne Java realisieren willst.

    Mit Java brauchst du nur eine Klasse zu verwenden die Collection implementiert.
    Das oben erwähnte Bitset (Beispiel in unserem Wiki) ist nur eine Möglichkeit.

    Interessant für Mengenoperationen sind
    * boolean removeAll( Collection<?> c ) Löscht alle Elemente der Collection aus dem Set und liefert true bei erfolgreichem Löschen.

    * boolean retainAll( Collection c ) Bildet die Schnittmenge mit c.

    http://www.galileocomputing.de/openbook/javainsel6/javainsel_11_005.htm

    Wie du dabei einen XML Baum einliest erfährst du auf selbiger Website:
    http://www.galileocomputing.de/openbook/javainsel6/javainsel_13_003.htm
  • naja, die Antworten haben zu den Fragen gepasst. Und damit auch andere davon profitieren können (dazu ist das Forum da) habe ich deine Beiträge mal wiederhergestellt.

    Zu deiner aktuellen Frage:
    An deiner Stelle würde ich das zentralisieren.
    n Clients die sich an einem Server anmelden... Sobald Aufgaben anstehen schickt der Server die Aufgaben raus an die Clients und kombiniert die Ergebnisse mit den Schnittmengenfunktionen.

    Ohne Zentralisierung ist die Chain of Responsibility eine Möglichkeit der Umsetzung:
    http://de.wikipedia.org/wiki/Zust%C3%A4ndigkeitskette