Nella mancanza di buone implementazioni gratuite di XPath 2.0 per .Net basato su Linq su XML ho pensato di implementare il mio (anche per l'esperienza). Ma tanto per essere chiari (e non la costruzione di qualcosa che esiste) queste sono le XPath 2.0 implementazioni che ho trovato:Passi e coinvolgimento nell'implementazione di un parser (in .Net - e in questo caso XPath 2.0)
- sassone .Net
- Query Machine - ho avuto problemi con questo - eccezioni con gli esempi
- XQSharp - può essere buona, ma è commerciale (sviluppatore singolo ~ 300 $)
Ora, voglio alcune riflessioni su quanto sia difficile per l'attuazione di alcune linguaggio come XPath 2.0 espressioni. Ho trovato questo collegamento che ha un EBNF per l'espressione XPath 2.0: http://www.w3.org/TR/2007/REC-xpath20-20070123/#id-grammar e sto pensando di farlo in F # con la combinazione fslex/fsyacc.
Il mio sfondo (soggettivo): Ho già giocato con questi strumenti, ma solo per alcune espressioni semplici e un linguaggio di programmazione molto semplice. Inoltre, ho letto la maggior parte del libro di Dragon e l'implementazione del compilatore Modern di Appel in ML - ma sfortunatamente, non ho messo in pratica la teoria durante la lettura. Ho studiato scienze informatiche in un anno dove ho completato corsi teorici sull'ex finite automaton
, CFL
e algoritmi, ma sono stato uno sviluppatore per anni prima dell'università (alcuni anni con lavori professionali - principalmente back-end di siti web).
Ora, i passi di analisi e di ciò che io tendo a coprire:
- Lex - Analisi - Riduzioni: FsLex/FsYacc. Non coprirò TUTTO tutto Xpath 2.0 all'inizio, ma almeno tutto ciò che XPath 1.0 può fare + un po 'di più.
- analisi Sematic - io non sono sicuro di quanto c'è a questo
- Optimization - Io non tendono a coprire questo (almeno non in un primo momento)
- traslazione effettivo ecc
- ... ?
Ora, le domande concrete in aggiunta a quanto sopra:
- Quanto è difficile fare un parser di queste dimensioni? sulla base del mio background, potrei farlo?
- Ci sono dei passaggi cruciali che mi sono persi riguardo a XPath 2.0 in particolare?
- C'è qualche tecnologia che mi è sfuggita; Devo coprire più di XPath 2.0 e
XDocument
ecc. Per poter fare il parser?
Per essere chiari: Voglio fare un XPath 2.0 parser di espressioni e attraversare XDocument
ecc Con questo analizzato espressione. Quale immagino combinato è un motore di ricerca.
Aggiornamento: Ho trovato questo: http://www.w3.org/2007/01/applets/xpathApplet.html che contiene il codice per analizzare e attraversare.Penso che sarebbe un buon inizio o riferimento :-)
Le vostre risposte saranno apprezzate.
Non capisco davvero la tua domanda. XPath è un linguaggio di query. Non ha bisogno di parser, ha bisogno di un documento XML ben strutturato esistente con schema. Lo schema XML è ciò che determina la struttura dell'XML, quindi, in effetti, questo sarebbe il tuo 'yacc' per XML. Detto questo, .NET supporta tutto questo. Non vedo la necessità di reinventare la ruota qui. – leppie
@leppie I potrebbe non essere stato chiaro nel mio uso dei termini. Voglio analizzare '// pf: * [@ name = 'some']/@ *' quindi è un parser di espressioni XPath 2.0 che voglio creare. –
@lasseespeholt: Ma perché? Il motore di query di XPath 2 (che credo sia una query compilata) non funziona? O vuoi usare i tuoi piccoli qeury 'dsl'? – leppie