Loose and strict XPath variables/namespaces
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
Direzione di ricerca
Inizia dal punto di ingresso XPath di REXML e segui come vengono gestiti i binding di namespace e variabili. Confronta il comportamento richiesto per le chiavi simbolo e i valori dei namespace con gli esempi di Nokogiri e la specifica XPath 1.0. Decidi se le variabili non definite vengono verificate durante la valutazione al momento del riferimento o prima della valutazione, quindi copri il comportamento scelto con dei test.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Loose keys
XPath namespaces and variables doesn't accept symbol keys. It'll be convenient if symbol keys are accepted.
Nokogiri accepts both string and symbol keys.
namespaces = { ns: 'url' }
variables = { id: 'a' }
xml = '<foo xmlns="url"><bar id="a"/></foo>'
Nokogiri::XML.parse(xml).xpath('//ns:bar[@id=$id]', namespaces, variables)
Strict value check
XPath variables have value validation. Namespaces can also have validation
Nokogiri::XML.parse('<a/>').xpath('//a', { ns: 42 }) #=> TypeError
Strict variable existence check
There's two options
- Reference time check
- Pros: easy to implement
- Cons: error is document dependent
- Pre-check all variables in xpath
- Pros: can detect variable name typo easily
- discussed in https://github.com/ruby/rexml/pull/342#discussion_r3586024018
Nokogiri(libxml2) implements reference time check.
Nokogiri::XML.parse('<b/>').xpath('//a[@id=$foo]', nil, {fooo: '1'}) # => []
Nokogiri::XML.parse('<a/>').xpath('//a[@id=$foo]', nil, {fooo: '1'}) # => ERROR: Undefined variable
XPath 1.0 spec:
A VariableReference evaluates to the value to which the variable name is bound in the set of variable bindings in the context. It is an error if the variable name is not bound to any value in the set of variable bindings in the expression context.
I'm not sure whether it should be an error in evaluation context (reference-time) or in pre-check phase.
In XPath 2.0, it's explicitly defined to be a static-error, so XPath 1.0 spec might be ambiguous.
- Lingua principale
- Ruby
- Stelle
- 181
- Fork
- 104
- Merge medio
- 11h 3m
- PR unite (30g)
- 1
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di ruby/rexml
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
-
XPath underscored function name is wrongly acceptedForse già presa @sjh9714 l’ha presa 45 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
-
RELAX NG Validator fails to handle XML documents with XML declarationForse già presa @Shaisolaris l’ha presa 2 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
bug f:search
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
feature
Difficoltà 2/5 1-3 ore Idoneità per principianti 60/100
manyfold3d/manyfold#7346 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
🐞 bug pending triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
CircuitVerse/CircuitVerse#8025 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
we-promise/sure#4199 ·
I maintainer di solito rispondono entro 1 giorno