There are two criteria for XML-document: well-form and validity. While well-form criteria reflects correct XML-syntax only, validity verifies data described in XML.

In order to check where a document is valid or not it must be bound to a Document Type Definition (DTD) or XML Schema.

Example below shows DTD for our sample XML:

<!-- file: sample.xml -->
<?xml version="1.0"?>

<!DOCTYPE purchase-order [
	<!-- declaration of the root element and its attributes -->
	<!ELEMENT purchase-order (purchased-by, order-items)>
	<!ATTLIST purchase-order
		date   CDATA #REQUIRED
		number CDATA #REQUIRED
	>

   <!ELEMENT purchased-by (address)>
	<!ATTLIST purchased-by
	   name CDATA #REQUIRED
	>
	<!ELEMENT address (#PCDATA)>

	<!-- order-items can contains at least on item -->
   <!ELEMENT order-items (item+)>
	<!ELEMENT item EMPTY>
	<!ATTLIST item
		code  CDATA #REQUIRED
		type  CDATA #REQUIRED
		label CDATA #REQUIRED
	>
]>

<!--
	In order to constrain the contents of XML-document
	a DTD-definition may be used.
	The DTD-definition can be inserted immediately into
	the caption of target XML-file.
-->

<purchase-order date="2005-10-31" number="12345">

	<purchased-by name="My name">
		<address>My address</address>
	</purchased-by>

	<order-items>
		<!--
			here is an example of empty element
			i.e. containing no nested elements
		-->
		<item code="687" type="CD" label="Some music" />
		<item code="129851" type="DVD" label="Some video"/>
	</order-items>

</purchase-order>