Author: W. Eliot Kimber, ISOGEN International Corp.
Date: 28 Sept. 1998
This document describes the EXPRESS model of the HyTime semantic grove, as developed by W. Eliot Kimber and Peter Bergstrom (of EuroSTEP, A.B., Sweden).
The HyTime property set, published in ISO/IEC 10744:1997 (HyTime), Annex B, defines the abstract data model for the information a HyTime engine needs to maintain in order to implement the hypermedia processing semantics of the HyTime architecture. As published in the HyTime standard, this data model is defined as a "property set", which is a simple form of data model. A property set defines data objects called "nodes" that have properties. Some properties of nodes are atomic values, such as strings or integers. Other properties are lists of other nodes, thus establishing node-to-node relationships. The general property set mechanism is defined in ISO/IEC 10744:1997 (HyTime), Annex A.4.
Nodes are analogous to STEP entities. Properties are analogous to entity attributes. Thus it is possible to redefine the data model defined by any property set using EXPRESS. This document describes our attempt at redefining the HyTime property set in EXPRESS. The value of this is that it provides a ready-made definition, in STEP terms, of the data objects needed to represent and manage arbitrary relationships, e.g., hyperlinks, among STEP entities (and non-STEP data). It provides an addressing model that is not limited to the addressing of entity instances within a single STEP repository.
The model presented here does not reflect the entire HyTime property set. It only reflects those classes and properties used for hyperlinks and location addresses. The scheduling and rendition facilities of the HyTime architecture are not reflected in this model.
The following is the EXPRESS schema generated from the EXPRESS-G model. It has not been enhanced to reflect those constraints defined by the HyTime property set or the HyTime architecture that would require Where rules.
SCHEMA HyTime_Semantic_Grove; TYPE general_strnorm = STRING; END_TYPE; TYPE hydoc_content = SELECT (location_address, hyperlink); END_TYPE; ENTITY abs_anchor ABSTRACT SUPERTYPE OF (ONEOF(list_anchor,anchor)); anchor_role_name : general_strnorm; anchor_role : anchor_role; END_ENTITY; ENTITY anchor SUBTYPE OF (abs_anchor); anchored_object : grovenode; return_traversal : BOOLEAN; departure : BOOLEAN; int_arrival_trav : LIST [0:?] OF anchor; ext_arrival_trav : LIST [0:?] OF anchor; next_left : OPTIONAL anchor; next_right : OPTIONAL anchor; END_ENTITY; ENTITY anchor_role; list : BOOLEAN; END_ENTITY; ENTITY anchored_object; object : grovenode; END_ENTITY; ENTITY arc_semantics; arc_public_id : STRING; hyperlink_types : LIST [0:?] OF hyperlink_type; END_ENTITY; ENTITY bos_member; in_hytime_bos : BOOLEAN; memroot : grovenode; END_ENTITY; ENTITY grovenode; END_ENTITY; ENTITY hyperdocument; bos : LIST [1:?] OF bos_member; arc_semantics : LIST [0:?] OF arc_semantics; hub_document : hytime_document; hytime_documents : LIST [0:?] OF hytime_document; value_refs : LIST [0:?] OF valueref; anchored_objects : LIST [0:?] OF anchored_object; hyperlink_types : LIST [0:?] OF hyperlink_type; END_ENTITY; ENTITY hyperlink; anchors : LIST [2:?] OF abs_anchor; definition : grovenode; hyperlink_type_name : general_strnorm; hyperlink_type : hyperlink_type; END_ENTITY; ENTITY hyperlink_type; roles : LIST [2:?] OF anchor_role; END_ENTITY; ENTITY hytime_document; is_hub_document : BOOLEAN; content : LIST [0:?] OF hydoc_content; sgml_document : grovenode; reference_targets : LIST [0:?] OF reference_targets; END_ENTITY; ENTITY list_anchor SUBTYPE OF (abs_anchor); members : LIST [0:?] OF anchor; END_ENTITY; ENTITY location_address; definition : grovenode; location_source : grovenode; location_selector : LIST [1:?] OF grovenode; located_nodes : LIST [0:?] OF grovenode; END_ENTITY; ENTITY reference_targets; reference : grovenode; targets : LIST [0:?] OF grovenode; location_path : OPTIONAL location_address; END_ENTITY; ENTITY valueref; value_of : grovenode; value : LIST [0:?] OF grovenode; END_ENTITY; END_SCHEMA;
A set of entity instances conforming to the HyTime property set data model consitute a "HyTime semantic grove", reflecting the results of applying HyTime-defined processing to a set of SGML documents and other data objects (which could include STEP entities). Thus this data model is called the "HyTime semantic grove" data model. A grove is nothing more than a directed graph of nodes. In STEP terms, a grove would be a collection of entity instances related together by their attribute values. Groves can be represented as collections of STEP entities, where each grove node is represented by one or more entities.
The HyTime semantic grove data model is an example of an "early-bound" grove-to-STEP mapping where each node class in the property set is mapped to one entity class in the EXPRESS model.
Node properties that are node lists are represented in the EXPRESS model as list data types. In the grove model, any node list may, potentially, be an empty node list (that is a list of zero members). Thus, most of the lists are defined as [0:?]. However, a few properties require at least one node to be present if the property is exhibited at all. These are defined as [1:?] in the EXPRESS model. Nodal properties that are singleton node lists are represented by an attribute whose value is a single entity, rather than as a list of one member.
One purpose of the HyTime semantic grove is to record pointers to nodes in groves other than the HyTime semantic grove (e.g., element nodes in SGML document groves). The grove model provides the notion of "unrestricted references" from one node to other nodes, in the same or different groves. This is reflected in the EXPRESS model through the "grove node" entity, which represents nodes that could be in any grove and have any node class. The grove node class can be used as the superclass of any entity type as the grove node class has no attributes in this early bound form.
The following sections walk through the different entity types in the model, starting with the hyperdocument entity type.
The hyperdocument entity type is the root of the HyTime semantic grove. There must be exactly one hyperdocument entity. It serves to bind together the rest of the HyTime semantic grove. In the grove model, every grove must have exactly one root node. The hyperdocument node serves that purpose for the HyTime semantic grove.
The value_refs attribute of the hyperdocument entity is a list of "value references". A value reference relates a source node to its effective value.
The anchored_objects attribute of the hyperdocument entity is a list of objects that are anchored by at least one hyperlink. A hyperlink consists of two or more anchors and each anchor may have zero or more members. Each member of an anchor is an anchored object. The anchored objects property is an index that allows objects to quickly determine whether or not they are part of any hyperlinks. The hyperlinks themselves are also accessible, through the hytime_documents attribute of the hyperdocument entity.
The hytime_documents property of the hyperdocument entity lists any SGML documents within the current "session" that are derived from the HyTime architecture. These documents may contain value references or hyperlinks, and so are recorded in the semantic grove. The "content" of a hytime document (represented by the content attribute of the hytime document entity) is zero or more location address or hyperlink entities. These entities form the abstract definitions of the links and location addresses found in the current session.
A location address represents a pointer from one place to another. In grove terms, a location address always addresses zero or more grove nodes. In this model, a location address always points to zero or more grove node entities. All the attributes of the location address entity are lists of grove nodes, which point back into the base data (either the document in which the address was found, the objects addressed, or the location source for the location address). Location address entities provide a record of how a particular initial reference got to its ultimate targets.
A hyperlink entity represents a typed relationship among two or more anchors. Each anchor consists of either a single grove node or a list of grove nodes. This distinction between list and singleton anchors is represented by the abs_anchor (abstract anchor) abstract class. The list_anchor entity type has the additional property of listing its members, each of which is an anchor entity. Each anchor entity then points to the single grove node that it anchors. Anchors can also be related together to define the movement within a list of anchors that is possible (the graphical tool used to create the EXPRESS-G drawing does not support self-referential entities).
Every hyperlink has an associated link type.
The hyperlink type entity type defines the general properties of a link type: the link type name and the anchor roles used for each anchor. Each anchor role is represented by an anchor_role entity.
The reference_targets attribute of the hytime document entity is list of reference_targets entity. Each reference_targets entity relates a grove node making a reference to its ultimate targets, as well as to the first location address of the location path that addressed the targets.
A HyTime session represents the HyTime-defined processing performed on a set of SGML entities (abstract storage objects), the "bounded object set" (BOS) (bounded because it is a finite set with well-defined boundaries). There is one BOS per session, represented by the BOS attribute of the hyperdocument entity. The BOS attribute is a list of bos_member nodes. Each BOS member points to the root node of the grove constructed from the SGML entity included in the bounded object set and indicates whether or not it is also in the "HyTime BOS", which is the BOS you get from applying only the rules defined by the HyTime architecture (as opposed to application-defined rules).