Edit online

How We Built and Maintain Our ISO 27001 ISMS Documentation

3 Nov 2026
Read time: 18 minute(s)

We explain how we built and maintain our ISO 27001 ISMS documentation with DITA, Git, Content Fusion, custom validation, and workflow automation.

Alongside the security measures we put in place, we needed an information security management system (ISMS): a practical way to define, run, review, and improve how we protect the business. Its documentation had to stay alive. It had to be easy to update, remind us when a review or procedure was due, let us initiate and track procedure runs, and keep a record of changes.Ok,

Here is how we approached it.

Why ISO-27001

Security protects the assets at the heart of a business. Cyberattacks are increasing, including attacks assisted by AI. Companies are responding not only by protecting their own systems, but also by checking that their providers are secure. This helps reduce supply-chain risk.

Figure 1. Attacks stopped by a wall of security controls

A single attack arrow, standing for cyberattacks, AI-assisted attacks and supply-chain risk, stopped by a wall of security controls in front of the business assets: data, code, systems and people.

Before we started certification, we already had many security controls in place. We wanted a certified system that would keep us focused on security and on improving those controls. That is why we chose ISO 27001.

We worked with a consultant to structure the policies before the official certification audit. You can also start with a policy kit: general policy stubs that you adapt to reflect your controls and organizational structure. The resulting policies feed into a Statement of Applicability: the document that records which ISO 27001 cPleasontrols apply to your organization, and why. You can share it with customers.

For each policy, we collected as much information as we could from our colleagues and used AI to merge it into the policy stubs. Then we reviewed the result to make sure it was accurate and that nothing important had been lost.

The internal basic wiki setup

Before certification, all our procedures already lived on our internal wiki. Because we develop Oxygen XML Editor, we were already familiar with structured technical documentation. We chose DITA, an XML-based standard that stores content as small, reusable topics, because we already had the tools to publish it and run reviews.

Our existing DITA wiki was stored in a shared Git repository, which gave us access control and a complete change history. We added a new ISMS chapter to its DITA map—the table of contents that organizes the topics—and created a topic for each piece of relevant information.

Certification needs

Maintaining ISMS documentation, or any other governance documentation, requires another level of organization:
  1. change history
  2. a form of access control
  3. an accountable owner and clearly assigned responsibilities; for procedures, we used RACI sections (Responsible, Accountable, Consulted, and Informed)
  4. a way to start and track standard operating procedures (SOPs) in our internal issue tracker
  5. a review timeline: each document needs a review date and review period
  6. a way to collaborate on and review documents
  7. a form to mark the documents as approved

The Git repository provided the change history and access control.

We also needed a way to define and validate the information that describes each document, such as its owner, status, and review period. For editing, change auditing, and collaborative review, we used Content Fusion. To run SOPs and send event notifications, we built a custom application.

Defining and validating metadata

In DITA, this descriptive information is called metadata. DITA already provides useful built-in metadata, such as the author, creation date, and modification date, alongside the document text.

What helped us most was that we could extend this metadata. We added our own name/value fields in the topic header—the structured information stored with each document. The following are the fields we used, including the scheduling fields that apply to SOPs:

Document ID POL
Classified INTERNAL/PUBLIC
Owner email address/role
Created date
Review period 6 months/1 year/2 years
Review status published/draft
Approval date date; its presence indicates that the document is approved
Revision number
Start date 2024-11-04
Repeats 6 months

Each procedure also has a RACI table. It makes clear who does the work, who is accountable, who is consulted, and who must be informed:

Responsible The one that would do the work
Accountable The one that is accountable for the work to be done properly
Consulted People that can be consulted
Informed People informed of the outcome

Each policy has a simpler, two-row responsibility table:

Responsible/Champion The ones following the policy
Authority Authority over the process

We then needed to keep this metadata reliable, so we added validation. We used Schematron, a set of rules for checking XML content. It can check complex relationships, including relationships across documents.

Our wiki already contained topics that defined the company structure in tables:
  • The table of roles, each with an abbreviation and a description
  • The table of groups, also with an abbreviation and a description
We used those lists in the Schematron rules to check that every name used in a RACI section matched a defined role or group.
Figure 2. Schematron checks metadata and RACI names

SOP and policy files, each with a metadata header and a RACI table, checked by Schematron for metadata integrity and for RACI names defined in the Roles and Groups tables.

Setting up policies and SOP templates

Based on this metadata, we created reusable SOP and policy templates. An SOP is a standard operating procedure: a repeatable set of steps for carrying out a process. Our SOPs are DITA task topics with a RACI table, prerequisites, steps, and a result. The policies are standard DITA topics with a minimum structure: scope, rationale, sections, and the simpler two-role responsibility table.

Writing the policies

Once the templates contained sample metadata, we used AI to help write the full set of policies. The approach was simple: our CTO took each control already in place, found the matching policy stub, and described the current implementation to AI Positron. It produced a first policy draft that we could review.

For the stubs not covered by existing controls, we assessed the risks and introduced new controls and policies.

Figure 3. Policies drafted with AI Positron and reviewed in a loop

Policy stubs and the current controls collected from the CTO and system administrators go to AI Positron; drafts and reviews loop until approved; the policies are linked from the Statement of Applicability.

All controls were listed in the Statement of Applicability, with links to the policies.

Collaborative review

Each document needs a review before approval. That is how we keep the information accurate.

We run Content Fusion Enterprise Server locally, so we used it for this. Content Fusion is a lightweight, Git-based DITA content management system (CMS). It made it easy to connect our existing wiki repository to a project and share it with the whole organization. Role-based access let us designate a few colleagues as authors, able to edit and create review tasks, while others could collaborate only in review tasks.

One useful Content Fusion feature is that several collaborators can work on the same document at once. They can edit with change tracking and add comments concurrently. Nobody has to wait for someone else to finish.

When a review is complete, the author can incorporate the suggested changes and create a new approved version. AI can also help smooth out the wording or bring together information from the comments.

SOPs are living documents that trigger events

In our company, we use a ticketing system. We needed execution tracking and an audit trail for the procedures that support our ISMS policies, so we used that system to manage them. The SOPs are authored once in the Content Fusion wiki project, then sent to the ticketing system as work items that people can carry out and close.

We built a Python web application that lets us push an SOP to the ticketing system. It shows each person a catalog of procedures and policies that match their role, with search and workflow-specific actions. For example, each SOP has a Push button. The application also has a calendar of documents due for review and a history view, so we can compare versions of the same document.

[screenshot from the dashboard]

Figure 4. From the wiki repository to the ticketing system

SOPs edited in Content Fusion and stored in Git, listed by the ISMS web app and pushed to the ticketing system as work items.

Another challenge was staying consistent over time. For example, changing passwords on some systems or replacing UPS batteries needs more than instructions. It also needs a calendar event, or it is easy to forget. We decided it was simpler to keep the calendar in the application. Everyone named in an SOP's RACI table receives an email when it is time to run that SOP or review a document. We can now update the metadata and let the system respond, without synchronizing separate calendars.

Figure 5. Scheduling driven by document metadata

Scheduling metadata of SOPs and policies in Git feeding the calendar of the ISMS web app, which emails the people named in each RACI table.

Publishing

We use Oxygen Publishing Engine, a command-line tool running on our continuous-integration server, to generate and republish the HTML documentation to our internal portal whenever content changes. This publishing infrastructure is also available in Content Fusion. You can also generate an LLMS.txt file set: a structured set of instructions that an AI agent can use as a reference when it carries out an action.

Figure 6. Publishing for people and for AI agents

Content Fusion publishing a DITA project with Oxygen Publishing Engine to a content delivery server, as HTML for people and LLMS.txt for AI agents.

To collect feedback outside the review workflow after publishing, we added Oxygen Feedback commenting to each page.

You can also add an edit link to each page so readers can propose a source change. The link opens the matching document in Content Fusion, where they can make the change in a personal workspace and create a review task. The document owner can then review and merge it into the main branch.

Conclusion

This is how we built an in-house ISMS using technical documentation tools. It has worked well for our ISO 27001 policies and for other company documents that benefit from the same approach.

Starting from version 29 of Oxygen, there will be a new project template available so you can use it to create new governance projects based on the ideas presented in this blog post.

Thank you for reading, and happy documenting! Please comment below if you would like more information.