Por que os índices no XPath começam com 1 e não com 0?


117

Alguns colegas e eu estávamos comparando linguagens anteriores que havíamos programado e conversando sobre nossa experiência com VBScript com seus recursos estranhos , como índice baseado em 1 em vez de índices baseados em 0, como quase todas as outras linguagens têm, o raciocínio sendo que era um linguagem para usuários (por exemplo, Excel VBA) em vez de uma linguagem para desenvolvedores.

Então alguém disse: " XPath também tem índices baseados em 1 ", que eu não pude acreditar até encontrar este artigo no qual muitos motivos são dados a favor da abordagem baseada em 0, incluindo alguns do próprio Michael Kay:

  • "... a indexação baseada em zero tende a tornar as fórmulas de índice mais simples ao acessar uma matriz multidimensional com uma expressão de acesso à matriz unidimensional"
  • "ao manipular tabelas ou subscrever em strings, o endereçamento baseado em zero costuma ser muito mais conveniente"
  • "... o endereçamento de hardware não é o único benefício do endereçamento baseado em 0 ... ele também torna os cálculos mais fáceis ..."

mas então Michael Kay é citado como concluindo:

... a lógica baseada em 1 foi a escolha certa para XPath e XSLT ... porque a linguagem foi projetada para usuários, não para programadores, e os usuários ainda têm o hábito antiquado de se referir ao primeiro capítulo de um livro como Capítulo 1...

Alguém pode explicar isso para mim? (1) Como o XPath é projetado para usuários? Não consigo imaginar alguém que não seja um desenvolvedor lutando com a rigidez sintática do XPath ou os aspectos de programação declarativa / funcional do XSLT. e (2) por que realmente os criadores do XPath foram contra a norma das linguagens de programação modernas ao escolher um índice baseado em 1?


7
No mesmo artigo, Michael também é citado com as seguintes palavras: "Não posso dizer qual foi a história real da decisão; só posso pós-racionalizá-la". Se ele mesmo não sabe, provavelmente não há uma resposta satisfatória.
Dirk Vollmar

5
Eu votei para FECHAR esta questão como subjetiva e argumentativa. A indexação baseada em 0 não é melhor do que a indexação baseada em 1 e o inverso também é verdadeiro: a indexação baseada em 1 não é de forma alguma melhor do que a indexação baseada em 0. Ambos têm pontos positivos e negativos. A indexação baseada em 1 é mais natural para não programadores. Também permite especificar o limite superior de um intervalo n, não o muito antinatural e muitas vezes levando a erros n - 1. Para qualquer pessoa com lógica pervertida devido à "programação moderna", começar a usar a indexação baseada em 1 seria uma experiência agradável e refrescante :)
Dimitre Novatchev

3
as respostas a esta questão stackoverflow mostram que os índices baseados em 0 são preferidos por vários motivos: stackoverflow.com/questions/393462/defend-zero-based-arrays
Edward Tanguay

9
Minha pergunta é uma pergunta real, na verdade, como eu ensino programação e quero ter uma resposta para essa pergunta sobre os índices xpath caso ela apareça. Acho que a melhor resposta é que um índice baseado em 1 mapeia para position (), que é muito usado no xpath.
Edward Tanguay

64
Acho que esta é uma questão legítima e não deveria ter sido encerrada. Pede um fato histórico que não é uma questão de opinião e a resposta seria esclarecedora.
Ben Flynn de

Respostas:


30

Array e outros índices de coleção representam deslocamentos de memória, então logicamente eles começam do zero. Os índices XML e XPATH representam posições e contagens, portanto, logicamente, eles começam em um (e o zero é, portanto, representativo de "vazio")


8

Para responder a essa pergunta, devemos examinar a história de algumas tecnologias.

Histórico RSS XML XSLT e XPath

A versão 0.9 do RSS foi originalmente lançada como RDF Site Summary em 1999 por alguns caras da Netscape para o portal my.netscape.com da Netscape. Mais tarde naquele ano, ele foi renomeado para RSS (Rich Site Summary) com a atualização v0.91. O desenvolvimento do projeto mudou várias vezes, mas RSS versão 1.0 foi lançado em dezembro de 2000. Com a atualização v1.0, RSS incluiu suporte para XML.

Durante 2002, a v2.0 foi lançada em setembro como RSS (Really Simple Syndication) e começou a evoluir para uma grande tecnologia de internet. Em sua história inicial, os feeds RSS (e os dados XML que eles continham) eram lidos por humanos no formato bruto. Blogs e outras fontes de notícias usavam feeds RSS e XML para gerar informações continuamente atualizadas. Como o XML estava sendo lido por meros mortais (não programadores), XPath e XSLT também precisavam ser facilmente compreensíveis, para que esses meros mortais não fossem sobrecarregados pela complexidade ao interagir com ele. É por isso que o XPath imita o estilo de URIs, que é algo com o qual os usuários finais já estão familiarizados. Uma das concessões feitas para fins de legibilidade pelos usuários era usar técnicas de numeração antiquadas, ou seja, índices baseados em 1 em vez de índices baseados em 0.

Embora os feeds RSS e XML tenham sido feitos para serem lidos pela maioria das pessoas, os leitores RSS foram desenvolvidos para fornecer uma interface mais agradável para os humanos lerem os feeds RSS. Agora, os dados RSS e XML brutos são lidos quase exclusivamente com algum tipo de leitor ou interface gráfica. XML ainda está em uso frequente (talvez permanente) em toda a web, mas é mascarado por interfaces gráficas sofisticadas para fornecer uma experiência melhor para os usuários finais.

* O termo " meros mortais " refere-se a humanos que não são programadores


5
Não estou convencido de que tenha tanto a ver com RSS. Por exemplo, nesta especificação XSL (que mais tarde se separou em XPath e outros ) de abril de 1999, "A função position () retorna a posição do nó de contexto na lista de nós de contexto. A primeira posição é 1 e, portanto, a última posição será igual a último (). " Algum "meros mortais" estava usando RDF na corrida até abril de 1999, quando ele foi elaborado?
Matt Gibson,
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.