In dem Mangel an gute freie XPath 2.0 Implementierungen für .Net auf Linq zu XML habe ich über die Implementierung meiner eigenen (auch für die Erfahrung). Aber nur klar zu sein (und nicht etwas zu bauen, was existiert), das sind die XPath 2.0-Implementierungen habe ich gefunden:Schritte und Beteiligung der Implementierung eines Parsers (in. Net - und in diesem Fall XPath 2.0)
- Saxon .Net
- Query Machine - ich hatte Probleme mit diesem - Ausnahmen mit den Beispielen
- XQSharp - kann gut sein, aber ist kommerziell (einzelner Entwickler ~ 300 $)
Nun möchte ich einige Gedanken darüber, wie schwierig es ist, eine Sprache wie XPath 2.0 Ausdrücke zu implementieren. Ich habe diesen Link gefunden, der einen EBNF für XPath 2.0-Ausdruck hat: http://www.w3.org/TR/2007/REC-xpath20-20070123/#id-grammar und ich denke, es in F # mit der fslex/fsyacc-Kombination zu machen.
Mein Hintergrund (subjektive Bewertung): Ich habe mit diesen Tools schon einmal gespielt, aber nur für einige einfache Ausdrücke und eine sehr einfache Programmiersprache. Außerdem habe ich den Großteil des Drachenbuchs und Appels Modern Compiler-Implementierung in ML gelesen - leider habe ich die Theorie beim Lesen nicht in die Praxis umgesetzt. Ich habe Informatik in einem Jahr studiert, wo ich Kurse mit Theorie über ex finite automaton
, CFL
und Algorithmen abgeschlossen habe, aber ich bin ein Entwickler seit Jahren vor der Universität (ein paar Jahre mit professionellen Jobs - Back-End von Webseiten hauptsächlich).
Nun werden die Schritte der Analyse und dem, was ich neige dazu, zu decken:
- Lex - Parsing - Ermäßigungen: FsLex/FsYacc. Ich werde zunächst nicht ALLES von Xpath 2.0 behandeln, aber zumindest alles, was XPath 1.0 tun kann + ein bisschen mehr.
- Sematic Analyse - Ich bin nicht sicher, wie viel es zu diesem
- Optimierung ist - ich diese (zumindest nicht auf den ersten) nicht zu decken neigen
- tatsächliche Verfahrgeschwindigkeit usw.
- ... ?
Nun werden die konkrete Fragen zusätzlich zu dem oben:
- Wie schwierig es einen Parser dieser Größe zu machen ist? basierend auf meinem Hintergrund, könnte ich dazu?
- Gibt es irgendwelche entscheidenden Schritte, die ich in Bezug auf XPath 2.0 insbesondere verpasst habe?
- Gibt es irgendeine Technologie, die ich verpasst habe? Muss ich mehr als nur XPath 2.0 und
XDocument
etc. abdecken, um den Parser erstellen zu können?
Um klar zu sein: ich ein XPath 2.0 Ausdrucksparser machen will und durchqueren XDocument
usw. mit diesem Ausdruck analysiert. Was ich kombiniere, ist eine Abfrage-Engine.
Aktualisierung: Ich fand dies: http://www.w3.org/2007/01/applets/xpathApplet.html enthält Code zum Parsen und Traversieren.Ich denke, es wäre ein guter Anfang oder eine Referenz :-)
Ihre Antworten werden geschätzt.
Ich verstehe Ihre Frage nicht wirklich. XPath ist eine Abfragesprache. Es benötigt keinen Parser, es benötigt ein bestehendes wohlgeformtes XML-Dokument mit Schema. Das XML-Schema bestimmt die Struktur des XML, also ist das Ihr YACC für XML. Das heißt, .NET unterstützt dies. Ich sehe keine Notwendigkeit, das Rad hier neu zu erfinden. – leppie
@leppie Ich konnte nicht in meinen Begriffen klar gewesen sein. Ich möchte '// pf: * [@ name = 'einige']/@ *' analysieren, damit es ein XPath 2.0 Ausdrucksparser ist, den ich machen möchte. –
@lasseespeholt: Aber warum? Ist die XPath 2-Abfrage-Engine (von der ich glaube, dass es sich um kompilierte Abfragen handelt) nicht funktioniert? Oder möchten Sie Ihre kleinen 'DSL' Qeuries verwenden? – leppie