The DITA Open Toolkit project uses DITA features and other open-source tools like Git, Gradle, Jekyll and Travis to build the toolkit documentation included in distribution builds and published on the project website at dita-ot.org.
Open Toolkit Docs Process How the DITA Open Toolkit project builds documentation infotexture Information Architecture & Content Strategy Roger W. Fienhold Sheen
" Agenda The DITA Open Toolkit project uses DITA features and other open-source tools like Git, Gradle, Jekyll and Travis to build the toolkit documentation included in distribution builds and published on the project website at dita-ot.org. 1. Content management & collaboration 2. DITA features 3. Automatically generating topics 4. Continuous integration 5. Building the project website 6. Edit This Page!
is our Content Management System We use Git, a distributed version control system, to track changes to the documentation source files. Git provides many of the basic features of content management systems: version control file comparison via diff tools file history via the git log change attribution via git blame variant management via branching release management via tagging
branching strategy GitFlow uses a series of branches and procedural conventions to organize the software development process and assist in release management. The master branch reflects a production-ready state; contains only merge commits. The develop branch is the main integration branch with latest changes for the next release; automatic builds for each commit. Feature branches (or “topic” branches) isolate related changes during development of the next release; branch from & merge to develop . Release branches are used to prepare a new production release; branch from develop , merge to develop & master . Hotfix branches track bugfixes for production releases; branch from master , merge to develop & master .
GitHub collaboration GitHub provides free code hosting, project management and collaboration tools for open-source projects. Track issues with labels & milestones Plan releases with project Kanban boards Discuss & approve proposed changes in pull requests Comment on commits or individual lines with code review tools
DITA features The DITA Open Toolkit project uses various recent DITA features in the documentation builds, including: subjectScheme classification for controlling available attributes profiling and (branch) filtering (novice/expert content) extending topics with conref push keys and key references XML mention domain
features — subject schemes Various topics, sections and elements in the docs are profiled by audience: <li id="novice-variables-last" audience="novice"> <p id="common-format-info"><varname>format</varname> is the output format (transformation type). Use the same values available for the <parmname>transtype</parmname> build parameter, for example, <codeph>html5</codeph> or <codeph>pdf</codeph>.</p> </li> An “audience” subject scheme controls the values that are available for the @audience attribute: <subjectdef keys="audience"> <subjectdef keys="novice"/> <subjectdef keys="expert"/> <subjectdef keys="xslt-customizer"/> </subjectdef>
features — branch filtering Re-using and (branch) filtering profiled content The Getting Started section pulls a subset of the build description from the User Guide, filtered to display only content deemed suitable for novice users: <topicref href="../user-guide/using-dita-command.dita" copy-to="using-dita-command.dita" keys="first-build-using-dita-command"> <topicmeta> <navtitle>Building output</navtitle> </topicmeta> <ditavalref href="../resources/novice.ditaval"> <ditavalmeta> <dvrResourcePrefix>first-build-</dvrResourcePrefix> </ditavalmeta> </ditavalref> </topicref> The same content appears later in the User Guide with additional information on arguments, options and examples.
features — conref push The docs build uses the conref push mechanism (specifically @conaction="pushafter" ) to extend the parameter descriptions embedded in the default plug-ins: <plentry id="args.csspath"> <pt> <parmname>args.csspath</parmname> </pt> <pd conaction="mark" conref="parameters-base-html.dita#base-html/args.csspath.desc"/> <pd conaction="pushafter" audience="xslt-customizer">Corresponds to the XSLT parameter <parmname>CSSPATH</parmname>. DITA-OT will copy the file to this location.</pd> </plentry> The pushed content appears in the output after the default description: TIP: You could also use the same mechanism to extend the documentation with custom information that applies only to your company’s toolkit distribution.
features — keys and key references The key-definitions.ditamap defines keys for version references, re-usable links, etc. This key definition defines the latest maintenance release: <keydef keys="maintenance-version"> <topicmeta> <keywords> <keyword>2.3.3</keyword> </keywords> </topicmeta> </keydef> In topics, the keyword is used in place of hard-coded version references: <title>DITA Open Toolkit <keyword keyref="maintenance-version"/> Release Notes</title>
features — XML mention domain The docs use the XML mention domain to mark up XML elements and attributes: <li id="1777"> DITA 1.3: Initial support has been added for the <xmlatt>orient</xmlatt> attribute on <xmlelement>table</xmlelement> elements. These changes allow Antenna House Formatter to render tables in landscape mode when the <xmlatt>orient</xmlatt> attribute is set to <option>land</option>. […] </li> When the toolkit generates output for the sample above: the XML element name is wrapped in angle brackets as <table> the attribute name is prefixed with an “at” sign as @orient
generating topics The docs build generates new topics from plug-in code via Ant & XSLT: the error message overview — with Additional details column via conref push parameter listings extension points — new in 2.4 <antcall> <target name="generate-msg-topic"/> <target name="generate-params-topic"/> <target name="generate-extension-points-topic"/> <target name="generate-properties-file"/> </antcall> Plus an annotated properties file template you can use for your own builds: <target name="generate-properties-file" depends="init" description="Regenerate annotated .properties file"> <property name="propfile.xsl" location="${basedir}/resources/properties-file.xsl"/> <property name="propfile.input" location="${resource.dir}/plugins.xml"/> <property name="propfile.output" location="${doc.samples.dir}/properties/template.properties"/> <xslt in="${propfile.input}" out="${propfile.output}" style="${propfile.xsl}" force="yes"/> </target>
integration — Gradle build tool Gradle is a next-generation build tool that understands Ant files and offers significant performance advantages. Build caching makes builds faster Incremental builds — build only what has changed The --continuous option re-runs the build whenever source files change DITA Open Toolkit Gradle Plugin The dita-ot-gradle plug-in by DITA-OT contributor Eero Helenius runs DITA-OT from Gradle, and significantly faster than running the toolkit directly. You can publish all .ditamap files in a directory at once, or publish the same document multiple times with different parameters. We use the DITA Open Toolkit Gradle Plugin to publish the docs on the website, and for local testing to ensure output is generated correctly before committing.
CI builds for each push Travis CI provides continuous integration and automated testing for open-source projects. Travis runds the Gradle site build whenever new commits are pushed to the develop branch and deploys the output to dita-ot.org when the build passes.
the project website The DITA-OT project website is published via GitHub pages to dita-ot.org. The website is maintained in DITA, Markdown and HTML, versioned in Git and updated by pushing commits to the repository at github.com/dita-ot/dita-ot.github.io. GitHub pages is powered by Jekyll, an open source tool like DITA-OT that transforms files in one format with variables and templates, and generates output. Like DITA keys in a project map, variables like version: "2.3.3" are defined in Jekyll’s _config.yml file and referenced in source files using Liquid syntax: {{site.version}} . <a href="https://github.com/dita-ot/dita-ot/releases/download/{{site.version}}/dita-ot-{{site.version}}.zip"></a> Jekyll supports Sass: “Syntactically Awesome Style Sheets”, which extends CSS with variables, nesting, partials, imports and inheritance.
the documentation The Documentation section is maintained in DITA using the source files from the DITA Open Toolkit documentation repository at github.com/dita-ot/docs. The OT docs are transformed to HTML5 using the org.dita-ot.html plugin, which extends the default html5 transformation with additional processing. The site plug-in adds Bootstrap classes and YAML metadata to the generated HTML fragments, and Jekyll templates in the site repository provide the base layout: <body> {% include header.html %} <div id="content" class="container-fluid container"> <div class="row"> <!-- ↓ Here there be DITA… --> {{ content }} </div> </div> {% include footer.html %} {% include search.html %} {% include help.html %} </body>
This Page! The page footers in the development documentation include Edit this page links that open the DITA source file for the topic in oXygen XML Web Author. The web-based authoring workflow prompts users to log in to GitHub and fork the dita-ot/docs repository if necessary. Changes saved in the authoring environment are committed to a new branch, and a pull request is created to submit changes for review by the DITA-OT documentation team.
Feedback Visit http://www.dita-ot.org/dev/ for the latest docs. Create an Issue If you find a bug — and you don’t know how to fix it, create an issue to request changes. Create a Pull Request Or — if that all sounds too complicated — just click the Edit this page link. Links, Slides & Contact http://infotexture.net/2016/11/dita-open-toolkit-documentation-process & [email protected] # GitHub, ' Twitter @infotexture