dita message
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
| [List Home]
Subject: Lightweight DITA proposal - 13076
- From: Michael Priestley <mpriestl@ca.ibm.com>
- To: dita <dita@lists.oasis-open.org>
- Date: Tue, 20 Mar 2012 09:34:19 -0400
Thanks to Kris Eberlein, Don Day, Chris Nitchie,
and Robert Anderson for help whipping this initial proposal into shape.
The goal is to create a lightweight DITA
framework that can ease adoption for casual, contributing, or non-technical
authors. We want to make both editing and specialization easier for vendors
to support by limiting options and choice points.
There is a related proposal 13051 for defining
starter sets of constrained content models, where we can add more explicit
specializations or examples of these constraints in use. For example, 13051
could include a starter set for the DITA concept/task/reference specializations.
Here are my thoughts for the core content models and specialization architecture.
I've tried to simplify both the content models and attribute models to
eliminate redundancy, and wherever possible support just one way of doing
things. I've tried to simplify the specialization architecture to the point
where a complete and valid specialization could be easily generated from
a simple set of forms. Here they are:
Simplified topic content model
<topic> contains title, shortdesc, body
<shortdesc> contains text or ph
<body> contains section
<section> contains p, ul, ol, simpletable, image
<p> contains text, ph, xref
<ph> contains ph, text
<xref> contains text
<ul>/<ol> contain li
<li> contains p
<simpletable> contains 1 sthead (optional), strow
<sthead>/<strow> contain <stentry>
<stentry> contains p, ul, ol
<image> contains <alt>
<alt> contains text
Total: 16 elements
Simplified topic attribute model
All attributes are optional for specializers except @id on topic, @href
on xref and image, and the defaulted @domains and @class attributes. Each
attribute or set of attributes below can be included/excluded through predefined
constraints.
Conditional content: @props on section, p, ul, ol, simpletable, strow,
li, image
Content reuse: @id/@conref on section, p, ul, ol, simpletable, strow, li,
image
Variable links: @keyref on xref
Variable content: @keyref on ph, image
Class extension: @outputclass on everything
A note on href: to simplify the linking model,
the format and scope attributes are omitted, and their values derived from
context. Format will be taken from the file extension (eg .dita, .html),
and scope will be local unless the link starts with http://,
when it becomes external.
Total, if all enabled: 6 editable attributes plus 2 defaulted ones
Simplified map content model
<map> contains title, topicref
<title> contains text or ph
<ph> contains ph or text
<topicref> contains topicmeta (or modify base topicref model to contain
<title> as option before topicmeta)
<topicmeta> contains navtitle
<navtitle> contains text or ph
Total: 6 elements (5 if we add title to topicref base, so we can eliminate
the topicmeta containment layer)
Simplified map attribute model
All attributes are optional for specializers, except the defaulted @domains
and @class attributes. Each attribute or set of attributes below can be
included/excluded through predefined constraints.
Referencing content: @href on topicref
Variable and metadata control: @keys on topicref
Conditional content: @props on map, topicref
Content reuse: @id/@conref on topicref
Variable text: @keyref on ph
Variable links: @keyref on topicref
Class extension: @outputclass on everything
Total, if all enabled: 6 editable attributes plus 2 defaulted ones
Some prepackaged map/attribute combos
TOC map: Referencing content (@href)
TOC/Variable link map: Referencing content, Variable/metadata control (@href,
@keys)
Variable text/metadata control map: Variable/metadata control (@keys)
A final thought on the DTDs/XSDs: I think it could make sense to
actually implement these as subset DTDs, rather than using redefinition
of the content model entities in the existing DTDs (topic.mod etc.), so
that the DTDs/XSDs themselves are easier to understand. This would give
us at the TC a few more files to maintain, but considerably less complexity
to manage.
---------------------------------------------------------
Now on to the specialization architecture:
Simplified specialization model
topic: can be specialized to give a semantic container name to the content.
Only structural specialization allowed.
section: can create new section specializations as domains that can then
be integrated into new topic types using constraints to impose order
ph: can create new ph specializations as domains
@props: can create new conditional processing attributes as domains
Total specializable elements/attributes: 4
So a new topic type would be constructed by:
1) Defining a new container name (topic element specialization)
2) Pulling in a particular set of section specializations in a particular
order (like <goals>, <agenda>, <minutes>, <actionitems>)
3) Choosing the attribute and inline semantics to enable (@props and ph
specializations)
A new section type domain would be constructed by:
1) Defining a new container name (section element specialization)
2) Defining its content model - I'd suggest either a single content element
from p, ul, ol, simpletable, or allow everything
------------------------------------------------------
Finally, some thoughts on a specialization/authoring prototyping architecture.
With the simplified rules above, it should be really simple to get someone
up and running with authoring and publishing. We could even choose to define
topic templates for defining new topic types and new domains, which people
could fill in and then feed to a transform to get the actual DTDs/XSDs
plus editor-specific and publishing-specific overrides.
Example:
<topictypedefinition id="mtgnotes">
<title>Meeting Notes</title>
<shortdesc>A topic type for taking notes
on meetings</shortdesc>
<body>
<sections><!--contains
simpletable-->
Section reference
| Generated heading
| Authoring prompt
|
<xref keyref="goals"/>
| Goals
| Describe the goals of the meeting
|
<xref keyref="agenda"/>
| Agenda
| List the agenda items
|
<xref keyref="minutes"/>
| Minutes
| Record discussion |
</sections>
</body>
</topictypedefinition>
<sectiontypedefinition id="agenda">
<title>Agenda</title>
<shortdesc>A reusable section definition
for listing agenda items</shortdesc>
<body>
<contentmodel>
<ul>...</ul>
</contentmodel>
</body>
</sectiontypedefinition>
Etc.
From the definition above, a tool could generate DTDs/XSDs, authoring templates,
and output overrides. A simple form of authoring template could be just
HTML5 output with the authoring prompts included, and title and section
content set to contentEditable="true".
Another advantage of having a higher-level
definition of the specialization might be that we could generate both a
subset-DTD version (easy to understand) and a full-DTD-compatible one (easy
to integrate with full DITA), in case there is someone who needs to pull
specialized elements from both architectures into a single DTD.
Let me know what you think.
Michael Priestley, Senior Technical Staff Member (STSM)
Lead IBM DITA Architect
mpriestl@ca.ibm.com
http://dita.xml.org/blog/25
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
| [List Home]