Loose and strict XPath variables/namespaces
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 35/100
Piste de recherche
Commencez au point d’entrée XPath de REXML et suivez la manière dont sont gérées les liaisons de namespaces et de variables. Comparez le comportement demandé pour les clés de symboles et les valeurs de namespaces avec les exemples de Nokogiri et la spécification XPath 1.0. Déterminez si les variables non définies sont vérifiées lors de l’évaluation au moment de la référence ou avant l’évaluation, puis couvrez le comportement choisi avec des tests.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Ruby
- Étoiles
- 181
- Forks
- 104
- Merge moyen
- 11 h 3 min
- PR mergées (30 j)
- 1
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de ruby/rexml
-
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
-
XPath underscored function name is wrongly acceptedPeut-être pris @sjh9714 l’a pris il y a 46 jours. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
-
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
-
RELAX NG Validator fails to handle XML documents with XML declarationPeut-être pris @Shaisolaris l’a pris il y a 2 jours. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
Toutes les issues de ruby/rexml
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
-
iOS podspec depends on `React-Codegen`, which resolves to an unrelated pod on CocoaPods trunkOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
GantMan/jail-monkey#380 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
voxpupuli/puppet-wireguard#151 ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
bug f:search
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour