xpath Parser

Status
Nicht offen für weitere Antworten.

Wildcard

Top Contributor
Hi!

Das Projekt an dem ich arbeite bietet dem Anwender an einer bestimmten Stelle die
Möglichkeit xpath befehle zu verwenden.
Das Problem ist jetzt, das er dabei unterstützt werden soll, also das schon bei der Eingabe
die Syntax überprüft wird. Da man xpath aber schon fast eine Programmiersprache nennen
kann ist das leichter gesagt als getan.
Also muss IMO ein Scanner und ein Parser her.
Ich hatte jetzt erstmal an JLex gedacht (hab ich noch dunkel von der Uni in erinnerung),
muss jedoch zugegeben das ich davon keine Ahnung mehr habe.
Die Frage ist jetzt ob JLex eine sinnvolle Möglichkeit ist, und wenn ja
währe ich um jeden Tip/Link dankbar wie man an so etwas rangeht.
 

0xdeadbeef

Top Contributor
Kenne mich jetzt nicht mit xpath aus und bin auch kein Fan von Parsergeneratoren. Grundsätzlich sollte aber folgendes Vorgehen möglich sein.

String in Tokens zerlegen (Token = Variable/Operator/Keyword etc.). Üblicherweise gibt es in einer Sprache Delimiter, die Tokens voneinander trennen (aber durchaus selber Tokens oder Bestandteile davon sein können). In Java gibt beispielsweise folgende Delimiter: Whitespace, Zeilenumbruch, Operatoren, Klammern, Komma, Semikolon. Für die weitere Verarbeitung ist es meist sinnvoll/notwendig, die Stringdarstellung in eine Form von Syntaxbaum zu überführen. Im einfachsten Fall ein Stack. Die Tokens müssen natürlich auch identifiziert werden. Beispiel Java: numerische Literale beginnen mit Zahl oder "." (Sonderfälle Hexzahlen, "e" usw. beachten), Stringliterale mit '"' etc. Erlaubte Schlüsselwörter/Operatoren usw. muß man mit internen Listen überprüfen etc.
Bei komplexen Ausdrücken (Prioritäten usw.) kann eine rekurisve Erzeugung des Syntaxbaums sinnvoll sein. Bei einem klassichen Parser würde man danach zur Auswertung schreiten, aber Dir geht es ja nur um die Syntaxprüfung.

In Deinem Fall wäre das letzte Token unsicher. Anhand des Syntaxbaums sollte sich aber klarstellen lassen, welche Art von Token es es ein kann (falls das bei xpath überhaupt zweifelhast ist). Dann könnte man mit einer internen Liste prüfen, welche möglichen Werte es annehmen könnte.

Wesentlich mehr ins Detail könnte ich nur mit etwas Kenntnis über xpath gehen, die ich aber leider nicht habe.

Ein spezieller Fall ist natürlich die Erkennung beim Eintippen. Einfacher ist es sicher, den Ausdruck bei jedem Tastendruck komplett neu zu parsen. U.U. wäre es aber perfomanter, einen Zustandsautomaten zu benutzen, der bei jedem Tastendruck geupdatet wird. Bei einem Java-ähnlichen Ausdrucksparser könnte ich hilfreicher sein ;)
 

Wildcard

Top Contributor
Erstmal vielen Dank für die Anregungen!
Kann gut verstehen warum du kein Fan von Parser Generatoren bist, hab's
ja jetzt am eigenen Leib erfahren. :?
Bin auf den Trichter gekommen das ich den Parser wohl selbst schreiben muss.
Das kleinste Problem sind eigentlich dir Tokens. Das läuft soweit.
War eigentlich immer der Meinung, das man Parser und Auswertung voneinander trennen sollte?
Ich hab hauptsächlich noch meine Schwierigkeiten damit die Grammatiken zu übertragen
und den Syntaxbaum aufzubauen.
Hab jetzt schon diverse Varienten gesehen, ist es besser solche Sachen wie Funktionen
(concat(string, string, ...),contains(string),...) schon beim Parsen durch Symbole zu unterscheiden,
oder sollte man sie als Literal expr werten und erst in der Auswertung weiter unterscheiden
(Funktionstyp, Paramter,...)?
3740122799 hat gesagt.:
Bei einem Java-ähnlichen Ausdrucksparser könnte ich hilfreicher sein
Wie lang hast du dafür gebraucht? So als ungefähre Aufwandsabschätzung?
 

Wildcard

Top Contributor
Bleiglanz hat gesagt.:
nimm direkt die Klassen aus org.apache.xpath.XPath
Hier wird soweit ich weiß aber mit dem Kontext eines XML-Dokuments gearbeitet?
Ich möchte den xpath Ausdruck aber isoliert als String betrachten.
Auserdem seh ich noch nicht so ganz wie ich damit unvollständige Ausdrücke wie in
Eclipse vervollständigen kann.
 

Bleiglanz

Gesperrter Benutzer
Wildcard hat gesagt.:
Bleiglanz hat gesagt.:
nimm direkt die Klassen aus org.apache.xpath.XPath
Hier wird soweit ich weiß aber mit dem Kontext eines XML-Dokuments gearbeitet?
Ich möchte den xpath Ausdruck aber isoliert als String betrachten.
Auserdem seh ich noch nicht so ganz wie ich damit unvollständige Ausdrücke wie in
Eclipse vervollständigen kann.
ja, das geht natürlich nicht

aber wie willst du was vervollständigen? Soll dein Parser auch noch die DTD/das Schema deines Dokuments "kennen"?
 

Wildcard

Top Contributor
Bleiglanz hat gesagt.:
aber wie willst du was vervollständigen? Soll dein Parser auch noch die DTD/das Schema deines Dokuments "kennen"?
Nein. Da ich keine Auswertung vornehme ist mir der Rest des Dokuments egal.
Im ersten Schritt möchte ich den xpath Ausdruck isoliert betrachten, und die Referenzen
auf Variablen und das Dokument als korrekt annehmen solange sie syntaktisch und
semantisch richtig sind.
Hab mir jetzt überlegt das ich nach dem Zerteilen in Tokens für jedes Token eine Liste mit korrekten
nachfolgetokens erstelle. Wenn eine Klammer kommt möchte ich eine rekursive Funktion starten die
die Klammer, und alle inneren Klammern in ihren Rückgabetyp umwandeln.
Problematisch wird es da allerdings dadurch das ich ja die Paramter der Funktionen mitschleppen müsste.
Bin mir auch nicht sicher ob damit eindeutig sagen kann ob ein Ausdruck korrekt ist,
da diese Methode ja nur mit einem lookahead arbeiten würde.
 

Bleiglanz

Gesperrter Benutzer
Das jakarta commons Projekt JXPath
hat schon einen eingebauten Parser/Compiler
dabei, wird aber möglicherweise "zuviele" Ausdrücke
korrekt werten
When JXPath is asked to evaluate an expression for the first time, it compiles it and caches its compiled representation. This mechanism reduces the overhead caused by compilation. However, in some cases JXPath's own caching may not be sufficient- JXPath caches have limited size and they are automatically cleared once in a while.

Here's how you can precompile an XPath expression:


CompiledExpression expr = context.compile(xpath);
...
Object value = expr.getValue(context);

Use compiled expressions if you need to satisfy any of the following requirements:

* There is a relatively small number of XPaths your application works with, and it needs to evaluate those XPaths multiple times.
* Some XPaths need to be precompiled at initialization time for speed.
* The syntax of some XPaths needs to be checked before they are used for the first time.
 

Wildcard

Top Contributor
Bleiglanz hat gesagt.:
wird aber möglicherweise "zuviele" Ausdrücke korrekt werten
nicht weiter schlimm. Ist nicht unbedingt ein Prog für DAU's. Wenn das Gros erkannt wird ist
das völlig ausreichend.
Wenn das klappt würde mir das eine menge Arbeit ersparen.
Werds mir gleich mal ansehen.
THX a lot :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe Probleme mit XML XPATH Select XML & JSON 3
B XPath soll XML liefern XML & JSON 7
O XPATH Problem - Anfänger XML & JSON 4
M dom4j unberechtigte Invalid XPath expression XML & JSON 12
W XPath schreiben XML & JSON 1
P HTML XPath XML & JSON 1
S Ersatz für die veraltete Klasse XPath XML & JSON 1
C XPath: Alle Kinder in einer Schleife auslesen XML & JSON 2
P Xpath zugriff auf Attribute XML & JSON 3
P "XPath is deprecated" XML eclipse XML & JSON 3
G HtmlUnit XPath XML & JSON 5
D XPath-Query XML & JSON 2
I XPath Namensräume und auslesen einzelner Knoten XML & JSON 3
AMStyles XPATH Befehl SVG Java XML & JSON 2
G xpath: in Kindelement zwei Attribut-Werte auslesen XML & JSON 2
G xpath: Inhalt eines Kindelements auslesen XML & JSON 2
H ChildNode via XPath ansprechen XML & JSON 2
G JDOM - aus Children-Liste ein Child direkt ansprechen ohne XPath? XML & JSON 9
S Attribute von Elementen auslesen mit XPath XML & JSON 2
T Xpath & JDOM Element Pfad ausgeben XML & JSON 2
W XPath + Inhalt aus <td> XML & JSON 2
R XPath - frage zur Adressierung XML & JSON 3
reibi XPath XML & JSON 14
M xPath liefert leeres Nodeset XML & JSON 2
M Probleme mit XPath bei Java XML & JSON 5
W Element mit XPath @id ermitteln wenn nur ein teil der id bekannt ist XML & JSON 2
F XPath-Problem mit DOM4J XML & JSON 8
T XPath Problem: finden einer Node nach Attributswert XML & JSON 2
O XPATH gesucht XML & JSON 6
G XPATH-Frage XML & JSON 2
L Element manipulieren in einem DOMResult per XPath XML & JSON 10
P XPath und Namespaces XML & JSON 3
G XPath - replace function funktioniert nicht XML & JSON 3
E XPATH-Ausdruck mit not XML & JSON 4
E Wieso liefert dieser XPATH-Ausdruck nicht die richtige Anzahl Treffer? XML & JSON 8
M XPath Ausdruck validieren XML & JSON 2
N XPath Adressierung XML & JSON 7
F XPath frage XML & JSON 4
B Optionaler XPath pfad XML & JSON 2
B XPath frage XML & JSON 2
T Frage zu XQuery (XQJ) / XPath XML & JSON 2
P XPath Problem XML & JSON 2
S Problem mit XPath XML & JSON 4
T Mit XPATH finden und dann änder XML & JSON 2
T EXSD auslesen mit XPath und JDOM XML & JSON 8
G XPath gesucht für Tag mit konkretem Content XML & JSON 2
A XPath Problem XML & JSON 2
C XPath in JDOM klappt nicht XML & JSON 2
T Prbolem XPath XML & JSON 2
X Xpath, alle Element die mit "user" beginnen auswäh XML & JSON 2
loadbrain XPath Problem XML & JSON 2
M brauche große XML-Datei für XPath-Tests XML & JSON 4
M JDOM und XPath, zu Element zugehörigen XPath-Ausdruck XML & JSON 5
F JDOM und XPath - Problem mit Namespace ohne Prefix XML & JSON 5
F hilfe bei xpath-ausdruck XML & JSON 2
K java + xpath -> performanceproblem XML & JSON 9
H Xpath kindelemente auslesen XML & JSON 2
S Xml zurück in xpath wandeln XML & JSON 8
G Frage zu XPath XML & JSON 2
flashfactor Filtern mittels XPATH XML & JSON 4
M XSL/XPath - Nur ersten Wert mit selben Attribut XML & JSON 4
M XPath Problem im Zusammenhang mit document() XML & JSON 2
M Frag zu xsl:when beziehungsweise XPath XML & JSON 3
F JDom und XPath XML & JSON 12
C xpath funktioniert nicht XML & JSON 5
M XPATH und RSS (Problem namespaces) XML & JSON 7
P nochmal XPath :-) XML & JSON 22
P XPath . XML & JSON 2
T Rekursiver Verzeichniss Baum in XML & XPath XML & JSON 4
clemson xpath mit jdom XML & JSON 2
pkm Gibt es XML-Parser-Bibliotheken XML & JSON 3
B XML-Daten mit SAX Parser verarbeiten in Java XML & JSON 4
MiMa SAX-Parser beenden? XML & JSON 5
K GSON-Parser XML & JSON 6
K XML-Parser vs. XLST XML & JSON 4
L DOM Parser Implementieren XML & JSON 9
M SAX Parser implementieren XML & JSON 2
E Gibt es denn einen XML-Parser für JUnit-Tests? XML & JSON 6
D XSD Parser XML & JSON 1
T Neuer XML Parser!!! XML & JSON 33
J XML Parser anhand xsd erzeugen XML & JSON 2
H SAX Parser optimieren XML & JSON 5
H Sax Parser verschluckt teile XML & JSON 11
C XML SAX Parser XML & JSON 10
R Handler-Wechsel, SAX Parser bricht nach 8192 Byte ab XML & JSON 5
B SAX-Parser - Dokumente einlesen und in einer Map ablegen XML & JSON 2
S Sax Parser Performance XML & JSON 2
M Eigener XML-Parser XML & JSON 1
S Typsicherer HTML-Parser XML & JSON 5
S HTML Parser XML & JSON 2
B Parser und Fabrik XML & JSON 6
F SAX Parser siehe nichts auf dem Konsole weder eine Fehlermeldung noch eine Ergebnis XML & JSON 6
enne87 SAX-Parser XML & JSON 5
C Mit SAX Parser XML Attribute auswerten XML & JSON 3
H XML-Parser: geparste Strings in Konstruktor? XML & JSON 9
S DOM Parser XML & JSON 12
S Sax Parser XML & JSON 3
D Speicherüberlauf bei character-Methode mit SAX-Parser XML & JSON 3
Y Welchen XML Parser / Klassen aus XSD generieren lassen XML & JSON 4
H Brauche ich einen speziellen XML-Parser? XML & JSON 2

Ähnliche Java Themen

Neue Themen


Oben