Loose and strict XPath variables/namespaces
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 35/100
Direção de pesquisa
Comece pelo ponto de entrada de XPath do REXML e acompanhe como os bindings de namespace e de variáveis são tratados. Compare o comportamento solicitado para chaves de símbolo e valores de namespace com os exemplos do Nokogiri e a especificação XPath 1.0. Decida se variáveis indefinidas são verificadas durante a avaliação no momento da referência ou antes da avaliação e, em seguida, cubra o comportamento escolhido com testes.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- Ruby
- Estrelas
- 181
- Forks
- 104
- Merge médio
- 11h 3min
- PRs com merge (30d)
- 1
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de ruby/rexml
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
-
XPath underscored function name is wrongly acceptedTalvez já em andamento @sjh9714 assumiu há 46 dias. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
-
RELAX NG Validator fails to handle XML documents with XML declarationTalvez já em andamento @Shaisolaris assumiu há 2 dias. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
Issues semelhantes
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia
-
iOS podspec depends on `React-Codegen`, which resolves to an unrelated pod on CocoaPods trunkAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
GantMan/jail-monkey#380 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
voxpupuli/puppet-wireguard#151 ·
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
bug f:search
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia