[Date Prev][Date Next]
[Thread Prev][Thread Next]
[Date Index]
[Thread Index]
[New search]
To: "FrameSGML List" <FrameSGML@xxxxxxxxxxx>, "Free Framers" <framers@xxxxxxxxx>
Subject: Anomalies/Bugs in FM+SGML V5.5.6 & V6.0
From: Dan Emory <danemory@xxxxxxxxxxxx>
Date: Mon, 14 May 2001 00:34:39 -0700
Sender: owner-framers@xxxxxxxxx
A TALE OF TWO CALS TABLES Has anyone else noted the two anomalies described below, which occur in both V5.5.6 and V6.0 of FM+SGML? ANOMALY 1: An error is logged when "nmtoken" is used in any attribute read/write rule. For example: nmtoken attribute "tgroupstyle" is fm property table format; number attribute "colsep" is fm property column ruling; In the case above, an error is produced for the first rule above when checking the read/write rules for an application definition in which the referenced DTD declares the tgroupstyle attribute to be of type NMTOKEN. In chapter 21 of the Developer's guide the attribute rule is declared to have the form: [sgmldv] attribute "attr" {... subrule; ...} Where sgmldv (SGML attribute type) is allowed to have the legal values: cdata, name, names, nmtoken, nmtokens, number, numbers, nutoken, nutokens, entity, entities, notations, id, idref, idrefs, and group. For some reason, however, any attempt to use nmtoken anywhere in the read/write rules (not just tables) is logged as an error when checking the read/write rules, even though the DTD declares the affected attributes to be of type NMTOKEN. ANOMALY 2 relates to the translation, on export to SGML, of (what I consider to be) two different CALS-compliant tables. I have a DTD which declares two types of CALS-compliant tables, as follows: =============================================== <!-- TABLE TYPE 1 -- > <!ELEMENT Table - - (Title?, tgroup)> <!ATTLIST Table frame (top|bottom|topbot|all|sides|none) #IMPLIED colsep NUMBER #IMPLIED rowsep NUMBER #IMPLIED orient (port|land) port pgwide NUMBER #IMPLIED > <!ELEMENT tgroup - O (colspec*, spanspec*, thead?, tfoot?, tabody) > <!ATTLIST tgroup cols NUMBER #REQUIRED tgroupstyle NMTOKEN #IMPLIED colsep NUMBER #IMPLIED rowsep NUMBER #IMPLIED align (left|right|center|justify|char) left charoff NUTOKEN 50 char CDATA #IMPLIED > <!ELEMENT tbody - O (row+) > <!ELEMENT row - O (entry+) > <!ATTLIST row rowsep NUMBER #IMPLIED > <!ELEMENT entry - O ((Para | Unlist | Numlist | Note | Graphic | (Warning*, Caution*))+) > <!ATTLIST entry namest NMTOKEN #IMPLIED nameend NMTOKEN #IMPLIED spanname NMTOKEN #IMPLIED colname NMTOKEN #IMPLIED colsep NUMBER #IMPLIED rowsep NUMBER #IMPLIED morerows NUMBER #IMPLIED rotate NUMBER #IMPLIED valign (top|bottom|middle) top align (left|right|center|justify|char) left charoff NUTOKEN #IMPLIED char CDATA #IMPLIED > <!ELEMENT thead - O (row+) > <!ATTLIST thead valign (top|middle|bottom) bottom > <!ELEMENT tfoot - O (row+) > <!ATTLIST tfoot valign (top|middle|bottom) bottom > <!ELEMENT colspec - O EMPTY> <!ATTLIST colspec align (left|center|right|justify|char) #IMPLIED char CDATA #IMPLIED charoff NUTOKEN #IMPLIED colname NMTOKEN #IMPLIED colnum NUMBER #IMPLIED colsep NUMBER #IMPLIED colwidth CDATA #IMPLIED rowsep NUMBER #IMPLIED > <!ELEMENT spanspec - O EMPTY> <!ATTLIST spanspec align (left|center|right|justify|char) #IMPLIED char CDATA #IMPLIED charoff NUTOKEN #IMPLIED colsep NUMBER #IMPLIED nameend NMTOKEN #REQUIRED namest NMTOKEN #REQUIRED rowsep NUMBER #IMPLIED spanname NMTOKEN #REQUIRED > <!-- TABLE TYPE 2. Note that this table type shares elements Row, Entry, Thead, Tfoot, Colspec, and Spanspec with TABLE TYPE 1 --> <!ELEMENT Tabdat - - (Effect?, Title?, Tabgroup)> <!ATTLIST Tabdat frame (top|bottom|topbot|all|sides|none) #IMPLIED colsep NUMBER #IMPLIED rowsep NUMBER #IMPLIED orient (port|land) port pgwide NUMBER #IMPLIED > <!ELEMENT Tabgroup - O (colspec*, spanspec*, thead?, tfoot?, tabody) > <!ATTLIST Tabgroup cols NUMBER #REQUIRED tgroupstyle NMTOKEN #IMPLIED colsep NUMBER #IMPLIED rowsep NUMBER #IMPLIED align (left|right|center|justify|char) left charoff NUTOKEN 50 char CDATA #IMPLIED > <!ELEMENT tabody - O (row+) > =================================================================== Elements Tgroup and Tabgroup are specified in the EDD as being the two Table elements. Attributes which equate to fm properties (e.g., Tgroupstyle) in the CALS table model elements are not included in the EDD, nor are the colspec and spanspec elements included in the EDD. The only relevant deviation between the two table types is the use, in TABLE TYPE 2, of elements Tabgroup and Tabody, which replace elements Tgroup and Tbody used in TABLE TYPE 1. In the EDD, the content models for elements Table, Tabdat, Tgroup, and Tabgroup are as follows: Element Table General Rule: Title?, Tgroup Element (Table) Tgroup General Rule: Thead?, Tbody, Tfoot? Element Tabdat General Rule: Effect?, Title?, Tabgroup Element (Table) Tabgroup General Rule: Thead?, Tabody, Tfoot? The read/write rules for both table types are (except for the element name differences described above) identical, and conform exactly to those set forth in Appendix C of the Developer's Guide. I created an FM+SGML test file into which the EDD element definitions had been imported. In this file, I created two identical tables, one using Table Type 1, the other using Table Type 2. Each table had 5 columns, a heading row, two body rows and a footing row. One of the body rows, and the footing rows, had horizontal straddles across two columns. Also, one of the columns had a vertical straddle across both body rows. I exported the test file to SGML and then imported the SGML instance back into FM+SGML. The Table Type 1 table survived the round-trip completely intact. In the Table Type 2 table, the vertical straddle survived, but the two horizontal straddles did not, and the text in the columns of the same row that were to the right of the straddles was shifted one column to the left, leaving the fifth column empty. For both table types, the exported value in the Tgroupstyle attribute matched the name of the FM table tags used to create the two tables, and, on import to TM+SGML, the values of Tgroupstyle produced tables using the same table tags that were originally used to create the two tables in the test file. Upon examining the resulting SGML instance produced from the test file, I found that colspecs were correctly produced for each column in Table Type 1, but none were produced for Table Type 2. Also, FM+SGML had properly reversed the positions of the Tbody and Tfoot elements in Table Type 1, but that reversal was not performed for Table Type 2, despite the fact that the Tabgroup content model in the DTD specified that the order should be Tfoot?, Tabody. I also experimented with removing element Title from the content models for Table and Tabdat and moving it (in both the DTD and the EDD) to the first position in the content models for elements Tgroup and Tabgroup respectively. The EDD and read/write rules were also modified to specify that the Title element was now a Table Title Element. The test file was modified to put the table titles inside the two tables (everything else about two table structures and content were unchanged), and the test file was again exported to SGML. In this test, FM+SGML discarded the Title element in Table Type 1, but properly preserved the Title element in Table Type 2, Otherwise, Table Type 1 round-tripped intact, and the same anomalies described previously occurred again in Table Type 2. My conclusion is that, although the content models and attributes for the Table Type 2 elements fully conform to the CALS table model, the two element name discrepancies (Tabgroup instead of Tgroup, Tabody rather than Tbody) causes FM+SGML to assume that, on export, Table Type 2 was not compliant with the CALS table model, hence no colspecs, and no switching of the positions of Tabody and Tfoot were produced, even though, in both tables, all of the attributes corresponding to table properties in the Entry element were properly produced on export. Nothing in the Developer's Guide suggests that the element names for CALS tables must exactly match the element names given in Appendix B of the Developer's Guide, nor does the Developer's Guide state anywhere that a table title element included in the Tgroup content model of an otherwise fully CALS-compliant table will be arbitrarily thrown away on export, without even producing an error log message which reports that action. ==================== | Nullius in Verba | ==================== Dan Emory, Dan Emory & Associates FrameMaker/FrameMaker+SGML Document Design & Database Publishing Voice/Fax: 949-722-8971 E-Mail: danemory@primenet.com 177 Riverside Ave., STE F, #1151, Newport Beach, CA 92663 ---Subscribe to the "Free Framers" list by sending a message to majordomo@omsys.com with "subscribe framers" (no quotes) in the body. ** To unsubscribe, send a message to majordomo@omsys.com ** ** with "unsubscribe framers" (no quotes) in the body. **