# Class Pxp_dtd.dtd_element

    class dtd_element : dtd -> string -> object .. end

A single element declaration that can be added to the DTD object. Element declarations are created by

     new dtd_element init_dtd init_name

This creates a new `dtd_element` object for `init_dtd` with `init_name`. The strings are represented in the same encoding as `init_dtd`.

    method name : string

returns the name of the declared element

    method externally_declared : bool

returns whether the element declaration occurs in an external entity.

    method content_model : Pxp_core_types.I.content_model_type

get the content model of this element declaration, or `Unspecified`

    method content_dfa : Pxp_dfa.dfa_definition option

return the DFA of the content model if there is a DFA, or `None`. A DFA exists only for regexp style content models which are deterministic.

    method set_cm_and_extdecl : Pxp_core_types.I.content_model_type -> bool -> unit

`set_cm_and_extdecl cm extdecl`: set the content model to `cm`. Once the content model is not `Unspecified`, it cannot be set to a different value again. Furthermore, it is set whether the element occurs in an external entity (`extdecl`).

    method encoding : Pxp_core_types.I.rep_encoding

Return the encoding of the strings

    method allow_arbitrary : unit

This method sets the `arbitrary_allowed` flag for this element. The effect of this flag is to ignore the validation constraint that attributes for this element needs to be declared. Note that this mode is not required for implementing the well-formedness mode, because for this it is already sufficient to set the same-named flag in the global DTD object. Setting this flag for certain elements may still be useful, however. It is then possible to allow arbitrary attributes for certain elements only.

Technically, the `arbitrary_allowed` flag changes the behaviour of the `attribute` method defined below so that it raises `Undeclared` instead of `Validation_error` when an unknown attribute name is encountered.

    method disallow_arbitrary : unit

Clears the `arbitrary_allowed` flag

    method arbitrary_allowed : bool

Returns whether arbitrary attributes are allowed or not.

    method attribute : string -> Pxp_core_types.I.att_type * Pxp_core_types.I.att_default

get the type and default value of a declared attribute, or raise `Validation_error` if the attribute does not exist. If the `arbitrary_allowed` flag is set, the exception `Undeclared` is raised instead of `Validation_error`.

    method attribute_violates_standalone_declaration : string -> string option -> bool

`attribute_violates_standalone_declaration name v`: Checks whether the attribute `name` violates the standalone declaration if it has value `v`. The method returns true if:

- The attribute declaration occurs in an external entity,

and if one of the two conditions holds:

- `v = None`, and there is a default for the attribute value
- `v = Some s`, and the type of the attribute is not CDATA, and `s` changes if normalized according to the rules of the attribute type.

The method raises `Validation_error` if the attribute does not exist. If the `arbitrary_allowed` flag is set, the exception `Undeclared` is raised instead of `Validation_error`.

    method attribute_names : string list

get the list of all declared attributes

    method names_of_required_attributes : string list

get the list of all attributes that are specified as required attributes

    method id_attribute_name : string option

Returns the name of the attribute with type ID, or `None`.

    method idref_attribute_names : string list

Returns the names of the attributes with type IDREF or IDREFS.

    method add_attribute : string ->
           Pxp_core_types.I.att_type -> Pxp_core_types.I.att_default -> bool -> unit

`add_attribute name type default extdecl`: add an attribute declaration for an attribute with the given name, type, and default value. If there is more than one declaration for an attribute name, the first declaration counts; the other declarations are ignored.

`extdecl`: if true, the attribute declaration occurs in an external entity. This property is used to check the "standalone" attribute.

    method validate : unit

checks whether this element declaration (i.e. the content model and all attribute declarations) is valid for the associated DTD. Raises mostly `Validation_error` if the validation fails.