XML(eXtensible Markup Language)은 형식 규칙이 엄격하며, XML 파서는 올바른 형식(well-formed) 문서의 규칙을 어기는 모든 부분을 보고해야 합니다. 문서는 아래의 모든 제약을 만족할 때 올바른 형식입니다.
XML 문서는 문자 데이터나 다른 요소를 담는 요소(element)로 구성됩니다. 요소의 시작 태그에는 속성(attribute)을 선언할 수도 있습니다. 다음 문서를 살펴봅시다.
<?xml version="1.0"?>
<customer>
<name>
<first>John</first>
<last>Doe</last>
</name>
<address>
<street>
<number>15</number>
<direction>West</direction>
<name>34th</name>
</street>
<city>New York</city>
<state-code>NY</state-code>
<zip-code format="PLUS4">10001-0001</zip-code>
<country-code>USA</country-code>
</address>
<orders/>
</customer>
꺾쇠괄호 안의 식별자가 문서의 요소입니다. zip-code 요소에서 format은 속성입니다. orders를 제외한 모든 요소는 시작 태그와 끝 태그를 함께 가집니다. orders는 빈 요소(empty element)로, 끝의 />가 요소를 닫으므로 별도의 끝 태그가 필요 없습니다. 첫 번째 줄은 파서를 위한 처리 명령이며 요소가 아닙니다.
문서는 다음 규칙을 모두 지킬 때에만 올바른 형식입니다.
customer가 루트입니다.<address>로 연 요소는 </address>로 닫아야 합니다.address 요소 안에 또 다른 address 요소를 넣을 수 없습니다.입력은 여러 개의 XML 문서로 이루어집니다. 각 문서는 처리 명령 <?xml version="1.0"?>만 담긴 줄로 시작합니다. 입력의 끝은 <?end?>만 담긴 줄로 표시되며, 이는 입력의 끝을 나타내는 표지일 뿐 실제 XML 처리 명령이 아닙니다. 모든 XML 문서와 마찬가지로 요소와 속성 사이의 공백은 무시합니다. 다음을 가정할 수 있습니다.
<Address>와 <address>는 서로 다릅니다.-)만 사용됩니다.각 XML 문서마다 한 줄씩 출력합니다. 문서가 올바른 형식이면 well-formed를, 그렇지 않으면 non well-formed를 출력합니다. 문서가 나온 순서대로 판정을 출력합니다.