Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Loose and strict XPath variables/namespaces

Aberta
#349 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
35/100
Tipo de issue
Funcionalidade
Clareza
Precisa de esclarecimento
Status de atividade
Pouca atividade
Stack de tecnologia
ruby
Domínio
backend

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

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

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de ruby/rexml

Todas as issues de ruby/rexml

Issues semelhantes

Mais issues de Ruby

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.