Up to cover page | Back to ECMAScript | On to Appendices

WebCGM 2.1 — Application Configurable Items


9. Application Configurable Items

This chapter and its sections are normative, unless otherwise indicated.

Contents

9.1 Introduction

This section is informative (non-normative).

9.1.1 Scope and purpose

The WebCGM Application Configuration Items file (ACI) allows the user to improve font interchange by specifying a desired font mapping when WebCGM applications process WebCGM content.

The ACI file also provides a mechanism to specify default handling for certain CGM Version 3 elements that may not have a specific default treatment according to the rules of CGM:1999 or the WebCGM profile.

The ACI file is designed as a set of initialization directives for a viewer, and thus is intended to be associated with a viewer instance and processed once per viewer invocation. The normative specification of methods to associate an ACI file with a viewer is beyond the scope of this version of WebCGM. Some recommedations are given in this chapter.

9.1.2 Motivation

The use cases and requirements for the default-setting functionality of the ACI include several scenarios that the ACI file should satisfy:

  1. In Version 1 or Version 2 CGM files, it is not possible to control things like LINE CAP, which is a Version 3 CGM element. Viewers have to select a treatment at random. There is desire to be able to specify consistent and uniform treatment.
  2. In V3/V4 files, the CGM:1999-specified default for things like LINE CAP is: 1, "unspecified". CGM:1999 did this so that behavior of viewers would be backward compatible. I.e., the rendering of an otherwise identical file would not change purely based on "V1" versus "V3" in the metafile version. There is desire to be able to specify a consistent and uniform default.
  3. The CGM line types 1..5 (solid, dash, dot, dash-dot, dash-dot-dot) are generic in the sense that they only need to be recognizably per the description (e.g., dash-dot). Similarly for the 6 generic hatch styles. There is desire to be able to specify consistent and uniform treatment.

9.2 ACI content and conformance

9.2.1 File overview

The WebCGM Application Configurable Items (ACI) file is an XML instance specifying default values for various CGM Version 3 attribute and control elements, font substitutions to be performed by WebCGM processors . It is made up of a root element (<webcgmConfig>) followed by an optional font map (<fontMap>) element and an optional default attributes (<defaultAttributes>) element.

9.2.2 Identifiers for the ACI DTD

Public Identifier for WebCGM 2.1 ACI DTD:

PUBLIC "-//OASIS//DTD WebCGM 2.1 Config//EN"

System Identifier for the WebCGM 2.1 ACI DTD:

http://docs.oasis-open.org/webcgm/v2.1/webcgmConfig21.dtd

DOCTYPE example. he following is an example document type declaration for a WebCGM ACI document:

<!DOCTYPE webcgmConfig PUBLIC "-//OASIS//DTD WebCGM 2.1 Config//EN" "http://docs.oasis-open.org/webcgm/v2.1/webcgmConfig21.dtd">

9.2.3 Conformance of ACI files

A file is a conforming WebCGM 2.1 ACI document if:

9.2.4 Association of ACI files with viewers

This subsection is informative (non-normative).

Methods to associate an ACI file with a viewer — being operating system, viewer, and application dependent — are considered to be beyond the scope of the normative specifications of this version of WebCGM. To improve interoperability between the various providers of WebCGM 2.1 viewers, the following recommendations for associating an ACI file with a WebCGM 2.1 viewer are included.

It is recommended ACI file have the extension ".aci" (all lowercase) on all platforms.

To convey to a WebCGM 2.1 viewer the location of an ACI file, an environment variable name WebCGM_ACI_File is defined. This environment variable could be set at the time of the viewer installation or modified by a user. On Windows this should be System environment variable that would apply to all users.

Example:

WebCGM_ACI_File=c:/Documents and Settings/All Users/Application Data/CGM Open/WebCGM.aci

If it is not feasible for a viewer to set an environment variable during viewer installation, or if users are prohibited from doing so due to security policies that are becoming commonplace in large organizations, then the viewer should provide and document an alternative method for users to specify the ACI file search path, for example in a viewer preferences or configuration menu.

9.3 ACI elements

9.3.1 The 'webcgmConfig' element

An ACI file must have webcgmConfig as its root element.

<!ELEMENT webcgmConfig ( fontMap?, defaultAttributes? ) >

9.3.2 The 'fontMap' element

The fontMap element is the ACI mechanism for font substitution.

<!ELEMENT fontMap ( defaultFont?, mapList* ) >

9.3.2.1 The 'defaultFont' element

The defaultFont element specifies, via its useFont attribute, a string defining the font to be used when a requested mapping cannot be accomplished.

<!ELEMENT defaultFont EMPTY >
<!ATTLIST defaultFont
          useFont CDATA #REQUIRED >
        

Attribute definitions:
useFont="CDATA"
The default font to use when the specified font mapping cannot be accomplished. If the font(s) of mapList (substitutionList) are not available, and if defaultFont (useFont) is not available, then the fontMap element has no effect, and any viewer fallback action is viewer dependent. The syntax and normalization rules of useFont are the same as those of the substitutionList attribute, except that useFont shall have exactly one font-family name or generic name in its list.

9.3.2.2 The 'mapList' element

The mapList element specifies, via its cgmFont and substitutionList attributes, the font mapping to be performed before rendering of the image. Subject to the value of the forceSubstitution attribute (see below), if the metafile uses a font whose name matches cgmFont (after normalization of both font names as described below), then the viewer shall substitute the first available font in the priority-ordered list of the substitutionList attribute.

<!ELEMENT mapList EMPTY >
<!ATTLIST mapList
          forceSubstitution ( yes | no ) "yes"
          cgmFont CDATA #REQUIRED
          substitutionList CDATA #REQUIRED >
        

Attribute definitions:
forceSubstitution= { yes | no }
If 'yes', then the subsitution is unconditional — it is attempted regardless of whether or not the viewer has the font specified by cgmFont available. If 'no', then the substitution is conditional — the viewer only attempts the substitution if it does not have the font specified by cgmFont available.
cgmFont="CDATA"
The name of the font in the metafile for which font substitution is requested. Before attempting to match a font used in the metafile to the value (string) of cgmFont, both font names are normalized by a WebCGM-specific normalization: convert to lower-case; and strip out all whitespace, UNDERSCORE, and HYPHEN characters. Note: These normalization rules are derived from and intended for the substantial volume of existing metafiles that aim to invoke fonts from WebCGM's restricted core set of thirteen specific fonts (see T.16.13 of section 6.5) and that contain well-known and trivial deviations in the construction of those font names. The rules may be less useful outside of that intended scope. The target metafiles of these normalizations are most often, but not always, encoded in WebCGM's default character encoding of ISO 8859-1. After this WebCGM-specific normalization, correct and consistent results when comparing metafile font names to the cgmFont value — for font names outside of WebCGM's restricted core set of thirteen specific fonts — may require that WebCGM processors convert to a unicode normalization form before performing the comparison.
substitutionList="CDATA"
A comma-separated, priority-ordered list of comprised of font-family names (e.g., Arial) and generic names (e.g., san-serif). The processor shall use the first name in the substitutionList that it has available. The list syntax and normalization are derived from the specifications of CSS 2.0 [CSS20]. The values and syntax of the substitutionList attribute, as well as the normalization of that attribute, are derived from the definition of the font-family property in CSS 2.0 [CSS20]:

Example:

<mapList cgmFont="helvetica" substitutionList="Arial, 'FontCorp Swiss', sans-serif">

9.3.3 The 'defaultAttributes' element

The defaultAttributes element is the ACI mechanism to specify default values for certain CGM attribute and control elements whose default is otherwise under-specified in CGM:1999 and the WebCGM profile. This element, when processed at initialization time, will set default values for the applicable metafile elements. If the contents of the metafile, upon interpretation, explicitly set the applicable metafile element (either via METAFILE DEFAULTS REPLACEMENT or via the element itself in the body of the picture), then that explicit intra-metafile setting supersedes the defaultAttributes setting

<!ELEMENT defaultAttributes ( lineCap | edgeCap | lineJoin | edgeJoin 
                           | lineTypeCont | edgeTypeCont | mitreLimit 
                           | restrTextType | lineEdgeTypeDef | hatchStyleDef )+ >

It is possible to define the default values of the following Version 3 elements:

The parameter definition for each element is consistent with its associated ISO/IEC 8632:1999 CGM parameter definition.

9.3.3.1 The 'lineCap' element

The lineCap element is an EMPTY element that specifies the desired rendering of the end caps of lines and of dashes within lines.

<!ELEMENT lineCap EMPTY >
<!ATTLIST lineCap
          lineCapInd ( 1 | 2 | 3 | 4 ) #REQUIRED
          lineDashInd ( 1 | 2 | 3 ) #REQUIRED
>

Attribute definitions:
lineCapInd="1|2|3|4"
The line cap indicator is restricted to values of 1-4. (Note that the ISO/IEC 8632:1999 value "5" is disallowed in the WebCGM profile.)

Note (informative): in the CGM:1999 specification, the default value for the corresponding 'line cap indicator' parameter of the LINE CAP Attribute element is "1 (unspecified)."

lineDashInd="1|2|3"
The line dash indicator is restricted to values of 1-3 as defined in ISO/IEC 8632:1999.

Note (informative): in the CGM:1999 specification, the default value for the corresponding 'dash cap indicator' parameter of the LINE CAP Attribute element is "1 (unspecified)."

9.3.3.2 The 'edgeCap' element

The edgeCap element is an EMPTY element that specifies the desired rendering of the end caps of edges and of dashes within edges.

<!ELEMENT edgeCap EMPTY >
<!ATTLIST edgeCap
          edgeCapInd ( 1 | 2 | 3 | 4 ) #REQUIRED
          edgeDashInd ( 1 | 2 | 3 ) #REQUIRED 
>

Attribute definitions:
edgeCapInd="1|2|3|4"
The edge cap indicator is restricted to values of 1-4. (Note that the ISO/IEC 8632:1999 value "5" is disallowed in the WebCGM profile.)

Note (informative): in the CGM:1999 specification, the default value for the corresponding 'edge cap indicator' parameter of the EDGE CAP Attribute element is "1 (unspecified)."

edgeDashInd="1|2|3"
The edge dash indicator is restricted to values of 1-3 as defined in ISO/IEC 8632:1999.

Note (informative): in the CGM:1999 specification, the default value for the corresponding 'dash cap indicator' parameter of the EDGE CAP Attribute element is "1 (unspecified)."

9.3.3.3 The 'lineJoin' element

The lineJoin element is an EMPTY element that specifies the desired rendering of the join characteristics at vertices of the line element.

<!ELEMENT lineJoin EMPTY >
<!ATTLIST lineJoin
          lineJoinInd ( 1 | 2 | 3 | 4 ) #REQUIRED
>

Attribute definitions:
lineJoinInd="1|2|3|4"
The line join indicator is restricted to values of 1-4 as defined in ISO/IEC 8632:1999.

Note (informative): in the CGM:1999 specification, the default value for the corresponding 'line join indicator' parameter of the LINE JOIN Attribute element is "1 (unspecified)."

9.3.3.4 The 'edgeJoin' element

The edgeJoin element is an EMPTY element that specifies the desired rendering of the join characteristics at vertices of the edge element.

<!ELEMENT edgeJoin EMPTY >
<!ATTLIST edgeJoin
          edgeJoinInd ( 1 | 2 | 3 | 4 ) #REQUIRED
>

Attribute definitions:
edgeJoinInd="1|2|3|4"
The edge join indicator is restricted to values of 1-4 as defined in ISO/IEC 8632:1999.

Note (informative): in the CGM:1999 specification, the default value for the corresponding 'edge join indicator' parameter of the EDGE JOIN Attribute element is "1 (unspecified)."

9.3.3.5 The 'lineTypeCont' element

The lineTypeCont element of the ACI is an EMPTY element that specifies the desired rendering of the line type continuation characteristics of the line element.

<!ELEMENT lineTypeCont EMPTY >
<!ATTLIST lineTypeCont
          lineContMode ( 1 | 2 | 3 | 4 ) #REQUIRED
>

Attribute definitions:
lineContMode="1|2|3|4"
The line type continuation indicator is restricted to values of 1-4 as defined in ISO/IEC 8632:1999.

Note (informative): in the CGM:1999 specification, the default value for the corresponding 'continuation mode' parameter of the LINE TYPE CONTINUATION Attribute element is "1 (unspecified)."

9.3.3.6 The 'edgeTypeCont' element

The edgeTypeCont element is an EMPTY element that specifies the desired rendering of the edge type continuation characteristics of the edge element.

<!ELEMENT edgeTypeCont EMPTY >
<!ATTLIST edgeTypeCont
          edgeContMode ( 1 | 2 | 3 | 4 ) #REQUIRED
>

Attribute definitions:
edgeContMode="1|2|3|4"
The edge type continuation indicator is restricted to values of 1-4 as defined in ISO/IEC 8632:1999.

Note (informative): in the CGM:1999 specification, the default value for the corresponding 'continuation mode' parameter of the EDGE TYPE CONTINUATION Attribute element is "1 (unspecified)."

9.3.3.7 The 'mitreLimit' element

The mitreLimit element is an EMPTY element that specifies how line join at vertices are achieved.

<!ELEMENT mitreLimit EMPTY >
<!ATTLIST mitreLimit
          limitVal CDATA #REQUIRED
>

Attribute definitions:
limitVal="CDATA"
The mitre limit value is defined as a scale factor applied to current line and edge width. Valid values are non-negative real numbers. (See T.18.15 in section 6.7 for more particulars about MITRE LIMIT values.)

9.3.3.8 The 'restrTextType' element

The restrTextType element is an EMPTY element that specifies how text should fit within the restriction rectangle defined by the RESTRICTED TEXT element of CGM:1999.

<!ELEMENT restrTextType EMPTY >
<!ATTLIST restrTextType
          restrType ( 1 | 2 | 3 | 4 | 5 | 6 ) #REQUIRED
>

Attribute definitions:
restrType="1|2|3|4|5|6"
The restricted text type is restricted to value of 1-6 as defined in ISO/IEC 8632:1999.

Note (informative): in the CGM:1999 specification, the default value for the corresponding 'restriction type' parameter of the RESTRICTED TEXT TYPE Attribute element is "1 (basic)."

9.3.3.9 The 'lineEdgeTypeDef' element

The lineEdgeTypeDef element is an element that specifies the desired rendering of the standard line type in ISO/IEC 8632:1999.

<!ELEMENT lineEdgeTypeDef EMPTY >
<!ATTLIST lineEdgeTypeDef 
          lineIndex ( 1 | 2 | 3 | 4 | 5 ) #REQUIRED
          dashLength CDATA #REQUIRED
          repeatLength CDATA #REQUIRED
>

Attribute definitions:
lineIndex="1|2|3|4|5"
The line type index is restricted to value of 1-5 as defined in ISO/IEC 8632:1999.

dashLength="CDATA"
The dashLength attribute is a string that contains a list of non-negative integers in the format of the WebCGMString List-of-number subtype. The integers specify the lengths of each dash and gap in the defined line pattern in abstract units, that are then normalized as a whole pattern to the repeatLength attribute of lineEdgeTypeDef. The first integer corresponds to solid, the second to gap, the third to solid, etc.

repeatLength="CDATA"
The dash cycle repeat length defines the length of one complete repetition of the dash pattern in NVDC units.

9.3.3.10 The 'hatchStyleDef' element

The hatchStyleDef element specifies the desired rendering of the standard hatches in ISO/IEC 8632:1999.

<!ELEMENT hatchStyleDef EMPTY >
<!ATTLIST hatchStyleDef 
          hatchIndex ( 1 | 2 | 3 | 4 | 5 | 6 ) #REQUIRED
          styleInd ( parallel | crosshatch ) #REQUIRED
          directionVectors CDATA #REQUIRED
          gapWidth CDATA #REQUIRED
          lineTypeIndex CDATA #REQUIRED       
          cycleLength CDATA #REQUIRED
          numberOfLines CDATA #REQUIRED
>

Attribute definitions:
hatchIndex="1|2|3|4|5|6"
The hatch style index is restricted to value of 1-6 as defined in ISO/IEC 8632:1999.

styleInd="parallel|crosshatch"
The style indicator indicates whether the hatch pattern is made up of parallel lines or crosshatch lines.

directionVectors="CDATA"
The directionVectors attribute contains two vectors (four numbers) to define the directions of the hatch lines. Each vector is defined by an x-coordinate and y-coordinate in NVDC. If the style indicator is parallel, only the first vector is used, but both must be present. The 4 numbers of directionVectors are encoded in the format of the WebCGMString List-of-number subtype.

gapWidth="CDATA"
The gapWidth attribute defines the width between the lines in the hatch pattern. It is a list of positive integers encoded in theformat of the WebCGMString List-of-number subtype. The number of gap width integers in the list must equal the value of the number-of-lines attribute in the hatch style definition.

lineTypeIndex="CDATA"
The lineTypeIndex attribute defines the line types of the lines that make up the hatch pattern. It is a list of positive integers encoded in the format of the WebCGMString List-of-number subtype. The number of integers in the list must equal the value of the number-of-lines attribute in the hatch style definition. Valid values for list integers are 1-5.

cycleLength="CDATA"
The duty cycle length defines the length of one one complete repetition of the hatch pattern. It is measured perpendicular to the hatch lines and is in NVDC units.

numberOfLines="CDATA"

The number of hatch lines defines the number of entries in the list of gap widths and list of lines types.

9.4 The complete ACI DTD

The complete WebCGM Application Configurable Items (ACI) file DTD follows.

<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================================================ -->
<!-- This is the WebCGM Application Configurable Item file DTD        -->
<!-- for use with  WebCGM 2.1                                         -->
<!-- ================================================================ -->
<!-- Original issue: March 2008                                       -->
<!--                                                                  -->
<!-- Revision history:                                                -->
<!--     June 2008 - modified for changes to CD02 ACI text.           -->
<!--     March 2009 - changed 4 elements to attributes.               -->
<!--     April 2009 - fixed mapList, dashLength to proper camel-case. -->
<!--     May 2009 - removed "5" from lineCapInd, edgeCapInd.          -->
<!--     May 2009 - changed attributes to #REQUIRED in the elements   -->
<!--         lineCap, edgeCap, lineJoin, edgeJoin, lineTypeCont,      -->
<!--         edgeTypeCont, restrTextType.                             -->
<!--                                                                  -->
<!-- ================================================================ -->
<!--                                                                  -->
<!ELEMENT webcgmConfig ( fontMap?, defaultAttributes? )                 >

<!ELEMENT fontMap ( defaultFont?, mapList* )  >

<!ELEMENT defaultFont EMPTY                                             >
<!ATTLIST defaultFont 
          useFont CDATA #REQUIRED >

<!ELEMENT mapList EMPTY                                                 >
<!ATTLIST mapList
          forceSubstitution ( yes | no ) "yes" 
          cgmFont CDATA #REQUIRED 
          substitutionList CDATA #REQUIRED                              >
<!ELEMENT defaultAttributes ( lineCap | edgeCap | lineJoin | edgeJoin 
                            | lineTypeCont | edgeTypeCont | mitreLimit 
                            | restrTextType | lineEdgeTypeDef 
                            | hatchStyleDef )+                          >
<!ELEMENT lineCap EMPTY                                                 >
<!ATTLIST lineCap
          lineCapInd ( 1 | 2 | 3 | 4 ) #REQUIRED
          lineDashInd ( 1 | 2 | 3 ) #REQUIRED                           >

<!ELEMENT edgeCap EMPTY                                                 >
<!ATTLIST edgeCap
          edgeCapInd ( 1 | 2 | 3 | 4 ) #REQUIRED
          edgeDashInd ( 1 | 2 | 3 ) #REQUIRED                           >

<!ELEMENT lineJoin EMPTY                                                >
<!ATTLIST lineJoin
          lineJoinInd ( 1 | 2 | 3 | 4 ) #REQUIRED                       >

<!ELEMENT edgeJoin EMPTY                                                >
<!ATTLIST edgeJoin
          edgeJoinInd ( 1 | 2 | 3 | 4 ) #REQUIRED                       >

<!ELEMENT lineTypeCont EMPTY                                            >
<!ATTLIST lineTypeCont
          lineContMode ( 1 | 2 | 3 | 4 ) #REQUIRED                      >

<!ELEMENT edgeTypeCont EMPTY                                            >
<!ATTLIST edgeTypeCont
          edgeContMode ( 1 | 2 | 3 | 4 ) #REQUIRED                      >

<!ELEMENT mitreLimit EMPTY                                              >
<!ATTLIST mitreLimit
          limitVal CDATA #REQUIRED                                      >

<!ELEMENT restrTextType EMPTY                                           >
<!ATTLIST restrTextType
          restrType ( 1 | 2 | 3 | 4 | 5 | 6 ) #REQUIRED                 >

<!ELEMENT lineEdgeTypeDef EMPTY                                         >
<!ATTLIST lineEdgeTypeDef
          lineIndex ( 1 | 2 | 3 | 4 | 5 ) #REQUIRED
          dashLength CDATA #REQUIRED
          repeatLength CDATA #REQUIRED                                  >

<!ELEMENT hatchStyleDef EMPTY                                           >
<!ATTLIST hatchStyleDef 
          hatchIndex ( 1 | 2 | 3 | 4 | 5 | 6 ) #REQUIRED
          styleInd ( parallel | crosshatch ) #REQUIRED
          directionVectors CDATA #REQUIRED
          gapWidth CDATA #REQUIRED
          lineTypeIndex CDATA #REQUIRED       
          cycleLength CDATA #REQUIRED
          numberOfLines CDATA #REQUIRED                                 >

Back to top of chapter