dtd-0.4.1: Parse and render DTD files

MaintainerYitzchak Gale <gale@sefer.org>
Safe HaskellSafe-Infered




This module provides types to represent an XML Document Type Declaration (DTD) as defined in W3C specifications (http://www.w3.org/XML/Core/#Publications). It is intended to be compatible with and extend the set of types in Data.XML.Types provided by the xml-types package.

Following the philosophy of Data.XML.Types, the types in this module are not intended to be a strict and complete representation of the model in the W3C specifications; rather, they are intended to be convenient and type-safe for the kinds of processing of DTDs that are commonly done in practice. As such, this model is compatible with both Version 1.0 and Version 1.1 of the XML specification.

Therefore, these types are not suitable for type-level validation of the syntax of a DTD. For example: these types are more lenient than the specs about the characters that are allowed in various locations in a DTD; entities of various kinds only appear as distinct syntactic elements in places where they are commonly needed when processing DTDs; etc.

Conditional sections are not represented in these types. They should be handled directly by parsers and renderers, if needed.


DTD structure

data DTD Source

A DTD is a sequence components in any order.


data DTDTextDecl Source

The ?xml text declaration at the beginning of a DTD.



data DTDComponent Source

The kinds of components that can appear in a DTD.


DTDEntityDecl EntityDecl

Entity declaration

DTDElementDecl ElementDecl

Element declaration

DTDAttList AttList

List of attribute declarions for an element

DTDNotation Notation

A notation declaration


A parameter entity reference in the top-level flow of the DTD

DTDInstruction Instruction

A processing instruction

DTDComment Text

A comment

Entity declarations and references

data EntityDecl Source

A declaration of an entity. An entity is a textual substitution variable. General entities can be referenced in an XML document conforming to the DTD, and parameter entities can be referenced in the DTD itself. The value of an unparsed entity is not specified in the DTD; it is specified by external syntax declared as a notation elsewhere in the DTD.

data EntityValue Source

The value of an internal entity may contain references to parameter entities; these references need to be resolved to obtain the actual replacement value of the entity. So we represent the value as a mixture of parameter entity references and free text.

type PERef = TextSource

A parameter entity reference. It contains the name of the parameter entity that is being referenced.

Element declarations

data ElementDecl Source

A declaration of an element.

data ContentDecl Source

The content that can occur in an element.



No content


Unrestricted content

ContentElement [EntityValue]

Structured element content

ContentMixed [Text]

A mixture of text and elements

ContentPERef PERef 

data ContentModel Source

A model of structured content for an element.


CMName Text Repeat

Element name

CMChoice [ContentModel] Repeat

Choice, delimited by "|"

CMSeq [ContentModel] Repeat

Sequence, delimited by ","

data Repeat Source

The number of times a production of content model syntax can repeat.

Attribute declarations

data AttList Source

A list of attribute declarations for an element.




attListElementName :: Either PERef Text

The name of the element to which the attribute declarations apply

attListDecls :: [AttDeclPERef]

data AttDecl Source

A declaration of an attribute that can occur in an element.




attDeclName :: Text

The name of the attribute

attDeclType :: AttTypePERef

The type of the attribute

attDeclDefault :: AttDefault

The default value specification

data AttType Source

The type of value that an attribute can take.



Any text


A unique ID


A reference to an ID


One or more references to IDs


An unparsed external entity


One or more unparsed external entities


A name-like token


One or more name-like tokens

AttEnumType [Text]

One of the given values

AttNotationType [Text]

Specified by external syntax declared as a notation

data AttDefault Source

A default value specification for an attribute.



No default value; the attribute must always be supplied


No default value; the attribute is optional

AttFixed Text

When supplied, the attribute must have the given value

AttDefaultValue Text

The attribute has the given default value when not supplied

Notation declarations

data Notation Source

A declaration of a notation.

data NotationSource Source

A source for a notation. We do not use the usual ExternalID type here, because for notations it is only optional, not required, for a public ID to be accompanied also by a system ID.


NotationSysID Text

A system ID

NotationPubID Text

A public ID

NotationPubSysID Text Text

A public ID with a system ID