XPath의 인덱스가 0이 아닌 1로 시작하는 이유는 무엇입니까?


117

일부 동료와 나는 우리가 프로그램 한 과거의 언어를 비교하고 우리의 경험에 대해 얘기했다 VBScript를 그와 이상한 같은 기능 인덱스 1 기반 대신 0 기반 인덱스가 거의 모든 다른 언어, 추론 그것이을 것을있는 것처럼 개발자 용 언어 대신 사용자 용 언어 (예 : Excel VBA).

그런 다음 누군가가 " XPath에도 1 기반 인덱스가 있습니다 "라고 말했습니다. Michael Kay 자신의 일부를 포함 하여 0 기반 접근 방식을 선호 하는 많은 이유가있는 이 기사 를 발견 할 때까지 믿을 수 없었습니다 .

  • "... 0 기반 인덱싱은 1 차원 배열 액세스 표현식으로 다차원 배열에 액세스 할 때 색인 공식을 더 간단하게 만드는 경향이 있습니다."
  • "테이블을 처리하거나 문자열로 첨자 할 때 0 기반 주소 지정이 훨씬 더 편리합니다."
  • "... 하드웨어 주소 지정은 0 기반 주소 지정의 유일한 이점이 아닙니다. 계산이 더 쉬워집니다 ..."

그러나 Michael Kay는 결론적으로 인용됩니다.

... 1 기반 논리는 XPath 및 XSLT에 적합한 선택이었습니다 ... 언어는 프로그래머가 아닌 사용자를 위해 설계되었으며 사용자는 여전히 책의 첫 번째 장을 장이라고 부르는 구식 습관을 가지고 있기 때문입니다. 하나...

누군가 나에게 그것을 설명 할 수 있습니까? (1) XPath는 사용자를 위해 어떻게 설계 되었습니까? XPath의 구문 적 경직성이나 XSLT의 선언적 / 기능적 프로그래밍 측면과 씨름하는 개발자가 아닌 사람은 상상할 수 없습니다. 및 (2) 왜 정말 XPath에의 창조자는 1부터 시작하는 인덱스를 선택하여 현대적인 프로그래밍 언어의 규범에 갔습니까?


7
같은 기사에서 Michael은 또한 다음과 같은 말로 인용됩니다. "나는 결정의 실제 이력이 무엇인지 말할 수 없습니다. 사후 합리화 만 할 수 있습니다." 그가 모르더라도 만족스러운 대답은 없을 것입니다.
Dirk Vollmar

5
나는이 질문을 주관적이고 논쟁적인 것으로 종결하기로 결정했습니다. 0 기반 인덱싱은 1 기반 인덱싱보다 낫지 않으며 그 반대도 마찬가지입니다. 1 기반 인덱싱은 0 기반 인덱싱보다 낫지 않습니다. 둘 다 장단점이 있습니다. 프로그래머가 아닌 사용자에게는 1 기반 인덱싱이 더 자연 스럽습니다. 또한 범위의 상한을 n매우 부자연스럽지 않고 종종 오류로 이어지는 범위로 지정할 수 있습니다 n - 1. "현대적인 프로그래밍"논리로 인해 왜곡 된 사람에게 1 기반 인덱싱을 사용하기 시작하는 것은 즐겁고 상쾌한 경험이 될 것입니다. :)
Dimitre Novatchev

3
0 기반 인덱스가 여러 가지 이유로 선호되는이 유래 질문 쇼에 대한 답변 : stackoverflow.com/questions/393462/defend-zero-based-arrays
에드워드 Tanguay

9
내 질문은 실제로 프로그래밍을 가르치고 xpath 인덱스에 관한이 질문에 대한 답변을 원하기 때문에 실제로 실제 질문입니다. 가장 좋은 대답은 1 기반 인덱스가 xpath에서 많이 사용되는 position ()에 매핑된다는 것입니다.
Edward Tanguay

64
나는 이것이 합법적 인 질문이며 닫혀서는 안된다고 생각합니다. 그것은 의견의 문제가 아닌 역사적 사실을 요구하며 그 대답은 깨달음을 얻을 것입니다.
Ben Flynn

답변:


30

배열 및 기타 컬렉션 인덱스는 메모리 오프셋을 나타내므로 논리적으로 충분히 0에서 시작합니다. XML 및 XPATH 인덱스는 위치와 개수를 나타내므로 논리적으로 충분히 1부터 시작합니다 (따라서 0은 "빈"을 나타냄).


8

이 질문에 답하려면 일부 기술의 역사를 조사해야합니다.

RSS XML XSLT 및 XPath 기록

RSS 버전 0.9는 원래 Netscape의 my.netscape.com 포털을 위해 Netscape의 두 사람이 1999 년에 RDF Site Summary로 출시했습니다. 그해 말에 v0.91 업데이트를 통해 RSS (Rich Site Summary)로 이름이 변경되었습니다. 프로젝트 개발은 여러 번 바뀌었지만 RSS 버전 1.0은 2000 년 12 월에 출시되었습니다. v1.0 업데이트를 통해 RSS에는 XML 지원이 포함되었습니다.

2002 년에 v2.0은 9 월 RSS (Really Simple Syndication)로 출시되었으며 주요 인터넷 기술로 발전하기 시작했습니다. 초기 역사에서 RSS 피드 (및 포함 된 XML 데이터)는 원시 형식으로 사람이 읽었습니다. 블로그 및 기타 뉴스 소스는 RSS 피드와 XML을 사용하여 지속적으로 업데이트되는 정보를 출력했습니다. XML은 프로그래머가 아닌 사람이 읽기 때문에 XPath와 XSLT도 쉽게 이해할 수 있어야했습니다. 그래야만 XML과 상호 작용할 때 복잡성에 압도되지 않습니다. 이것이 XPath가 최종 사용자가 이미 익숙한 URI 스타일을 모방 한 이유입니다. 사용자의 가독성을 위해 만든 한 가지 양보 중 하나는 0 기반 색인 대신 1 기반 색인과 같은 구식 번호 매기기 기술을 사용하는 것입니다.

RSS 피드와 XML은 대부분의 사람들이 읽을 수 있도록 만들어졌지만 RSS 리더는 사람이 RSS 피드를 읽을 수있는보다 쾌적한 인터페이스를 제공하도록 개발되었습니다. 이제 원시 RSS 및 XML 데이터는 일종의 판독기 또는 그래픽 인터페이스로 거의 독점적으로 읽 힙니다. XML은 웹에서 여전히 자주 (영구적으로) 사용되지만, 최종 사용자에게 더 나은 경험을 제공하기 위해 멋진 그래픽 사용자 인터페이스에 의해 마스킹됩니다.

* ' 단순한 필사자 '라는 용어 는 프로그래머가 아닌 인간을 가리 킵니다.


5
나는 그것이 RSS와 많은 관련이 있다고 확신하지 않는다. 예를 들어 1999 년 4 월 부터이 XSL 사양 ( 나중에 XPath 및 기타로 분리됨 )에서 "position () 함수는 컨텍스트 노드 목록에서 컨텍스트 노드의 위치를 ​​반환합니다. 첫 번째 위치는 1이므로 마지막 위치는 위치는 last ()와 같습니다. " 1999 년 4 월까지 RDF를 사용하는 "단순한 필사자"가 있었습니까?
Matt Gibson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.