S- 표현식 (-ish) 표기법에 비해 XML의 장점은 무엇입니까?


11

XML 및 S- 표현식 (-ish) 표기법에 대해 질문하고 싶습니다. S- 표현은 꽤 오래되었습니다. 그들은 또한 정말 간단합니다. 의미가 같고 구문이 다른 두 가지 형식을 고려할 수 있습니다.

( 폴란드어 위키 백과 에서 가져온 XML 코드 )

<?xml version="1.0" encoding="UTF-8"?>
<ksiazka-telefoniczna kategoria="bohaterowie książek">
 <!-- komentarz -->
  <osoba charakter="dobry">
    <imie>Ambroży</imie>
    <nazwisko>Kleks</nazwisko>
    <telefon>123-456-789</telefon>
  </osoba>
  <osoba charakter="zły">
    <imie>Alojzy</imie>
    <nazwisko>Bąbel</nazwisko>
    <telefon/>
  </osoba>
</ksiazka-telefoniczna>

S- 표현 (-ish) 버전 :

(:version "1.0" :encoding "utf-8")
(ksiazka-telefoniczna :category "bohaterowie książek"
  ; komentarz(a comment)
  (osoba :charakter "dobry"
    (imie Ambroży)
    (nazwisko Kleks)
    (telefon 123-456-789))
  (osoba :charakter "zły"
    (imie Alojzy)
    (nazwisko Bąbel)
    (telefon)))

S-Expression 버전이 훨씬 간결합니다. 간단한 목록 표기법을 사용하여 중복성을 피할 수 있지만 원하는 항목 (예 : 속성)을 포함하도록 구문을 정의 할 수 있습니다. 물론 이것은 단지 예일 뿐이며 실제 표준은 더 좋거나 단순히 다를 수 있습니다. 그러나 더 짧고 구문 분석하기 쉽습니다. 왜 XML이 이겼습니까?



5
downvoters : 질문에 동의하지 않는 경우 downvote하지 말고 품질이 좋지 않다고 생각되면 품질을 개선하기 위해 변경 사항을 제안하십시오. @RobertHarvey 답변이라고 생각되면 의견을 삭제하는 대신 내 질문에 대답하십시오.
MatthewRock

1
downvote 버튼 위의 툴팁에는 "이 질문에는 연구 노력이 표시되지 않습니다"라는 문구가 포함되어 있습니다.
Robert Harvey

1
이 토론 포럼이 아니라는 것을 기억하십시오. 실제 질문에는 답변이 있으며 커뮤니티 회원은 의견이 아닌 답변을 제공해야합니다.
Robert Harvey

1
S- 표현식을 사용하면 XML에 대한 중복 인수 (예 : 여는 괄호 이름의 닫는 대괄호를 갖는 것)를 쉽게 에뮬레이션 할 수 있습니다. 간단히 쓰십시오 (para "This is a paragraph " (footnote "(better than the one under there)" "." /footnote) /para).
Andrew

답변:


13

XML은 SGML을 기반으로하고 SGML에는 S- 표현식 구문 (및 포함 된 스크립팅 언어로 체계)을 사용하는 스타일 시트 언어 DSSSL이 있으므로 XML 디자이너는 S- 표현식에 익숙했습니다.

그럼에도 불구하고 XML 사용 사례로 인해 S- 표현식과 다른 구문을 선택했습니다. XML은 처음에는 기계로 생성 된 구조화 된 데이터와 HTML과 같은 마크 업 언어를 모두 지원하도록 설계되었습니다.이 언어는 수동으로 작성되며 혼합 된 컨텐츠 (텍스트와 메타 데이터가 혼합 된 텍스트)를 포함합니다.

여분

마크 업 텍스트 문서는 종종 화면보다 길다. 당신이 a를보고 )구조의 시작을 볼 수 없다면 , 당신은 꽤 길을 잃었습니다. 당신은 방금 끝난 장 또는 사이드 바인지 알 수 없습니다. XML에서 엔드 태그로 태그 이름을 반복하는 중복성은 </sidebar>인간 작가에게 훨씬 더 쉽습니다. 또한 종료 태그를 실수로 삭제하면 누락 된 종료 태그를 유추 할 수 있습니다.

SGML (XML 이전 버전)에서는 선택적으로 엔드 태그를 단일 문자로 단축 할 수 있었지만이 기능은 단순성을 위해 XML에서 제외되었습니다.

간단히 말해서 XML은 사람이 편집 할 수있는 문서를 지원하도록 설계 되었기 때문에 설계 상 더 장황합니다. 오늘날 XML은이 중복성이 필요하지 않은 순수한 기계 간 통신을 위해 다양한 목적으로 사용됩니다.

혼합 컨텐츠

제안 된 구문은 혼합 컨텐츠를 잘 지원하지 않습니다. HTML로이 예제를 보자 :

<p>Hi! <a href="example.com">Click here</a>!</p>

이것을 구문으로 어떻게 표현 하시겠습니까? 속성과 텍스트 내용을 구별하려면 일종의 추가 구분 기호가 필요합니다. 갑자기 더 이상 간결하지 않습니다.

특수 문자

꺾쇠 괄호는 일반 텍스트에서 괄호와 콜론보다 훨씬 드 rare니다.

적합성

XML이 디자인 될 당시 HTML은 이미 대단한 성공을 거두었으며 유사한 구문을 선택하는 것이 합리적이었습니다.

왜 XML이 이겼습니까?

S 표현은 결코 XML의 대안이 아니었다. XML 사양은 꺾쇠 괄호 그 이상입니다. 요소 및 속성 및 혼합 컨텐츠, 이스케이프, 문자 인코딩, DTD 구문 및 유효성 검증 등에 대한 구문을 정의합니다. s- 표현식에는 비슷한 것이 없습니다. 물론 여기에서 제안한대로 유사한 표준을 정의 할 수 있지만 당시에는 아무도이를 수행하지 않았습니다. XML은 W3C의 축복을 받아 주요 업체들에 의해 채택되어 사실상 데이터 교환의 표준이되었습니다.


3
그의 예제에서 콜론은 속성에 사용되지 않습니까? 예 : (p Hi! (a : href "example.com"여기를 클릭하십시오)!)? (또는 그는 귀하의 답변이 게시 된 후 바로 편집 했습니까?)
Headcrab

그것은 당신의 (우수한) 답변에서 멀어지지 않지만, 올바른 생각 으로 누가 수동으로 XML 문서를 작성합니까?
러드 스미스

Jacques,이 훌륭한 답변에 감사드립니다! 혼합 콘텐츠는 문제가되지 않는다는 Headcrab에 동의합니다. XML을 수동으로 읽고 쓰는 경우도 있지만 Jared에 동의합니다.
MatthewRock

@Headcrab : 실제 사양이없고 가설적인 예이므로 말하기 어렵습니다. 그러나 텍스트를 인용 된 문자열이 아닌 기호로 표시하면 공백이 모호해질 수 있습니다. S- 표현식은 원자 AFAIK 사이에 큰 공백을 지원하지 않지만 <PRE>HTML 의 요소 를 지원하려면이를 필요로합니다 . 그래서 따옴표가 필요하다고 생각했습니다.
JacquesB

2
따라서 XML은 이러한 모든 종과 휘파람과 친숙한 HTML과 유사한 구문으로 만들어져 당시 s- 표현을 극복하는 데 도움이되었습니다. 많은 개발자들이 유스 케이스에서 이러한 모든 기능이 머신 간 통신에 실제로 필요하지 않다고 결정했을 때 JSON 형식의 다른 경량 대안이있었습니다.
kamilk

9

개인적으로 XML에서 가장 중요한 부분은 구문이 아니라 잘 정의 된 스키마 기능이라고 생각합니다. 스키마 메커니즘을 통해 사용자는 문서 형식을 게시하여 유효한 문서로 간주하는 내용을 공유 할 수 있습니다. 자동 유효성 검사기도 있습니다. 또한 한 사용자가 만든 유형과 스키마는 다른 사용자가 확장 할 수 있습니다.

내가 아는 한, LISP 언어 자체 (OP의 질문에서 샘플을 사용하지 않는)를 제외하고는 s- 표현을위한 범용 스키마 메커니즘을 표준화하려는 노력 근처에 아무도 만들지 않았습니다.


1
XML의 자세한 설명을 싫어하지만 거의 가치가있는 스키마 기능을 언급 한 것에 대해 +1입니다. :-)
user949300


1

"S-expression-ish"보다 XML을 선택해야하는 두 가지 이유는 다음과 같습니다.

잘 정의 된 구문 및 의미 론적 모델

XML은 단순히 노드 트리가 아니라 구문 표현과 동작이 다른 분류 된 노드 트리입니다 . 예를 들어, 지정된 이름의 속성은 주어진 노드에 대해 한 번만 나타날 수 있지만 자식 노드는 여러 번 나타날 수 있습니다.

일반 S- 표현식 위에 이러한 모델 정의 할 수 있습니다. 귀하의 예는 속성 및 하위 요소를 분류하기위한 체계를 보여줍니다. 텍스트, 주석 및 처리 지침에 대한 의미를 추가하면 XML과 동형 인 것이 있습니다.

압형

표준 구문 및 의미 론적 모델에서 도구를 작성할 수 있으며 많은 사람들이 가지고 있습니다. 모든 공통 언어 / 플랫폼에 대해 XML 파서 / 시리얼 라이저, XPath 및 XSLT 프로세서 형식을 찾을 수 있습니다. 또한 모든 플랫폼에서 동일한 방식으로 작동한다는 것을 알고 있습니다.


다음은 고려해야 할 몇 가지 사항입니다.

큰 계획에서 XML은 그다지 장황하지 않습니다.

귀하의 예에서 실제로 무엇을 제거 했습니까? 내가 읽을 때, 당신은 :

  • 각 표현식에 대한 닫는 태그를 제거했습니다.
  • >일반적으로 여는 태그를 자식과 분리 하는 것을 제거했습니다 .
  • 자식이 속성임을 나타 내기 위해 =속성 이름과 값을 a :로 구분 하는를 대체했습니다 . 저축이 없습니다.

XML의 내부 및 외부 표현이 매우 다르다는 것을 인식하는 것도 중요하다고 생각합니다. 내부적으로 XML 트리는 매우 컴팩트합니다. 다양한 요소가 이미 분류되어 있기 때문에 조작하는 것이 매우 효율적입니다. 외부 적으로는, 예, 닫는 태그가 모두 있지만 압축이 잘됩니다.

"verbosity"가 실제 문제입니까?

실제 질문은 XML이 "자세한"지 여부가 아니라 주어진 목적에 필요한 것보다 표현력이 있는지 여부입니다. 몇 가지 예 :

  • 요소가 속성을 보유 할 수있는 기능으로, 의미 적으로 하위 요소와 다릅니다. 요소 내용의 기본 데이터 유형 설명과 같은 대역 외 정보에 유용합니다. 그러나 외부 사양이 내용을 정의하기 때문에 필요하지 않을 수도 있습니다.
  • 요소가 하위 요소와 텍스트 (주석 및 처리 지침)를 모두 보유 할 수있는 혼합 컨텐츠. 마크 업에는 유용하지만 단순한 데이터 표현에는 유용하지 않습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.