Extensible Markup Language
XML(Extensible Markup Language)은 W3C에서 다른 특수 목적의 마크업 언어를 만드는 용도에서 권장되는 다목적 마크업 언어이다. XML은 SGML의 단순화된 부분집합이지만, 수많은 종류의 데이터를 기술하는 데 적용할 수 있다. XML은 주로 다른 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어졌다.
XML은 마크업 언어의 일종으로, 문서를 사람과 기계 모두가 읽을 수 있는 형식으로 부호화하는 규칙의 집합을 정의한다. W3C가 만든 XML 1.0 Specification과 몇몇 다른 관련 명세들과 모든 자유 개방형 표준에서 정의되었다.
XML의 설계 목표는 단순성, 일반성, 인터넷을 통한 사용가능성을 강조하였다. XML은 텍스트 데이터 형식으로 유니코드를 통해 전 세계 언어를 지원한다. XML 설계가 문서에 집중하지만, 임의의 자료구조를 나타내는 데 널리 쓰이고 있다. 예를 들어 웹 서비스가 그렇다.
많은 API가 XML 데이터를 처리하는 소프트웨어 개발자를 지원하기 위해 개발되었다. 또한, XML 기반 언어의 정의를 돕기 위한 여러 가지 스키마 시스템이 존재한다.
Header
OR:
Free C or C++ XML Parser Libraries
Free C or C++ XML Parser Libraries |
MSXML, eXpat, TinyXML, Xerces, Arabica, libxml2, libxml++, Xmlio, XmlLite, RapidXml, XMLParser library from Frank Vanden Berghen, PugiXML, libroxml |
Categories
- Simple API for XML (SAX)
- Document Object Model (DOM)
- Extensible Stylesheet Language (XSL)
- XSL Transformation (XSLT)
- XML Path Language (XPath)
- XSL Formatting Object (XSL-FO)
Libraries
Python Libraries
- xmltodict
- xmlschema - An XML Schema validator and decoder
- lxml - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
상관 관계
- eXtensible Markup Language (XML)
- 구조, 데이터, 표현이 분리된 데이터 정의를 위한 언어
- Document Type Definition (DTD) 또는 XML Schema Definition (XSD)
- 데이터는 DTD혹은 XSD에 의해 트리 형태의 XML문서로 표현
- eXtensible Stylesheet Language (XSL)
- 마지막 표현(Description)에 이용된다.
DOM vs SAX
- DOM
- 처음 XML문서를 메모리에 모두 로드한 후 값을 읽는다.
- XML문서가 메모리에 모두 로드되어있기 때문에 노드의 검색, 수정, 구조변경등이 빠르고 용이하다.
- 직관적이고 SAX보다 파싱하기 단순하다.
- Libraries - tinyxml2
- SAX
- XML문서를 순차적으로 읽어들이면서 노드가 열리고 닫히는 과정에서 이벤트가 발생한다.
- XML문서를 메모리에 전부 로딩하고 파싱하는것이 아니라서 메모리 사용량이 적고 단순히 읽기만 할 때 속도가 빠름.
- 발생한 이벤트를 핸들링하여 변수에 저장,활용하는 것이기 때문에 복잡하고, 노드 수정이 어렵다.
- DOM보다 구현이 어렵다.
- 매우 큰 용량의 XML을 다룰 때 유용하다.
- Libraries - expat
Terms
- QName (Qualified Name)
- 자격이 부여된 이름(QNames) QName 은 선택적 네임스페이스 접두부와 로컬 이름으로 이루어집니다.
- e.g. <x:doc>
Pretty print XML
xmllint from libxml2
(On Debian based distributions install the libxml2-utils package)
xml_pp from the XML::Twig perl module
(On Debian based distributions install the xml-twig-tools package)
XMLStarlet
Tidy
Python's xml.dom.minidom
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
python -c 'import sys, xml.dom.minidom; print(xml.dom.minidom.parseString(sys.stdin.read()).toprettyxml())'
saxon-lint
saxon-HE
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
java -cp /usr/share/java/saxon/saxon9he.jar net.sf.saxon.Query \
-s:- -qs:/ '!indent=yes'
xidel
Favorite site
- WWW XML web page
- Wikipedia (en) XML에 대한 설명
- [추천] XML 강좌(XML, DTD, SCHEMA, XPATH, XSTL) 1
- [추천] XML 스키마란 (XSD) 2