do sgml-parse Full Description |
|
Syntaxdo sgml-parse document (with id-checking Boolean-expression)? (creating sgml-dtds key keyname)? scan (input source | (input input-function-call)) action+ done do sgml-parse subdocument (with id-checking Boolean-expression)? (creating sgml-dtds key keyname)? scan (input source | (input input-function-call)) action+ done do sgml-parse instance (with document-element element-name)? with (sgml-dtds key key | current sgml-dtd) (with id-checking Boolean-value)? scan (input source | (input input-function-call)) action+ done Purpose You can invoke the markup processor, and its SGML parser, with
do sgml-parse is to process a complete SGML document:
do sgml-parse document scan file "my-sgml.sgm" output "%c" done This assumes that the file "mysgml.sgm" contains an SGML document. You will often find that the DTD and the instance you want to process are in two different files. The simplest way to handle this is:
do sgml-parse document scan file "my-dtd.dtd" || file "my-sgml.sgm" output "%c" doneBut suppose you have 20 instances to process, all of which use the same DTD. It is wasteful to parse the same DTD 20 times. To avoid doing this you can pre-compile the DTD and place it on the built-in shelf sgml-dtds :
do sgml-parse document creating sgml-dtds key "my-dtd" scan file "my-dtd.dtd" suppress doneYou can then process each instance in turn. The following code assumes you have placed the file names of the instances on a shelf called "my-instances": repeat over my-instances do sgml-parse instance with sgml-dtds key "my-dtd" scan file my-instances output "%c" done againIn some cases you may wish to parse a partial instance, that is, a piece of data comprising an element from a DTD which is not the doctype element of that DTD. In this case you can specify the element to be used as the effective doctype for parsing the data:
do sgml-parse instance with document-element "lamb" with sgml-dtds key "my-dtd" scan file "partinst.sgm" output "%c" doneThe element's start and end tags can be present, or they can be omitted if the element allows. SGML comments, processing instructions and even marked sections can precede and follow the element's start and end tags, but anything else (particularly other elements, data, entity references or USEMAP declarations) is an error. You can also use This is an example of how to make references to SGML subdocument entities trigger parsing of the subdocument entities. The source of the subdocument entity text in the example is assumed to be a file whose name is either the system identifier (provided by a external-data-entity #implied when entity is subdoc-entity local stream file-name output "subdoc depth exceeded!%n" when number of current subdocuments > 100 do when entity is system set file-name to "%eq" else when entity is in-library set file-name to "%epq" else when entity is public do scan "%pq" match (["+-"] "//")? ((lookahead ! "//") any)* "//" [any except " "]* " " "-//"? ((lookahead ! "//") any)* => public-text-description set file-name to public-text-description done else set file-name to "%uq.ent" done do sgml-parse subdocument scan file file-name output "%c" done Processing a subdocument increments the counter value returned by the By default, OmniMark checks all SGML IDREF attributes to make sure they reference valid IDs. This checking may not be appropriate in processing a partial instance. It also takes time. You can turn this checking on and off using do sgml-parse document with id-checking false scan file "my-sgml.sgm" output "%c" done When parsing a document, markup rules are fired as follows (if specified in your code):
When parsing a subdocument, markup rules are fired as follows (if specified in your code):
When parsing an instance part only general markup rules are fired. As with subdocument, instance saves and resets the counter value returned by the
If there are errors in the SGML declaration or prolog (DTD), then the processing of the content of the |