OmniMark is a streaming language and its parsers do not build a parse tree in memory. Instead, OmniMark provides powerful query facilities for retrieving information about the context of the markup currently parsed.
 The current elements shelf represents the stack of currently open elements. This allows you to make
      complex queries about all open elements. You can iterate over all open elements using repeat over current
      elements, inquire about the current element depth with number of current elements or access
      any particular element by its item number. The shelf is not keyed nor directly
      modifiable by the user.
    
 OmniMark also provides means to quickly access a particular element from the current elements
      shelf and to navigate through it.
      
 The element qualifiers listed above can be combined to form more sophisticated queries. For example, the
      expression 
parent of ancestor "row" is "thead"tests whether there is an element in
current elements other than the lastmost, named row, and whether the item
      preceding it in current elements is named thead. Depending on the kind of markup you are
      parsing, you can use this expression to establish if your element is a part of the innermost table heading.
    
 Each item of current elements is a markup-element-event, which means that all of the
        following information is available about it:
        
attributes
          
children
          
content is
          
declaration
          
last content is
          
last proper content is
          
last proper subelement is
          
last subelement is
          
name
          
occurrence
          
specified attributes
          
status is
          
status of last subelement is
          
usemap is
          
xmlns-name
        
 So, for example, you can ask whether
        
xmlns-name of element = xmlns-name of doctypeto establish if you are in the same namespace as the root document element, or
occurrence of open element "item" = 1to find out if you are inside the first item of a list.
 The most commonly accessed information is name of, attributes of and
        specified attributes of an element. OmniMark provides the shortcut attribute notation for
        accessing a single item of the attributes shelf by name for any element. Format items %q and
        %v allow for an even shorter notation for accessing the element's name and attributes, but only for the
        current element.
    
 The attributes and specified attributes shelves represent the declared and specified
        attributes of each element. Each item of these two shelves may have the following properties you can inquire
        about:
        
is cdata and other queries about the declared attribute value type
          
is implied
          
is defaulted
          
is specified
          
repeat over attribute can be used to iterate over tokenized attributes such as numbers.
        
 An attribute declared as entity or notation provides additional information
        about the entity or notation it refers to:
        
name of the entity or notation
          
data-attributes
          
notation
          
entity can be accessed using the appropriate modifiers on %v
          
notation
        
Finally, OmniMark maintains certain information about the parse that is not associated with any particular element, attribute, or entity. This information is bound to the lifetime of the current parse.
#appinfo
          
#current-dtd
          
#doctype
          
#markup-error-count
          
#markup-parser
          
#markup-warning-count
          
#xmlns-names
          
number of current subdocuments
        
 Whether #appinfo, #current-dtd, and #doctype actually provide
        information depends on the state of the parsing. They have a value assigned only if the document being parsed,
        or the DTD being used to parse it, provides the information. In particular, this means they are never attached
        in:
        
document-start rules,
          
do sgml-parse or do xml-parse actions prior to a %c operator or
          suppress action, unless a precompiled DTD is used,
          
do sgml-parse or do xml-parse actions after the %c operator or
          suppress action, and
          
document-end rules if errors occurred before this information could be determined.