Go to the first, previous, next, last section, table of contents.


The Pxp_dtd module

Pxp_dtd:

Object model of document type declarations

====================================================================== OVERVIEW

class dtd ............... represents the whole DTD, including element declarations, entity declarations, notation declarations, and processing instructions class dtd_element ....... represents an element declaration consisting of a content model and an attribute list declaration class dtd_notation ...... represents a notation declaration class proc_instruction .. represents a processing instruction ======================================================================

 :

Creation: new dtd creates a new, empty DTD object without any declaration, without a root element, without an ID.

  Pxp_types.collect_warnings -> 
  Pxp_types.rep_encoding ->
  object
    method root : string option

get the name of the root element if present

 : string -> unit

set the name of the root element. This method can be invoked only once

 : Pxp_types.dtd_id option

get the identifier for this DTD

 : Pxp_types.dtd_id -> unit

set the identifier. This method can be invoked only once

 : Pxp_types.rep_encoding

returns the encoding used for character representation

 : unit

After this method has been invoked, the object changes its behaviour: - elements and notations that have not been added may be used in an arbitrary way; the methods "element" and "notation" indicate this by raising Undeclared instead of Validation_error.

 : unit

    method arbitrary_allowed : bool

Returns whether arbitrary contents are allowed or not.

 : bool

Whether there is a 'standalone' declaration or not. Strictly speaking, this declaration is not part of the DTD, but it is included here because of practical reasons. If not set, this property defaults to 'false'.

 : bool -> unit

Sets the 'standalone' declaration.

 : dtd_element -> unit

add the given element declaration to this DTD. Raises Not_found if there is already an element declaration with the same name.

 : Pxp_entity.entity -> bool -> unit

add_gen_entity e extdecl: add the entity 'e' as general entity to this DTD (general entities are those represented by &name;). If there is already a declaration with the same name, the second definition is ignored; as exception from this rule, entities with names "lt", "gt", "amp", "quot", and "apos" may only be redeclared with a definition that is equivalent to the standard definition; otherwise a Validation_error is raised.

'extdecl': 'true' indicates that the entity declaration occurs in an external entity. (Used for the standalone check.)

 : Pxp_entity.entity -> unit

add the given entity as parameter entity to this DTD (parameter entities are those represented by %name;). If there is already a declaration with the same name, the second definition is ignored.

 : dtd_notation -> unit

add the given notation to this DTD. If there is already a declaration with the same name, a Validation_error is raised.

 : proc_instruction -> unit

add the given processing instruction to this DTD.

 : string -> dtd_element

looks up the element declaration with the given name. Raises Validation_error if the element cannot be found. (If "allow_arbitrary" has been invoked before, Unrestricted is raised instead.)

 : string list

returns the list of the names of all element declarations.

 : string -> (Pxp_entity.entity * bool)

let e, extdecl = obj # gen_entity n: looks up the general entity 'e' with the name 'n'. Raises WF_error if the entity cannot be found. 'extdecl': indicates whether the entity declaration occured in an external entity.

 : string list

returns the list of all general entity names

 : string -> Pxp_entity.entity

looks up the parameter entity with the given name. Raises WF_error if the entity cannot be found.

 : string list

returns the list of all parameter entity names

 : string -> dtd_notation

looks up the notation declaration with the given name. Raises Validation_error if the notation cannot be found. (If "allow_arbitrary" has been invoked before, Unrestricted is raised instead.)

 : string list

Returns the list of the names of all added notations

 : string -> proc_instruction list

looks up all processing instructions with the given target. The "target" is the identifier following "<?". Note: It is not possible to find out the exact position of the processing instruction.

 : string list

Returns the list of the names (targets) of all added pinstrs

 : unit

ensures that the DTD is valid. This method is optimized such that actual validation is only performed if DTD has changed. If the DTD is invalid, mostly a Validation_error is raised, but other exceptions are possible, too.

 : unit

Succeeds if all regexp content models are deterministic. Otherwise Validation_error.

 : Pxp_types.output_stream -> Pxp_types.encoding -> bool -> unit

write_compact_as_latin1 os enc doctype: Writes the DTD as 'enc'-encoded string to 'os'. If 'doctype', a DTD like <!DOCTYPE root ... > is written. If 'not doctype', only the declarations are written (the material within the square brackets).

 : Pxp_types.output_stream -> bool -> unit

DEPRECATED METHOD; included only to keep compatibility with older versions of the parser

---------------------------------------

 : unit

INTERNAL METHOD

 : Pxp_types.collect_warnings

INTERNAL METHOD

  end

----------------------------------------------------------------------

and dtd_element : dtd -> string ->

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

 : string

returns the name of the declared element

 : bool

returns whether the element declaration occurs in an external entity.

 : Pxp_types.content_model_type

get the content model of this element declaration, or Unspecified

 : 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.

 : Pxp_types.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').

 : Pxp_types.rep_encoding

Return the encoding of the strings

 : unit

After this method has been invoked, the object changes its behaviour: - attributes that have not been added may be used in an arbitrary way; the method "attribute" indicates this by raising Undeclared instead of Validation_error.

 : unit

    method arbitrary_allowed : bool

Returns whether arbitrary attributes are allowed or not.

 : string -> 
                         Pxp_types.att_type * Pxp_types.att_default

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

 : 
               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 'arbitrary_allowed', the exception Undeclared is raised instead of Validation_error.

 : string list

get the list of all declared attributes

 : string list

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

 : string option

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

 : string list

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

 : string -> 
                           Pxp_types.att_type -> 
			   Pxp_types.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.

 : 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.

 : Pxp_types.output_stream -> Pxp_types.encoding -> unit

write_compact_as_latin1 os enc: Writes the <!ELEMENT ... > declaration to 'os' as 'enc'-encoded string.

 : Pxp_types.output_stream -> unit

DEPRECATED METHOD; included only to keep compatibility with older versions of the parser

  end

----------------------------------------------------------------------

and dtd_notation : string -> Pxp_types.ext_id -> Pxp_types.rep_encoding ->

Creation: new dtd_notation a_name an_external_ID init_encoding creates a new dtd_notation object with the given name and the given external ID.

 : string
    method ext_id : Pxp_types.ext_id
    method encoding : Pxp_types.rep_encoding

    method write : Pxp_types.output_stream -> Pxp_types.encoding -> unit

write_compact_as_latin1 os enc: Writes the <!NOTATION ... > declaration to 'os' as 'enc'-encoded string.

 : Pxp_types.output_stream -> unit

DEPRECATED METHOD; included only to keep compatibility with older versions of the parser

  end

----------------------------------------------------------------------

and proc_instruction : string -> string -> Pxp_types.rep_encoding ->

Creation: new proc_instruction a_target a_value creates a new proc_instruction object with the given target string and the given value string. Note: A processing instruction is written as <?target value?>.

 : string
    method value : string
    method encoding : Pxp_types.rep_encoding

    method write : Pxp_types.output_stream -> Pxp_types.encoding -> unit

write os enc: Writes the <?...?> PI to 'os' as 'enc'-encoded string.

 : Pxp_types.output_stream -> unit

DEPRECATED METHOD; included only to keep compatibility with older versions of the parser

 : (string * string * (string * string) list)

Parses a PI containing a PXP option. Such PIs are formed like: <?target option-name option-att="value" option-att="value" ... ?> The method returns a triple (target, option-name, option-att, value; ...) or raises Error.

  end

;;


Go to the first, previous, next, last section, table of contents.