Up to cover page |Back to Application configuration
In addition to thelisted editors ofthis specification, the following individuals have contributed significantly tothe present WebCGM 2.1 specification:
Additionally, the following individuals made signficant contributions topredecessor versions, WebCGM 2.0 and WebCGM 1.0:
This section is informative (non-normative).
WebCGM 2.1 builds uponWebCGM2.0 and adds these new features:
In addition, the WebCGM 2.1 makes these clarifications and other changes toWebCGM 2.0:
A complete listing of all text changes since WebCGM 2.0 can be found in the"Change log" section.
Note: Throughout the previous published versions of this specification (20080917 and20090130), the newfeatures that WebCGM 2.1 added to WebCGM 2.0 were highlighted. In this version,only the differences from the previous Last Call Working Draft (20080917) arehighlighted, in a style similar to the item #11 above.
This section is informative (non-normative).
Note: The following subsections document all significant changes appliedto the WebCGM 2.0 specification to derive this draft of the WebCGM 2.1specification.
This Recommendation includes the below editorialcorrections to theProposedRecommendation version.
A complete listing of all prior text changes since WebCGM 2.0 can be foundin thePRversion's "Change log" section.
This section and its subsections are informative(non-normative).
Topics such as internationalization and accessibility have been addressed byW3C in other Recommendations available on theTechnical Reports page. The relationshipbetween the specifications of technology modules, such as this one, and thosecross-cutting recommendations is discussed in theSpecificationGuidelines. As suggested in the Specification Guidelines, this sectionidentifies some relationships between the capabilities afforded by WebCGMfeatures and accessibility requirements established by otherRecommendations.
Although a WebCGM metafile is a binary file format, it has systematicgrouping and annotation features that foster accessibility of WebCGM metafilecontent. For example, graphical text is ideally stored as Unicode text stringswithin the metafile, but to handle cases where graphical text images areactually the result of other vector (e.g. stroking) or raster (e.g., bitmaps)graphics in the metafile, WebCGM has the attribute 'content' on the para and subparaobjects, that gives the text-string equivalent of the rendered graphicaltext.
Features that are in the binary metafile itself will, unlike clear-textformats such as HTML, XML, and SVG, require the cooperation and intervention ofthe WebCGM authoring tools and viewers. As described in[Essential Components of WebAccessibility], several components such as authoring tools, media viewersand developers, have to work together to improve Web accessibility. Therefore,the discussions in the following sections are recommendations to contentdevelopers, and builders of authoring tools and viewers.
By Guideline 9 "Provide navigation mechanisms" of [UAAG10] a WebCGM viewer is expected tolet users interact with 'enabled' and significant objects in the image.'Enabled' objects are those which accept user input, such as on screen buttons.By the structure of WebCGM, each APS should be treated as a significant objectand be reachable by navigation techniques. By Guideline 1 "Support input andoutput device independence" the reach of keyboard-actuated navigation shouldcover this whole set of navigation destinations.
Some notion of forward and backward motion among peer nodes in the WebCGMimage should be provided. This should by default move among paragraphs andsub-paragraphs in the order in which they appear in the metafile. The creatorsof WebCGM instances should ensure that this results in a sensible readingorder. However, efficient motion as called for in [UAAG10]Checkpoint9.9, is not likely to result from one global list or loop of all theplausible navigation destinations. Exploiting the structure of the metafile,structured navigation could take hierarchical or categorical forms. Inhierarchical navigation, forward and back motion moves among peer nodes at thesame level in the layers-and-objects nesting tree. In categorical navigation,the sequential navigation could exhibit navigation modes which visit only'grobject' nodes, or only the 'gropbject' nodes with a common 'name.' Anexample of hierarchical navigation is provided by the player behavior for the[DAISY] standard digital talking book. An example of categorical structurednavigation is provided by the diverse navigation modes of the Opera browser.The creators of WebCGM instances should ensure that the layers-and-objectsnesting forms a plausible table of contents as annotated with the textualproperties (see E.3 below) of the affected nodes, and that collecting nodes oflike 'name' forms meaningful slices of what is in the scene.
In this version of WebCGM, there are no intra-metafile controls to alter thenavigation graph. In a scenario where such capability is desired, theprivate-namespace extension feature ofthe XCF can be used to introduce further intelligence associated with thecontents of the metafile proper.
Web Content Accessibility Guidelines such as [WCAG10] require that essentialinformation be available in text form. Some key examples are:
WebCGM contains attributes that associate text with things in the depictedscene, and can be used to meet these requirements.
This essential content, if not always presented to the user, must beconsidered 'conditional content' in the sense of [UAAG10],Checkpoint2.3. That checkpoint gives some latitude to the viewer as to whether topresent these attributes globally through view-mode controls or locally inresponse to focus and inspect actions of the user.
WebCGM viewers should also make this textual information available to assistivetechnology through the accessibility API appropriate to the programmingplatform, following [UAAG10],Guideline6.
Note. It might be thought that the 'name' APS attribute could or shouldbe used in a manner like 'alt' on 'img' in HTML. This is not the design intentof the 'name' attribute. It has well-defined category, not instance, semanticsand associated categorical navigation behavior.
WebCGM versions 2.0 and higher support transient, display-time control ofa number of display properties ofobjects. These can be manipulated via the WebCGM DOM, and are also availablevia the XCF mechanism. Although WebCGM does not supportconventional styling, an (external) XCF canfunction similarly to an external style sheet. For improved accessibility,WebCGM viewers should provide some user control of rendering. Use of thesemechanisms partially supports the recommendations of [WCAG10],Checkpoint 3.3 and[UAAG10],Guideline4.
By default, WebCGM viewers allow the user to navigate to and interact withonly enabled elements (i.e. element whose 'visibility' attribute is 'on').Objects which are not visible do not display tooltips (the 'screentip' APSattribute), may not be highlighted without making them visible, and may not benavigated to via the picture behaviors (whether in picture fragments or DOM srcparameter).
In addition, WebCGM viewers can offer a mode where, at user option, the 'visibility' attribute is ignored,for accessibility or debugging support. It meets a requirement of [UAAG10],CheckPoint9.3.
This section is informative (non-normative).
The advanced example in this section shows how the functionality of theWebCGMAppStructure interface can be used tobuild useful convenience functions, in this case a function to search a WebCGMinstance for all APS that contain an APS Attribute of a given type, whose valuematches a given regular expression (regex).
EXAMPLE:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>WebCGM 2.0 regex example</title> <script type="text/ecmascript"> var cgm; var pic; var mydiv; var o; var nl; var res; function loadCGM(fname) { try {var obj = document.getElementById('image');obj.innerHTML = "<object id='cgm' type='image/cgm;Version=4;ProfileId=WebCGM' width='400' height='300' src='"+fname+"'>";document.getElementById('cgm').getWebCGMDocument().src = fname;cgm = document.getElementById('cgm').getWebCGMDocument();pic = cgm.firstPicture;mydiv = '<h2>Looking at file '+fname+'</h2>\n';mydiv += '<p>Enter an attribute and regular expression then click the Submit button.</p>\n'; mydiv += '<form name="myform">\n'; mydiv += '<select name="attr">\n'; mydiv += '<option value="content">content</option>\n'; mydiv += '<option value="interactivity">interactivity</option>\n'; mydiv += '<option value="layerdesc">layerdesc</option>\n'; mydiv += '<option value="layername">layername</option>\n'; mydiv += '<option value="linkuri">linkuri</option>\n'; mydiv += '<option value="name">name</option>\n'; mydiv += '<option value="region">region</option>\n'; mydiv += '<option value="screentip">screentip</option>\n'; mydiv += '<option value="viewcontext">viewcontext</option>\n'; mydiv += '<option value="visibility">visibility</option>\n'; mydiv += '</select>\n'; mydiv += '<input type="text" name="regex" size="20"></input>\n'; mydiv += '<input type="button" value="Submit"></input>\n'; mydiv += '</form>\n';var t = document.getElementById('attinput');t.innerHTML = mydiv; } catch (e) { alert("loadCGM error " + e); } } function processAttr(att, val) { try {o = '<p>Searching APS for attribute '+att + ' containing '+val+'</p>\n';// Create a list of nodes and print out the attribute// This part is not really needed it is mostly here as // a sanity check.nl = listNodes(pic.firstChild);o+='<p>List of all nodes in the DOM tree. A "" implies normally means the attribute was not specified.</p><ul>';for(i=0; i< nl.length; i++){ o+='<li>'+nl[i].apsId+' ('+att+'="'+nl[i].getAppStructureAttr(att)+'")</li>';}o+='</ul>';// Now we just run through the list and remove nodes that do not matchres = new Array();for(i=0; i<nl.length;i++) { attVal = nl[i].getAppStructureAttr(att); if(attVal.match(val)) { res.push(nl[i]); }}if( res.length < 1) { o += '<p>No nodes found matching that regular expression</p>\n';} else { o+= '<p>The following nodes match the regular expression</p><ul>'; for(i=0; i< res.length; i++){ o+='<li>'+res[i].apsId+' ('+att+'="'+res[i].getAppStructureAttr(att)+'")</li>'; } o+='</ul>';}var t = document.getElementById('attout');t.innerHTML = o; } catch(e) {alert("processAttr error " + e); } }// These are helper functions that I found on the web // http://www.ibm.com/developerworks/xml/library/x-matters41.html// // They are needed because you need to walk the tree to // create a list of all of the nodes in the tree.// return next node in document orderfunction nextNode(node) { if (!node) return null; if (node.firstChild){ return node.firstChild; } else { return nextWide(node); }}// helper function for nextNode()function nextWide(node) { if (!node) return null; if (node.nextSibling) { return node.nextSibling; } else { return nextWide(node.parentNode); }}// return an WebCGMNodeList of all nodes, starting at startNode and// continuing through the rest of the DOM treefunction listNodes(startNode) { var node = startNode; var list = new Array(); while(node) { list[list.length] =node; node = nextNode(node); } return list;} </script></head><body><h1>WebCGM 2.0 regex example</h1><table> <tr> <td>Select a CGM image...</td> </tr></table><br><input size="60" type="file" name="cgmfile" onChange="loadCGM(this.value)"/><div></div><div></div></body></html>
Viewthis example as HTML-CGM (WebCGM-DOM-enabled browsers only.)