<!--
  Copyright 2001-2004 The Apache Software Foundation

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!--
This is the Document Type Definition for the Apache Cocoon sample
demonstration "catalog-demo" which explains entity resolution
using catalogs. See the Apache Cocoon documentation
"Entity resolution with catalogs" (catalog.html).
-->

<!ELEMENT catalog-demo (section+)>
<!ELEMENT link (#PCDATA)>
<!ATTLIST link href CDATA #IMPLIED>
<!ELEMENT para (#PCDATA | link)*>
<!ELEMENT section (para+)>
