| Defining Reusable, Distributable Information Objects Using XML-Data Schemas | Table of contents | Indexes | Integrating product model and the documentation: A practical approach | |||
Imposing Intelligence on Graphics: Using HyTime Hyperlinks with Non-SGML Data |
|
W. Eliot Kimber |
| ISOGEN International Email: eliot@isogen.com Web: www.isogen.com |
Biographical notice: |
W. Eliot Kimber |
ITEDO Software ![]() Weidenbrueck, Deiter |
Eliot is author of a forthcoming book on HyTime as part of the Charles F. Goldfarb Series on Open Information Management. Eliot has over 15 years experience within industrial-strength electronic publishing and generalized markup. Eliot speaks and writes frequently on the subject of SGML, HyTime, and other related topics. |
Deiter Weidenbrueck |
| ITEDO Software Email: Dieter@isodraw.de Web: www.isodraw.com |
Biographical notice: |
Dieter Weidenbrück |
ABSTRACT: |
Introduction |
|
NOTE: The PHyLIS package, which forms the core of the demonstration, is available for downloading from the ISOGEN Web site, www.isogen.com. |
HyTime Engine Implementation Approach |
|
Groves and Grove Constructors |
|
Digression 1: HyTime Hyperlink Concepts |
|
Digression 2: HyTime Location Addressing Concepts |
|
In particular, location address query notations defined for use with specific browsers, editors, or retrieval systems, will not be as interoperable as standardized methods. |
Division of Labor |
|
The general grove model and the HyTime hyperlink design suggests a general division of labor in a fully-generalized HyTime system: the HyTime engine manages the relationships (links and attendant addresses) among nodes in groves, grove constructors provide the groves, and grove renderers provide useful views of groves. This organization is shown in . |
Relationship of Grove Manager to Grove Constructors and Grove Renderers |
![]() |
PHyLIS Grove Support |
|
PHyLIS provides two interfaces, one for grove constructors and one for grove renderers. It also provides hyperlink and address management facilities through the HyTime semantic grove constructor. |
PHyLIS is itself an ActiveX component so that it can be used as a service by more specialized applications. |
IsoView Grove Constructor and Grove Renderer |
|
Grove Representation of The IsoView API |
|
This property set (and therefore groves that conform to it) reflects all the information that IsoView exposes through its API, which is all the information available to construct IsoView groves. |
The actual IsoView property set is provided as an appendix to this paper. |
Hyperlinking to IsoView Grove Nodes |
|
To create hyperlinks to and from graphic components you must be able to address the grove nodes that represent the components. In the case of IsoView groves, the normal form of address would be by reference to the unique IDs of graphic objects or viewports. Because a grove can always be viewed as a tree, it is also possible to use tree-based addressing to address graphic components, although this is probably less useful in practical terms, in part because the order of nodes in the constructed grove may not be knowable or apparent to document authors. For this demonstration, all addresses use name-based addressing. |
The HyTime architecture provides a generalized name-space addressing element, name-space location address (nmsploc). A name-space location address can address nodes by name in any name space in any grove. The IsoView grove provides two name spaces, one for named graphic objects, the other for viewports (which always have names). |
A name-space address consists of three parts: a pointer to the node that exhibits the name space, the name of the name space, and the names of the nodes in that name space to be addressed. In the case of IsoView groves, the node that exhibits the names spaces is the IsoView root node, which you can address by naming the entity from which the IsoView grove is constructed (using the implied location source rules of HyTime). The name space name is either "objects" or "viewprts". |
A specialized form of name-space location address element could be declared like so (assume that these declarations are part of the file "mydoc.dtd"): |
<!-- Elements for addressing graphic objects and viewports
in IsoView groves.
-->
<!ELEMENT IsoView-LocationAddress
-- Specialized form of HyTime name-space location address
for addressing graphic objects or viewports in IsoView
graphics. --
-- Content of element is name or names of objects or
viewports. --
- -
(#PCDATA)
>
<!ATTLIST IsoView-LocationAddress
ID
ID
#REQUIRED
IsoView-Graphic -- Entity that contains the graphic from
which grove is constructed. --
ENTITY
#REQUIRED
name-space -- Name space property in which named object exists --
(objects |
viewprts)
objects
HyTime
NAME
#FIXED "nmsploc" -- Derived from name-space location address --
HyNames -- Map local attribute names to HyTime-defined names --
CDATA
#FIXED "locsrc IsoView-Graphic namespc name-space"> |
The IsoView-LocationAddress element type is a specialized form of name-space location address (nmsploc) designed to be used specifically with IsoView groves. The IsoView-Graphic attribute points to the IsoView graphic that contains the objects or viewports to be addressed. It's value is an entity name and must be an entity with a notation that is associated with the IsoView grove constructor. As defined by the HyTime architecture, naming an entity as the location source or target of a location address element implies a reference to the grove constructed from the entity. |
In this system, the IsoView-specific notation is called "IsoView". As currently implemented, the PHyLIS engine hard-codes the relationship between entities and grove constructors. The better implementation is to provide a registration mechanism by which notations are associated with grove constructors and grove renderers. The HyTime architecture does provide a general mechanism for explicitly associating an entity with a grove constructor, although PHyLIS does not yet support that mechanism. |
The name-space attribute defines which type of object is being addressed. The allowed values are the names of the name-space properties of the IsoView node class defined in the IsoView property set. |
The HyTime attribute indicates that the IsoView-LocationAddress element is derived from the HyTime-defined element form "nmsploc" (name-space location address). The HyNames attribute defines the mapping from the HyTime-defined attributes "locsrc" (location source) and "namespc" (name-space) to the corresponding local names "IsoView-Graphic" and "name-space". |
A typical document that uses these element types is: |
<!DOCTYPE MyDoc SYSTEM "mydoc.dtd" [
<!NOTATION
IsoView
PUBLIC "+//isodraw.com//NOTATION IsoView CGM//EN"
>
<!ENTITY
graphic-1
SYSTEM "graph1.cgm"
NDATA IsoView
>
]>
<MyDoc>
...
<IsoView-LocationAddress
id="graphic-object-1"
name-space="objects"
IsoView-Graphic="graphic-1">object-abc
</IsoView-LocationAddress>
...
</MyDoc> |
This name-space location address points to the graphic object node with the ID "object-abc" in the grove constructed from the IsoView entity "graphic-1". |
The following examples use two hyperlink types: part-to-description and assembly-to-subassembly. The part-to-description link type relates parts in graphics to their description in a document. The assembly-to-subassembly link relates a picture of a subassembly to the assembly of which it is a component. For part-to-description links, two different forms are defined, a contextual form (Part-Description) and a completely independent form (Part-to-Description-Link). The Assembly-to-Subassembly link is represented by a single element type. All three element types are derived from the HyTime "hylink" (hyperlink) element form: |
<!ELEMENT Part-Description
-- Relates a part to its textual description --
-- The Part-Description element contains the description --
- -
ANY -- For this example, the content is unimportant --
>
<!ATTLIST Part-Description
HyTime
NAME
#FIXED "hylink"
linktype
NAME
#FIXED "part-to-description"
anchor-roles
CDATA
#FIXED "part #LIST description #LIST"
anchor-constrataints
CDATA
#FIXED "required self"
part -- Reference to parts for which this element is the
description --
IDREFS
#REQUIRED
HyNames
CDATA
#FIXED "anchrole anchor-roles anchcstr anchor-constraints">
<!ELEMENT Part-to-Description-Link
-- Relates a part to its textual description. --
-- Both anchors are explicitly addressed. --
- O
EMPTY
>
<!ATTLIST Part-to-Description-Link
HyTime
NAME
#FIXED "hylink"
linktype
NAME
#FIXED "part-to-description"
anchor-roles
CDATA
#FIXED "part #LIST description #LIST"
part -- Reference to part --
IDREFS
#REQUIRED
description -- Reference to description of the part --
IDREFS
#REQUIRED
HyNames
CDATA
#FIXED "anchrole anchor-roles"
>
<!ELEMENT Assembly-to-Subassembly-Link
-- Relates an assembly to a subassembly
-- Both anchors are explicitly addressed. --
- O
EMPTY
>
<!ATTLIST Assembly-to-Subassembly-Link
HyTime
NAME
#FIXED "hylink"
linktype
NAME
#FIXED "assembly-to-subassembly"
anchor-roles
CDATA
#FIXED "assembly #LIST subassembly #LIST"
assembly -- Reference to part --
IDREFS
#REQUIRED
subassembly -- Reference to description of the part --
IDREFS
#REQUIRED
HyNames
CDATA
#FIXED "anchrole anchor-roles"
> |
The first example uses a Part-Description link to connect a description of a part to the drawing of the part within a graphic. This is a simple example of linking from a document to a graphic object. |
<!DOCTYPE MyDoc SYSTEM "mydoc.dtd" [
<!NOTATION
IsoView
PUBLIC "+//isodraw.com//NOTATION IsoView CGM//EN"
>
<!ENTITY graphic-1 SYSTEM "graph1.cgm" NDATA IsoView>
]>
<MyDoc>
...
<IsoView-LocationAddress
id="graphic-object-1"
name-space="objects"
IsoView-Graphic="graphic-1">object-abc
</IsoView-LocationAddress>
...
<Part-Description
part="graphic-object-1">
The Spacely Sprocket is....
</Part-Description>
...
</MyDoc> |
The next example uses an Assembly-to-Subassembly link to create a hyperlink between two graphic objects: |
<!DOCTYPE MyDoc SYSTEM "mydoc.dtd" [
<!NOTATION
IsoView
PUBLIC "+//isodraw.com//NOTATION IsoView CGM//EN"
>
<!ENTITY graphic-1
SYSTEM "graph1.cgm"
NDATA IsoView
>
]>
<MyDoc>
...
<IsoView-LocationAddress
id="graphic-object-1"
name-space="objects"
IsoView-Graphic="graphic-1">object-abc
</IsoView-LocationAddress>
<IsoView-LocationAddress
id="graphic-object-2"
name-space="objects"
IsoView-Graphic="graphic-1">object-def
</IsoView-LocationAddress>
...
<Assembly-to-Subassembly-Link
assembly="graphic-object-1"
subassembly="graphic-object-2">
...
</MyDoc> |
Here, the |
The last example uses the Part-to-Description-Link element to connect a graphic object to a separate description element: |
<!DOCTYPE MyDoc SYSTEM "mydoc.dtd" [
<!NOTATION
IsoView
PUBLIC "+//isodraw.com//NOTATION IsoView CGM//EN"
>
<!ENTITY graphic-1
SYSTEM "graph1.cgm"
NDATA IsoView
>
]>
<MyDoc>
...
<IsoView-LocationAddress
id="graphic-object-1"
name-space="objects"
IsoView-Graphic="graphic-1">object-abc
</IsoView-LocationAddress>
...
<Part-Description id="spacely-sprocket">
<part-name>Spacely Sprocket</part-name>
...
</Part-Description>
...
<Part-to-Description-Link
part="graphic-object-1"
description="spacely-sprocket">
...
</MyDoc> |
Here, the graphic object addressed by the IsoView-LocationAddress element is linked to the Part-Description element. |
Note that in all these examples, the only thing that changed from one example to the next is the location addresses used. The hyperlink elements are insensitive to the form of location address. |
Conclusions |
|
Given a generalized grove-based HyTime engine, it is relatively straightforward to integrate support for hyperlinking to and from a variety of data types without the need to do direct engine-to-renderor integration. The generalized HyTime support makes it possible to use standardized HyTime addressing methods rather than private queries to link to and from components of graphics (or any other data notation for which groves are constructed). The use of a component technology such as ActiveX is a good implementation fit for the grove model because it makes it easy to integrate new components into the system without disturbing existing components or requiring modification or re-linking of the core HyTime engine. In other words, the general grove-based approach naturally leads to a plug-in type implementation because it provides a general data model in terms of which all the components communicate. |
Appendix A. IsoView Property Set Definition Document |
|
<!DOCTYPE propset PUBLIC "ISO/IEC 10744:1997//DTD Property Set//EN" [
<![IGNORE[
=============================================================
IsoView Property Set
Public ID: +//IDN isodraw.com//DOCUMENT IsoView Property Set//EN
Version: 0.0
Author: W. Eliot Kimber
=============================================================
]]>
<!NOTATION IsoView PUBLIC "-//ISODraw//NOTATION IsoView Graphic//EN">
]>
<propset nsd=IsoView>
<classdef rcsnm=iviewrt appnm="IsoView root" conprop=docobj>
<desc>
The root of an IsoView grove.
<propdef rcsnm=docobj appnm="document object" nodelist subnode ac=grphobj>
<desc>
The root object of an IsoView graphic.
<note>
Analogous to the "docelem" property of the SGMLDoc object in the SGML
property set.
<propdef rcsnm=objects appnm="named objects" nmndlist irefnode ac=grphobj
acnmprop="id">
<desc>
A named node list of graphic objects with names.
<note>
Analogous to the "elements" property in the SGML property set.
<propdef rcsnm=viewprts appnm="viewports" nmndlist subnode ac=viewport
acnmprop=name>
<desc>
The viewports defined within a graphic.
</classdef>
<classdef rcsnm=grphobj appnm="graphic object" conprop=content>
<desc>
A graphic object within an IsoView graphic.
<propdef rcsnm=id string>
<desc>
The unique ID of the graphic object.
<propdef rcsnm=content nodelist subnode ac=grphobj>
<desc>
The child objects of this object
<propdef rcsnm=ishot appnm="is hotspot" boolean>
<desc>
Indicates whether or not the graphic object has been
identified as a hotspot.
</classdef>
<classdef rcsnm=viewport>
<desc>
A named viewport.
<propdef rcsnm=name string>
<desc>
The unique name of the viewport
</classdef> |
| Defining Reusable, Distributable Information Objects Using XML-Data Schemas | Table of contents | Indexes | Integrating product model and the documentation: A practical approach | |||