<!-- 속성은 원소에서 단 한 번만 나타날 수 있습니다. 속성은 단 하나의 값만 갖습니다.
이에 대한 흔한 해결책은 공백으로 구분된 리스트를 포함하는 것입니다. -->
<!-- 중첩 요소 -->
<!-- 한 요소의 내용은 다른 요소들을 포함할 수 있습니다. -->
<parent>
<child>Text</child>
<emptysibling/>
</parent>
<!-- 표준적인 트리 명칭이 사용됩니다. 각각의 요소는 노드라고 부릅니다.
한 단계 위의 조상은 부모이며, 한 단계 아래의 후손은 자식입니다.
같은 부모 요소를 가진 요소들은 자매입니다. -->
<!-- XML은 공백을 보존합니다. -->
<child>
Text
</child>
<child>Text</child>
<!-- 둘은 같지 않습니다. -->
```
## XML 문서
XML이 유용한 것은 인간도 읽을 수 있다는 것입니다. 다음의 문서는 에릭 레이의 XML 배우기를 포함해 세 권의 책을 파는 서점을 정의한다는 것을 알 수 있습니다. XML 파서 없이도 이렇게 쉽습니다.
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- XML 프롤로그라는 것입니다. 필수는 아니지만, 권장됩니다. -->
<bookstore>
<bookcategory="COOKING">
<titlelang="ko">매일 이탈리아 요리</title>
<author>지아다 데 라우렌티스</author>
<year>2005</year>
<price>30.00</price>
</book>
<bookcategory="CHILDREN">
<titlelang="ko">해리 포터</title>
<author>J K 롤링</author>
<year>2005</year>
<price>29.99</price>
</book>
<bookcategory="WEB">
<titlelang="ko">XML 배우기</title>
<author>에릭 레이</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
```
## 적격성과 유효성
XML 문서는 문법적으로 정확할 경우 *적격*합니다. 하지만 문서 유형 정의(DTD)를 이용하여 문서에 제약을 더 추가할 수 있습니다. 한 문서의 요소와 속성이 DTD 안에 정의되어 있고 그 파일에 특정된 문법을 따른다면 *적격*할 뿐만 아니라 그 DTD에 대하여 *유효*하다고 말합니다.
```xml
<!-- DTD를 외부에 선언: -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookstore SYSTEM "Bookstore.dtd">
<!-- bookstore가 루트 요소이며 'Bookstore.dtd'가 DTD 파일의
경로임을 선언합니다. -->
<bookstore>
<bookcategory="COOKING">
<titlelang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
</bookstore>
<!-- DTD 파일 -->
<!ELEMENT bookstore (book+)>
<!-- bookstore 요소는 하나 이상의 book 요소를 자식으로 가질 수 있습니다. -->
<!ELEMENT book (title, price)>
<!-- 각각의 book은 title과 price를 자식으로 반드시 갖습니다. -->
<!ATTLIST book category CDATA "Literature">
<!-- book은 category 속성을 가져야 합니다. 그렇지 않다면 그 기본값은 'Literature'입니다. -->
<!ELEMENT title (#PCDATA)>
<!-- title 요소는 반드시 PCDATA만 포함해야 합니다. 즉,
파서가 읽을 텍스트만을 포함해야 하며 자식을 포함할 수 없습니다.
CDATA와 비교해 보세요. -->
<!ELEMENT price (#PCDATA)>
]>
<!-- DTD는 XML 파일 안에 선언될 수도 있습니다. -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookstore [
<!ELEMENT bookstore (book+)>
<!ELEMENT book (title, price)>
<!ATTLIST book category CDATA "Literature">
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<bookstore>
<bookcategory="COOKING">
<title>Everyday Italian</title>
<price>30.00</price>
</book>
</bookstore>
```
## DTD 호환성과 XML 스키마 정의
DTD는 오래되었기 때문에 지원이 광범위합니다. 불행히도 네임스페이스와 같은 현대적 XML 기능은 DTD에서 지원하지 않습니다. XML 스키마 정의(XSD)가 XML 문서의 문법을 정의하기 위한 DTD의 대체재입니다.
## Resources
* [(영어) Validate your XML](http://www.xmlvalidation.com)
## Further Reading
* [(영어) XML 스키마 정의 튜토리얼](http://www.w3schools.com/xml/xml_schema.asp)