XML(eXtensible Markup Language)은W3C에서 개발된, 여러 특수한 목적의마크업 언어를 만드는 용도로 권장되는 다목적마크업 언어이다. XML은SGML의 단순화된 부분집합으로, 다른 많은 종류의 데이터를 기술하는 데 사용할 수 있다. XML은 주로 다른 종류의 시스템, 특히인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여HTML의 한계를 극복할 목적으로 만들어졌다.
기계는 인간의 언어를 읽거나 이해할 수 없는 계산기에 불과하므로 XML과 같은 구조화된 마크업 언어들은 인간의 읽고 분석하여 이해하는 능력과 컴퓨터의 단순한 계산적인 판독 능력 사이에 타협점을 만들어 줄 수 있다.W3C가 만든 XML 1.0 Specification[1]과 몇몇 다른 관련 명세들[2]과 모든 자유개방형 표준[3]에서 정의되었다.
W3C는 XML 설계 목표에서 단순성과 일반성, 그리고인터넷을 통한 사용 가능성을 강조했다.[4] XML은 텍스트 데이터 형식으로유니코드를 사용해 전 세계 언어를 지원한다. XML을 설계할 때는 주로 문서를 표현하는데 집중했지만, 지금은 임의의 자료구조를 나타내는 데 널리 쓰인다. 대표적인 예가웹 서비스이다.
많은API가 개발되어 XML 데이터를 처리하고자 하는 소프트웨어 개발자들이 활용하고 있다. 또한, 여러 가지스키마 시스템이 있어서 XML 기반 언어의 정의를 보다 쉽게 할 수 있도록 도와준다.
동적 정보 표시를 위한SGML의 다재다능함은 인터넷의 성장 이전인 1980년대 말에 초기 디지털 미디어 출판사들에 의해 인지되었다.[6][7] 1990년대 중순, 일부 SGML 실천자들은 당시 새로운월드 와이드 웹을 경험하였고 웹이 성장할수록 마주칠 가능성이 있던 문제들 중 일부를 SGML이 해결해줄 것이라 믿었다. 댄 커널리는 1995년 당시 직원으로 있었을 때 SGML을 W3C의 활동 목록에 추가하였다. 작업은 1996년 중순썬 마이크로시스템즈의 엔지니어존 보삭이 선언문을 만들고 협업자들을 모집하였을 때 시작되었다. 보삭은 SGML과 웹에 모두 경험이 있는 사람들의 작은 공동체와 잘 어울렸다.[8]
주요 디자인 결정은 1996년 7월과 11월 사이 도달했으며,[9] 당시 XML 사양의 최초 워킹 드래프트가 출판되었다.[10] 추가 디자인 작업이 1997년에 계속되었으며 XML 1.0은 1998년 2월 10일W3C 권고안이 되었다.
이 절의 내용은 XML 명세에 기반한다. XML에 나타나는 모든 요소의 목록이 아니다. 가장 많이 쓰이는 핵심 요소만을 소개한다.
(유니코드) 문자
정의 상, XML 문서는 문자로 이루어진 문자열이다. 거의 모든 올바른유니코드 문자는 XML 문서에 나타날 수 있다.
프로세서(processor)와 애플리케이션(application)
프로세서는 마크업을 분석하고 구조화된 정보를애플리케이션에 넘긴다. 이 명세는 XML 프로세서가 무엇을 해야 하고 하지 말아야 하는지 제시하지만, 애플리케이션에 대해서는 다루지 않는다. 이 프로세서(명세가 부르기를)는 흔히XML parser라 불린다.
마크업(markup)과 내용(content)
XML 문서를 구성하는 문자들은마크업과내용으로 나뉘는데, 그 구분은 간단한 문법 규칙으로 이루어진다. 일반적으로 마크업을 구성하는 문자열은 문자<로 시작하여 문자>로 끝나거나, 문자&로 시작하여 문자;로 끝나며, 마크업이 아닌 문자열은 내용이다. 그러나CDATA 절에서 구분자<![CDATA[와]]>는 마크업으로 분류되고, 그들 사이의 텍스트는 내용으로 구분된다. 추가로, 가장 바깥 엘리먼트의 앞과 뒤의 공백(whitespace)은 마크업으로 분류된다.
태그(tag)
<로 시작하여>로 끝나는 마크업 구조. 태그는 세 가지 종류가 있다:
시작 태그(start-tag); 예:<section>
끝 태그(end-tag); 예:</section>
빈 엘리먼트(empty-element) 태그; 예:<line-break/>
엘리먼트(element)
문서의 논리 요소로서, 시작 태그로 시작하여 짝이 되는 끝 태그로 끝나거나, 빈 엘리먼트 태그만으로 이루어진다. 시작 태그와 끝 태그 사이의 문자들은(있다면) 엘리먼트의내용이고, 마크업을 포함할 수 있다. 이 마크업은자식 엘리먼트(child elements)라 부르는 다른 엘리먼트들을 포함할 수도 있다. 엘리먼트의 예는<Greeting>Hello,world.</Greeting> (seehello world). 다른 예는<line-break/>.
애트리뷰트(Attribute)
이름/값 짝으로 이루어진 마크업 구조로 시작 태그 또는 빈 엘리먼트 태그 속에 위치한다. 다음 예에서 엘리먼트img는src와alt의 두 애트리뷰트를 갖는다:
<imgsrc="madonna.jpg"alt='Foligno Madonna, by Raphael'/>
유니코드 문자 집합은 저장 또는 전송을 위해 여러 방법으로 부호화될 수 있다("인코딩"). Unicode itself defines encodings that cover the entire repertoire; 잘 알려진 것으로UTF-8과UTF-16이 있다.[11] 유니코드 이전에ASCII나ISO/IEC 8859 같은, 많은 텍스트 인코딩 방식이 있었다. 이들의 문자 집합은 대개 유니코드 문자 집합의 부분집합이다.
XML은 유니코드가 정의한 어떤 인코딩이든 사용하는 것을 허용하며, 문자들이 유니코드에 나타나는 다른 인코딩도 사용할 수 있다. XML은 또한 XML 프로세서가 안정적으로, 사전 지식 없이, 어느 인코딩이 사용되고 있는지 결정하는 메커니즘을 제공한다.[12] UTF-8 또는 UTF-16이 아닌 인코딩은 XML 파서에 인식되지 못할 가능성이 있다.
주석은 다른 마크업의 밖이라면 어디서나 나타날 수 있다. XML 선언 전에는 올 수 없다. "<!--"로 시작하여 "-->"로 끝난다. 문자열 "--" (하이픈 두 개)는 주석 안에서는 허용되지 않는다; 즉 주석은 겹쳐질(nested) 수 없다. 주석 내에서는 앰퍼샌드(ampersand, &)가 특별한 의미를 갖지 않는다. 따라서 엔티티나 문자 참조에 이를 쓸 수 없고, 문서 인코딩에 쓰인 문자 집합 이외의 문자를 주석 내에서는 표현할 방법이 없게 된다.
유효한 주석의 예:"<!-- no need to escape<code>& such in comments -->"
XML 1.0 (Fifth Edition)과 XML 1.1은 거의 모든유니코드 문자의 이름, 애트리뷰트, 주석, 문자 데이터, 처리 명령어에 대한 직접 사용을 지원한다.(XML 자체에 대한 특별한 기호적 의미가 있는, 예를 들어 "<" 같은 문자는 제외). 아래는 잘 구성된(well-formed) XML 문서로한자와키릴 문자를 포함하고 있다:
웰 폼(Well-formed): 웰 폼 문서는 모든 XML의 구문을 허용한다. 예를 들어, 한 요소가 닫기 태그와 자체 닫기 없이 열기 태그를 가지고 있으면, 웰 폼이라고 부르지 않는다. 웰 폼이 아닌 문서는 XML이 된다고 말하지 않는다.순응 파서[13]는 이를 처리하도록 허용하지 않는다.
유효: 유효 문서는 추가적으로 몇 가지 의미적 규칙을 허용한다. 이러한 규칙들은 사용자 정의로 되어 있거나,XML 계획 또는DTD로 포함된다. 예를 들어, 어느 문서가 정의되지 않은 태그를 포함하고 있으면,유효한 것이 아니다.유효화 파서는 이를 처리하도록 허용하지 않는다.
XML 명세는 XML 문서를well-formed 텍스트로 정의한다. 이는 명세에 제공된 문법 규칙들을 만족한다는 뜻이다. 긴 목록 중 핵심을 짚어 보면,
문서는 적절히 인코딩된 올바른(legal) 유니코드 문자만을 포함한다.
<나& 같은 특수 문법 문자 중 어떤 것도, 원래의 마크업 경계 식별 목적 이외의 목적으로 나타나지 않는다.
엘리먼트의 한계를 정하는 시작 태그, 끝 태그, 빈 엘리먼트 태그들은 모두 올바르게, 빠지거나 중복됨이 없이, 겹쳐진다(nested).
엘리먼트의 태그는 대소문자를 구분한다; the beginning and end tags must match exactly. 태그 이름은 다음 문자를 포함할 수 없다!"#$%&'()*+,/;<=>?@[\]^`{|}~. 또 공백 문자도 포함할 수 없으며,-,., 또는 숫자로 시작할 수 없다.
잘 구성됨에 더하여, XML 문서에는 유효성(validity)이라는 것이 있다. 이는 문서가Document Type Definition (DTD)에 대한 참조를 포함하고, 문서의 엘리먼트들과 애트리뷰트들이 그 DTD에 선언되어 있으며 DTD가 명시하는 문법 규칙을 따른다는 것을 의미한다.
XML 프로세서는유효화하는validating 또는유효화하지 않는non-validating으로, 유효성 검증 여부에 따라 분류한다. 유효성 오류를 조사하는 프로세서는 그것을 보고할 수 있어야 하지만, 정상 처리를 계속할 수도 있다.
DTD는schema 또는문법의 예이다. XML 1.0의 초판 발표 이래로, XML을 위한 스키마 언어 분야의 연구가 많이 이루어졌다. 그런 스키마 언어들은 전형적으로 어떤 문서에서 사용되어도 좋은 엘리먼트의 종류, 그 엘리먼트들에 적용되어도 좋은 애트리뷰트의 종류, 나타나는 순서, 허용 가능한 부모-자식 관계 등을 제한한다.
DTD의 후계자로서 W3C에 의해 기술된 새로운 스키마 언어가XML Schema이다. XSD는 DTD보다 XML 언어 기술에 훨씬 강력하다. 더 풍부한데이터타이핑 시스템을 사용하며 XML 문서 논리 구조에 더 세세한 제약을 가할 수 있다. XSD도 XML-기반 형식을 사용하므로, 일반적인 XML 도구로 처리할 수 있다.
↑edited by Sueann Ambron; Kristina Hooper & foreword by John Sculley. (1988).〈Publishers, multimedia, and interactivity〉.《Interactive multimedia》. Cobb Group.ISBN1-55615-124-1.
↑Eliot Kimber (2006).“XML is 10”.《Drmacros-xml-rants.blogspot.com》. 2017년 11월 16일에 확인함.