왜 XML이 "언어"라고 불리는가?


105

왜 XML에 이름에 L이 있는지 궁금합니다.

XML 자체는 아무것도 "하지"않습니다. 언어가 아닌 데이터 저장 형식 일뿐입니다! 언어는 "할 것"입니다.

XML을 적절한 언어로 전환하기 위해 XML을 사용하는 방법 xmlns은 루트 요소에 속성을 추가하는 것입니다. 그런 다음에 만 환경에 대해 알려줍니다.
한 가지 예는 XHTML입니다. 활성화되어 있으며 링크, 하이퍼 텍스트, 스타일 등이 모두에 의해 트리거됩니다 xmlns. 이것이 없으면 XHTML 파일은 마크 업 노드에있는 많은 데이터 일뿐입니다.

그렇다면 왜 XML이 언어라고 불리는가? 그것은 아무것도 묘사하지 않고 해석하지 않으며 단지 있습니다.

편집 : 아마도 내 질문이 더 넓었을 것입니다. 대답은 현재 "GML의 이름을 딴 SGML의 이름을 따서 XML이 되었기 때문에"라는 질문이 있기 때문에 왜 마크 업 언어 (XML과 같은)가 언어라고합니까?

아, 그리고 WRT 폐막 투표 : 아니오, 나는 X에 대해 묻지 않습니다. 나는 L에 대해 묻고 있습니다!


128
언어가 무엇인가를 "해야"한다는 요구 사항을 무엇에 기초하고 있습니까? dictionary.com 의 정의에서 볼 수 없습니다 .
kdgregory

10
Swahili와 마찬가지로 둘 다 이해하는 경우에만 이해됩니다. 또는 독자가 언어의 해당 부분을 이해하면 의학 저널 기사가 이해됩니다. 다르지 않습니다. 그리고 사람들은 정의를 구성합니다.
Sami Kuhmonen

42
마크 업 언어는 일반적인 용어 en.wikipedia.org/wiki/Markup_language
paparazzo

37
@MrLister : "그들은 컴퓨터 언어가 아니라 인간 언어입니다" 언어는 언어입니다. 가장 극단적으로, 영어조차도 모호하지 않게 이해하기 위해 상황 정보 (사용되는 방언)가 필요합니다. 언어가되는 것을 막지 않습니다. 귀하의 질문에는 단순히 잘못된 전제가 있습니다.
궤도에서 가벼움 경주

68
언어 일을 하지 않고 , 표현 하고 의사 소통 을합니다
Hagen von Eitzen

답변:


238

Raymond L orie 라는 사람 이 1970 년대 IBM의 첫 "마크 업 언어"의 디자이너 중 하나 였기 때문에 XML의 이름은 L입니다 . 개발자는 언어의 이름을 찾아야 GML 을 선택했습니다. 왜냐하면 GML 은 세 개발자 (Goldfarb, Mosher 및 Lorie)의 이니셜이기 때문입니다. 그런 다음 Backronym Generalized Markup Language (일반화 된 마크 업 언어) 를 만들었습니다 .

나중에 SGML ( Standardized General Markup Language )로 표준화 되었으며 , XML을 만들 때 개발자는 ML- 접두사를 유지하여 SGML과의 가족 관계를 나타내기를 원했으며 X가 멋진 것처럼 보이기 때문에 X를 앞에 추가했습니다. (실제로 이해가되지 않더라도 XML은 확장 가능한 언어를 정의 할 수있는 메타 언어이지만 XML 자체는 확장 가능하지 않습니다.)

XML을 합법적으로 언어라고 할 수 있다면 두 번째 질문은 다음과 같습니다.

계산적으로 처리 될 수있는 구조화 된 텍스트 (또는 이진) 형식을 언어라고 할 수 있습니다. 언어는 그와 같은 것을 "하지"않지만, 일부 소프트웨어는 언어로 입력을 처리하고 그에 따라 무언가를 "할"수 있습니다.

XML은 "스토리지 형식"이지만, 텍스트 저장 형식을 언어라고 할 수 있습니다. 이러한 용어는 상호 배타적이지 않습니다.

프로그래밍 언어는 언어의 하위 집합입니다. 예를 들어 HTML과 CSS는 언어 이지만 프로그래밍 언어 는 아니지만 JavaScript는 실제 프로그래밍 언어입니다. 즉, 프로그래밍 언어에 대한 공식적인 정의는 없으며 관점에 따라 데이터 형식 또는 프로그래밍 언어라고 할 수있는 언어의 큰 회색 영역이 있습니다.

이를 감안할 때 XML은 분명히 언어입니다. XSLT와 같은 프로그래밍 언어를 정의하는 데 사용할 수 있지만 프로그래밍 언어 는 아닙니다 .

네임 스페이스에 대한 요점은 관련이 없습니다. 네임 스페이스는 XML의 선택적 기능이며 XML 어휘의 의미를 변경하지 않습니다. 형식에 여러 어휘가 포함될 수있는 경우 요소 이름을 명확하게 지정하면됩니다.


편집 : reinierpost는 당신이 내가 이해 한 것과 다른 질문을 의미했을 수도 있다고 지적했습니다. 어쩌면 당신은 XHTML, RSS, XSLT 등과 같은 특정 어휘가 요소와 속성을 특정 의미와 연관시키기 때문에 언어이지만 XML 표준 자체는 특정 요소와 속성에 대한 의미를 정의하지 않기 때문에 " 실제 언어 ".

이것에 대한 나의 대답은 XML 구문과 의미를 모두 정의하고 다른 수준에서 정의한다는 것입니다. 예를 들어 요소 및 속성의 구문과 처리 방법에 대한 규칙을 정의합니다. XML은 메타 데이터가 여전히 데이터 인 것처럼 여전히 일종의 언어 인 "메탈 언어"입니다. 예를 들어 EBNF 는 분명히 언어이지만 다른 언어의 구문을 정의하는 것이므로 금속 언어이기도합니다.



19
@Snowman : "공식 언어"가 반드시 컴퓨팅에서 일반적으로 언어라고하는 것과 반드시 ​​일치하는 것은 아닙니다. 예를 들어 "공식 언어"는 텍스트 일 ​​필요는 없습니다. 기계 코드는 대부분의 이진 형식 및 프로토콜과 마찬가지로 공식 언어입니다. 따라서 "공식 언어"라는 용어는 컴퓨팅에서 "언어"와 동일한 의미를 포함한다고 말하지 않습니다.
JacquesB

15
언어가 텍스트이거나 텍스트가 아니어야한다는 요구 사항을 알고 있지 않습니다. 터미널에서 문장을 구성한다는 아이디어는 터미널에서 비트를 임의로 해석하거나 어떤 유형의 컴퓨터 (실리콘 또는 탄소 기반)에서 읽을 수 있는지와 아무 관련이 없습니다.

4
@NicolBolas : 좋은 지적은, 머신 코드는 확실히 언어입니다. 이진 언어를 "포맷"이라고 부르는 것이 더 일반적이라고 생각합니다. 예를 들어 GIF 언어가 아닌 GIF 형식을 말합니다.
JacquesB

3
@ BenCottrell : 루프가있을 수 있기 때문에 그래프가 아닐까요?
JacquesB

181

언어이기 때문에. 마크 업 언어가 아니라 프로그래밍 언어.

영어 나 스페인어와 같은 자연의 인간 언어도 아무 것도하지 않습니다. 실제로 기술적으로 C ++ 및 Java 등은 컴파일러에 공급되어 출력이 실행될 때까지 아무것도하지 않습니다. 일을하고 언어를하는 것은 서로 직교합니다.


43
"컴파일러"대신 "인터프리터"를 사용하십시오. 컴파일러에 공급된다고해서 아무것도 "하지"않고, 다른 언어로도 번역 할뿐 아니라 "하지"않습니다. 모든 처형은 해석입니다. 때때로 인터프리터는 매우 단순하고 실리콘으로 구현 될 수 있는데,이 경우 "실행 단위"라고 부르지 만 여전히 인터프리터입니다. </nitpick>어쨌든 좋은 대답입니다!
Jörg W Mittag

8
@ JörgWMittag 좋은 지적입니다. 일반적으로 컴파일되는 언어를 무작위로 선택 했으므로 "및 출력이 실행됩니다".
Ixrec

1
확장 마크 업 언어, 만약에 당신.
doppelgreener

1
나는 인간의 언어가 "할"일을한다고 주장한다. 말하기 행위 이론을보십시오…
Ray

2
달콤하고 달콤한 직교성. 다른 대수로 언어를 실행하면 완전히 새로운 행동이 전개됩니다. 어쨌든 이론 상으로는.
Kenogu Labz

103

Σ를 알파벳 이라고 부르는 비어 있지 않은 유한 한 기호 집합이라고하자 . 그런 다음 Σ *는 Σ에서 0 개 이상의 기호를 연결하여 형성 할 수있는 무한한 유한 단어 집합입니다. 잘 정의 된 부분 집합 L ⊆ Σ *는 언어 입니다.

이것을 XML에 적용하자. 알파벳은 유니 코드 문자 집합 U 이며 비어 있지 않고 유한합니다. 0 개 이상의 유니 코드 문자로 구성된 모든 연결이 올바른 형식의 XML 문서 인 것은 아닙니다 (예 : 문자열).

<tag> soup &; not <//good>

분명히 아닙니다. 올바른 형식의 XML 문서 를 구성 하는 하위 집합 XML ⊂ U * 는 결정할 수 있습니다 (또는 "재귀 적"). 단어 wU * 를 입력으로 사용 하고 한정된 시간 후에 w ∈ XML 이면 1을 출력 하고 그렇지 않으면 0을 출력 하는 기계 (알고리즘 또는 컴퓨터 프로그램)가 있습니다. 이러한 알고리즘은 모든 XML 처리 소프트웨어의 하위 루틴입니다. 모든 언어가 결정 가능한 것은 아닙니다. 예를 들어, 유한 한 시간 안에 종료되는 유효한 C 프로그램 세트는 그렇지 않습니다 ( 정지 문제 라고 함).). 새로운 언어를 디자인 할 때, 결정을 내리는 것이 가능한 한 강력해야하는지 또는 표현력이 결정 성을 더 잘 제한 할 것인지 결정해야합니다.

일부 언어는 언어 를 생성 한다고 하는 문법 을 통해 정의 할 수 있습니다 . 문법은

  • 유한 리터럴 세트 ( 터미널 심볼 이라고도 함 )
  • 문법 의 분리 된 유한 변수 세트 ( 비 터미널 기호 라고도 함 )
  • 변수 세트에서 가져온 고유 한 시작 기호
  • 특정 종류의 교체를 허용 하는 유한 규칙 세트 (소위 프로덕션 )

리터럴로만 구성되고 시작 기호로 시작한 다음 주어진 규칙을 적용하여 파생되는 모든 단어는 문법으로 생성 된 언어에 속합니다.

예를 들어 다음 문법 (비공식 표기법)을 사용하면 정확히 10 진수 표기법으로 정수를 도출 할 수 있습니다.

  1. 문법의 리터럴은 숫자입니다 1, 2, 3, 4, 5, 6, 7, 8, 9,와 0.
  2. 변수는 기호 SD 입니다.
  3. S 는 시작 기호입니다.
  4. 변수 S의 발생은 대체 될 수 있습니다
    • 문자 그대로 0또는
    • 0변수 D 이외의 다른 리터럴이 있습니다.
  5. 변수 D의 발생은 대체 될 수 있습니다
    • 리터럴 뒤에 변수 D 의 다른 인스턴스가옵니다. 또는
    • 빈 문자열로.

우리가 도출하는 방법은 다음과 같습니다 42.

S — (규칙 4, 2 변형 적용 ) → 4 D — (규칙 5, 1 변형 적용 ) → 42 D — (규칙 5, 2 변형 적용 ) → 42.

문법에서 얼마나 정교한 규칙을 허용 하느냐에 따라 문법으로 주어진 단어가 실제로 생성 될 수 있음을 증명하기 위해 다르게 정교한 기계가 필요합니다. 위에 주어진 예제 는 가장 단순하고 가장 강력한 정규 문법입니다. 다음으로 강력한 문법 클래스를 컨텍스트 프리 라고 합니다. 이 문법은 확인하기 매우 간단합니다. XML (내가 모르는 모호한 기능을 간과하지 않는 한)은 문맥이없는 문법으로 설명 할 수 있습니다. 문법의 분류는 Chomsky Hierarchy of grammars (따라서 언어)를 형성합니다. 문법으로 설명 할 수있는 모든 언어는 최소한 반 결정 가능(또는 "재귀 적으로 열거 가능"). 즉, 실제로 언어에 속하는 단어가 주어지면 유한 시간 내에 문법으로 생성 할 수 있다는 증거를 도출하고 잘못된 증거를 출력하지 않는 기계가 있습니다. 이러한 기계를 검증기 라고합니다 . 실제로 언어에 속하지 않는 단어가 주어지면 기계가 멈추지 않을 수 있습니다. 우리는 유한 한 시간 내에 무효 한 프로그램을 거부 할 수있는 장점을 위해 덜 강력한 문법으로 프로그래밍 언어를 설명하기를 원합니다.

스키마 는 XML에 추가 된 것으로서 올바른 형식의 문서 세트를 구체화 할 수 있습니다. 특정 스키마를 따르는 올바른 형식의 문서 를 해당 스키마에 따라 유효하다고합니다 . 예를 들어, 문자열

<?xml version="1.0" encoding="utf-8" ?>
<root>all evil</root>

올바른 형식의 XML 문서이지만 유효한 XHTML 문서는 아닙니다. XHTML , SVG , XSLT 및 그 밖의 것에는 스키마가 있습니다 . 모든 입력에 대해 유한 한 단계 후에 정지되도록 보장하는 알고리즘으로 스키마 유효성 검사를 수행 할 수도 있습니다. 이러한 프로그램을 유효성 검사기 또는 유효성 검사 파서 라고합니다 . 스키마는 문법을 공식적으로 정의하는 방법 인 소위 스키마 정의 언어로 정의됩니다 . XSD 는 XML의 공식 스키마 정의 언어이며 XML 자체입니다. RELAX NG 는 XSD에 대한보다 우아하고 훨씬 단순하고 약간 덜 강력한 대안입니다.

고유 한 스키마를 정의 할 수 있으므로 XML을 확장 가능한 언어 라고하며 , 이는 "XML"에서 "X"의 원점입니다.

컴퓨터 프로그램에 대한 설명으로 XML 문서에 해석을 제공하는 규칙 세트를 정의 할 수 있습니다. 앞에서 언급 한 XSLT는 XML로 작성된 프로그래밍 언어의 예입니다. 더 일반적으로, 원하는 경우 거의 모든 프로그래밍 언어의 추상 구문 트리를 XML로 자연스럽게 직렬화 할 수 있습니다.


7
@Giorgio : 수학에서 "잘 정의 된"은 크게 강화제입니다. 수학적으로 존재하는 모든 것은 이미 잘 정의되어 있습니다.
Kevin

9
@Giorgio“잘 정의 된”이라는 용어는 아이템이 세트에 속하는지 아닌지를 알려주는 공식 술어가 있음을 의미합니다. 이 술어는 일반적으로 계산할 수 없지만 모순없이 명확하게 지정해야합니다. 그렇지 않으면 나쁜 일이 발생할 수 있습니다 . "문자열 쌍 ( w , M ), 여기서 Mw 를 출력 한 다음 정지 하는 Turing 기계에 대한 가장 작은 설명입니다 "는 잘 정의되어 있지만 계산할 수없는 ( Kolmogorov 복잡도 참조 ) 술어입니다. …
5gon12eder

2
@ 5gon12eder : ZFC에는 해당 세트가 존재하지 않습니다 (분리의 공리 스키마가 설명하기에 충분히 강력하지 않기 때문에). 다른 세트 이론을 사용하는 경우이를 지정해야합니다.
Kevin

5
@ 5gon12eder : "세트에 포함되지 않은 모든 문자열을 포함하는 세트"가 없습니다. "잘 정의 된"이라는 용어는 아이러니하게 정의되지 않았습니다.
Kevin

3
잘 형성 특성 또는 유효성을 a로 수행되는 문법 . 당신이 그것을 언급했다면이 대답은 완벽했습니다.
Thibault D.

31

컴퓨터 과학에서 형식 언어 는 단지 일련의 문자열로, 대개 무한하며 규칙을 사용하여 설명됩니다 (이 규칙의 두 가지 공통 버전은 정규식공식 문법입니다 ).

이것은 모든 언어 요구가 구문 이라는 것을 의미하며 , 언어는 각 유효한 문자열의 의미를 의미 할 필요가 없습니다 (즉, 의미론 이라고 함 ).

이제 이것은 프로그래밍 언어가 의미를 가진 공식 언어이며 일부 계산을 설명합니다. 예를 들어 XHTML은 형식적 언어이며, 그 의미론은 하이퍼 텍스트 문서의 모양과 동작을 (대략 비공식적으로) 설명합니다.

XML 자체는 의미 자체가 없지만 여전히 언어입니다 (하지만 XHTML 및 XAML과 같은 XML에서 파생 된 많은 언어).

기술적으로 이진 형식은 언어이지만 그렇게 부르지는 않습니다. "언어"라는 용어는 사람이 읽을 수있는 형식으로 사용됩니다.


10
@MrLister 사람이 읽을 수 없기 때문입니다. 그것들이 사람이 읽을 수 없을 때는 대신 형식 또는 데이터 형식 이라고 부르는 경향이 있습니다 .
메이슨 휠러

3
@JamesSnell 물론 다른 ML 언어 제품군과 혼동하지 마십시오. 붐비는 두문자어!
메이슨 휠러

3
JFIF 등을위한 파서 (또는 특히 유효성 검사기)를 구축하기 위해 공식적인 도구를 사용하는 경우 엔지니어는 실제로이를 "언어"라고 할 수 있습니다. "문법"일 가능성이 높습니다.
JDługosz

3
@MrLister : 언어 언어이지만 재사용 가능한 데이터 구조를 정의하기 때문에 특수한 이름을 가진 형식이 있습니다 . 그러나, 이것도 언어입니다.
궤도에서 가벼움 레이스

4
@MrLister : 형식 이름 지정은 마케팅의 문제입니다. "* ML"은 GML 및 SGML과 같은 이전 형식과의 가족 관계를 나타내며 X가 앞에있는 것이 멋지다고 생각했기 때문에 XML을 XML 용 XML이라고했습니다. 그리고 GML은 일반화 된 마크 업 언어 였기 때문에 GML이라고 불 렸으며 또한 3 개의 언어 디자이너의 초기이기도했기 때문입니다. XML의 L은 기본적으로 Raymond L orie 라는 사람 이 첫 번째 마크 업 언어의 디자이너 중 하나 였기 때문 입니다.
JacquesB

12

언어는 정보를 전달하는 방법입니다.

프로그래밍 언어는 알고리즘을 전달하는 방법입니다.

XML과 같은 마크 업 언어는 데이터를 전달하기위한 언어입니다.


... 그리고 그 데이터는 알고리즘에 대한 설명 일 수 있습니다.
Luaan

@Luaan ... 그리고 프로그래밍 언어는 데이터를 전달하기 위해 남용 될 수도 있습니다. 예를 들어 JSON과 마찬가지로.
Philipp

2
재귀도 가능합니다. 데이터 저장에만 사용되는 C # 코드가 포함 된 NAnt 스크립트 (XML 기반 언어)를 보았습니다. XML이 포함 된 문자열 리터럴 사용 그렇습니다, 그것은 어른들을 울게 만드는 종류의 일입니다. : P
Luaan

2

XML은 메타 언어입니다. 특정 언어를 정의하는 데 사용합니다. 언어는 아무것도하지 않으며 단지 우리가 표현할 수있게 해줍니다. 또한 XML이 "저장 언어"라는 것은 사실이 아닙니다. 사실 그 반대입니다. 그러나 XML 문서는 저장할 수 있습니다. XML은 전송 언어로 생각하는 것이 좋습니다. 추신. XML이 아무것도하지 않는다고 생각한다면, 많은 시스템 (예 : 부두)이 XML을 (나쁜) 프로그래밍 언어로 사용하는 방법을 설명해야합니다. XML에 대한 욕설은 남용이지만, 실제로 존재하며 많은 사례 중 하나 일뿐입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.