OASIS Open Mailing List Archives  ·  All Lists  ·  dita  ·  2020-05

dita — archive

[Date Prev]  |  [Thread Prev]  |  [Thread Next]  |  [Date Next]   —  [Date Index]  |  [Thread Index]  |  [Month Index]  |  [List Home]

Feedback request: design for loosening specialization rules


I've finally started working on my stage 3 proposal for loosening specialization rules. Looking back at the stage 2 proposal, it's very light on technical detail, so I'm working through those now, and could use some input, especially from technically-oriented folks. There are three design goals to this proposal: 1. Allow an attribute domain to add @base specializations to specific elements instead of globally. For example, this would allow developers to add custom table rendering controls only to table-related elements. 2. Allow "domain-local" element declarations - elements declared in a domain but not "published" to their base elements' alternative lists. For example, this would enable developers to create <xref> specializations with required child elements that only apply within that specialized <xref> (the example in stage to was <legislationref> with a nested <legislationsectionref> element). This might be legal in DITA 1.3; the spec, so far as I can tell, is ambiguous. 3. Allow domain elements to be inserted into specific content models instead of globally. For example, adding <sectiondescription> as a specialization of <p> only allowed within <section> and <example>. My proposed solution for (1) - context-specific @base specializations: a. Every element declares a "{elementName}-base-attr" parameter entity (DTD) or pattern (relax-ng) that is empty by default. b. Attribute domains declaring context-specific @base specializations publish them via a "{domainName}-{targetElement}-attribute" parameter entity. <! ENTITY % customTableRendering-d-entry-attribute "table-shading CDATA #IMPLIED table-fg CDATA #IMPLIED"> <! ENTITY % customTableRendering-d-row-attribute "table-shading CDATA #IMPLIED table-fg CDATA #IMPLIED"> <! ENTITY % customTableRendering-d-tgroup-attribute "table-shading CDATA #IMPLIED table-fg CDATA #IMPLIED"> <! ENTITY % customTableRendering-d-tbody-attribute "table-shading CDATA #IMPLIED table-fg CDATA #IMPLIED"> <! ENTITY % customTableRendering-d-thead-attribute "table-shading CDATA #IMPLIED table-fg CDATA #IMPLIED"> <! ENTITY % customTableRendering-d-table-attribute "table-shading CDATA #IMPLIED table-fg CDATA #IMPLIED"> <! ENTITY % customTableRendering-d-att "a(base shading) a(base table-fg)"> c. DTD Doctype shells are responsible for merging various attribute domains' context-specific contributions to their target elements via their {elementName}-base-attr parameter entities. Relax-ng integration happens automatically. (I haven't actually figured out the relax-ng code yet but I think this works.) <! ENTITY % entry-base-attr "%customTableRendering-d-entry-attribute;"> <! ENTITY % row-base-attr "%customTableRendering-d-row-attribute;"> <! ENTITY % tgroup-base-attr "%customTableRendering-d-tgroup-attribute;"> <! ENTITY % tbody-base-attr "%customTableRendering-d-tbody-attribute;"> <! ENTITY % thead-base-attr "%customTableRendering-d-thead-attribute;"> <! ENTITY % table-base-attr "%customTableRendering-d-table-attribute;"> My proposed solution for (2) is simple; explicitly allow it in the spec. No new grammar file structures are required. Goal (3) is trickier. I considered something similar to solution (1) - a parameter entity that can be "published to" by domains for every element - but that won't work for content models other than choice lists. So instead I'm considering something like the following: 1. Create an element domain that contains domain-local declarations of the elements you want to inject into specific contexts. 2. Create a "constraint" module - though it's not actually a constraint - that adds those elements to their target context(s). I'd love some feedback on all this, but especially item (3). Thanks, Chris

[Date Prev]  |  [Thread Prev]  |  [Thread Next]  |  [Date Next]   —  [Date Index]  |  [Thread Index]  |  [Month Index]  |  [List Home]