Inera Core Implementation Guide
0.2.0 - ci-build Sweden

Inera Core Implementation Guide - Local Development build (v0.2.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

: DocBook to FHIR Narrative XHTML Mapping - JSON Representation

Draft as of 2025-12-09

Raw json | Download

{
  "resourceType" : "ConceptMap",
  "id" : "docbook-to-narrative",
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: ConceptMap docbook-to-narrative</b></p><a name=\"docbook-to-narrative\"> </a><a name=\"hcdocbook-to-narrative\"> </a><p>Mapping from https://inera.se/fhir/core/ValueSet/docbook-elements to http://hl7.org/fhir/ValueSet/narrative-xhtml-tags</p><br/><p><b>Group 1 </b>Mapping from <code>https://inera.se/fhir/core/CodeSystem/docbook-elements</code> to <code>http://hl7.org/fhir/narrative-xhtml</code></p><table class=\"grid\"><tr><td><b>Source Code</b></td><td><b>Relationship</b></td><td><b>Target Code</b></td><td><b>Comment</b></td></tr><tr><td>article (article (document root))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>div (&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;)</td><td>Root &lt;article&gt; becomes the required &lt;div&gt; wrapper for FHIR Narrative. All Narrative content must be inside this div.</td></tr><tr><td>section (section (document section))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>div-section (&lt;div class='section'&gt; or &lt;div id='section-id'&gt;)</td><td>Each &lt;section&gt; becomes a &lt;div&gt; with optional class='section' or id attribute for internal linking. Alternative: use Composition.section instead for structured sections.</td></tr><tr><td>info (info (metadata container))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#relatedto\" title=\"relatedto\">is related to</a></td><td>omit ((omit - metadata goes in resource elements))</td><td>Metadata from &lt;info&gt; (title, author, date) maps to Composition/DocumentReference resource elements, not Narrative.div</td></tr><tr><td>title (title (section or document title))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>heading (&lt;h1&gt;, &lt;h2&gt;, &lt;h3&gt; etc.)</td><td>In info/article: &lt;h1&gt;. In section: &lt;h2&gt; or deeper based on nesting. Consider using Composition.title instead of Narrative heading.</td></tr><tr><td>para (para (paragraph))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>p (&lt;p&gt;)</td><td>Direct mapping: &lt;para&gt; → &lt;p&gt;</td></tr><tr><td>emphasis (emphasis (inline emphasis with role attribute))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#relatedto\" title=\"relatedto\">is related to</a></td><td>span-varied (&lt;span&gt;, &lt;b&gt;, &lt;i&gt;, &lt;u&gt;, &lt;em&gt;, &lt;strong&gt; based on @role)</td><td>Map based on @role attribute - see role-specific mappings below</td></tr><tr><td>emphasis-bold (emphasis[@role='bold'])</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>strong (&lt;strong&gt; or &lt;b&gt;)</td><td>&lt;emphasis role='bold'&gt;text&lt;/emphasis&gt; → &lt;strong&gt;text&lt;/strong&gt; (semantic) or &lt;b&gt;text&lt;/b&gt; (visual)</td></tr><tr><td>emphasis-italics (emphasis[@role='italics'])</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>em (&lt;em&gt; or &lt;i&gt;)</td><td>&lt;emphasis role='italics'&gt;text&lt;/emphasis&gt; → &lt;em&gt;text&lt;/em&gt; (semantic) or &lt;i&gt;text&lt;/i&gt; (visual)</td></tr><tr><td>emphasis-underline (emphasis[@role='underline'])</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>u (&lt;u&gt; or &lt;span style='text-decoration:underline'&gt;)</td><td>&lt;emphasis role='underline'&gt;text&lt;/emphasis&gt; → &lt;u&gt;text&lt;/u&gt;</td></tr><tr><td>emphasis-collapsible (emphasis[@role='collapsible'])</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#relatedto\" title=\"relatedto\">is related to</a></td><td>details (&lt;div class='collapsible'&gt; (non-standard, requires JS))</td><td>FHIR Narrative doesn't support &lt;details&gt;. Use &lt;div class='collapsible'&gt; with custom CSS/JS, or expand all content in static view. Alternative: use separate Composition.section with emptyReason.</td></tr><tr><td>emphasis-bgcolor (emphasis[@role='bgcolor'])</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#relatedto\" title=\"relatedto\">is related to</a></td><td>span-highlight (&lt;span class='highlight'&gt; or &lt;span style='background-color:#ffff00'&gt;)</td><td>Use &lt;span&gt; with class or inline style for background color highlighting</td></tr><tr><td>emphasis-information (emphasis[@role='information'])</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#relatedto\" title=\"relatedto\">is related to</a></td><td>div-info-box (&lt;div class='info-box'&gt; (gray box in 1177))</td><td>Gray information box from 1177. Map to &lt;div class='info-box'&gt; with CSS for gray background. Content inside includes heading and list.</td></tr><tr><td>emphasis-observe (emphasis[@role='observe'])</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#relatedto\" title=\"relatedto\">is related to</a></td><td>div-warning-box (&lt;div class='warning-box'&gt; (yellow box in 1177))</td><td>Yellow warning/observe box from 1177. Map to &lt;div class='warning-box'&gt; with CSS for yellow background. Content inside includes heading and list.</td></tr><tr><td>emphasis-frame (emphasis[@role='frame'])</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#relatedto\" title=\"relatedto\">is related to</a></td><td>div-framed-box (&lt;div class='framed-box'&gt; (white bordered box in 1177))</td><td>White framed/bordered box from 1177. Map to &lt;div class='framed-box'&gt; with CSS for border. Content inside includes heading and paragraph.</td></tr><tr><td>ulink (ulink (external URL link))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>a-external (&lt;a href='url' target='_blank'&gt;)</td><td>&lt;ulink url='https://example.com' type='_blank'&gt;text&lt;/ulink&gt; → &lt;a href='https://example.com' target='_blank'&gt;text&lt;/a&gt;</td></tr><tr><td>link (link (internal document link))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>a-internal (&lt;a href='#anchor'&gt;)</td><td>&lt;link url='#section-id'&gt;text&lt;/link&gt; → &lt;a href='#section-id'&gt;text&lt;/a&gt;. Ensure target div has matching id attribute.</td></tr><tr><td>itemizedlist (itemizedlist (bulleted/unordered list))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>ul (&lt;ul&gt; or &lt;ul class='bullet'&gt; or &lt;ul class='hyphen'&gt;)</td><td>&lt;itemizedlist&gt; → &lt;ul&gt;. Use @mark attribute to determine list-style-type (bullet vs hyphen) via CSS class.</td></tr><tr><td>itemizedlist-bullet (itemizedlist[@mark='bullet'])</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>ul-bullet (&lt;ul style='list-style-type:disc'&gt; or &lt;ul class='bullet'&gt;)</td><td>Bullet list with disc markers (default for &lt;ul&gt;)</td></tr><tr><td>itemizedlist-hyphen (itemizedlist[@mark='hyphen'])</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>ul-hyphen (&lt;ul style='list-style-type:&quot;- &quot;'&gt; or &lt;ul class='hyphen'&gt;)</td><td>Hyphen list. Use CSS to change list markers to hyphens.</td></tr><tr><td>listitem (listitem (list item content))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>li (&lt;li&gt;)</td><td>&lt;listitem&gt; → &lt;li&gt; (both in itemizedlist/ul and variablelist/dl contexts)</td></tr><tr><td>variablelist (variablelist (definition/variable list))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>dl (&lt;dl&gt; (definition list))</td><td>&lt;variablelist&gt; → &lt;dl&gt;. Common in 1177 for key-value pairs (Datum: / Tisdag 10 mars 2022)</td></tr><tr><td>varlistentry (varlistentry (variable list entry))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>dt-dd-pair (&lt;dt&gt; + &lt;dd&gt; pair)</td><td>Each &lt;varlistentry&gt; contains one &lt;term&gt; (→ &lt;dt&gt;) and one &lt;listitem&gt; (→ &lt;dd&gt;)</td></tr><tr><td>term (term (variable list term))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>dt (&lt;dt&gt;)</td><td>&lt;term&gt;Datum:&lt;/term&gt; → &lt;dt&gt;Datum:&lt;/dt&gt;</td></tr><tr><td>varlistentry-listitem (listitem (in variablelist context))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>dd (&lt;dd&gt;)</td><td>&lt;listitem&gt;Tisdag 10 mars 2022&lt;/listitem&gt; → &lt;dd&gt;Tisdag 10 mars 2022&lt;/dd&gt; (in variablelist)</td></tr><tr><td>bibliography (bibliography (references section))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#relatedto\" title=\"relatedto\">is related to</a></td><td>div-references (&lt;div class='references'&gt; or &lt;h2&gt;Referenser&lt;/h2&gt; + content)</td><td>Create &lt;div class='references'&gt; section or use &lt;h2&gt;Referenser&lt;/h2&gt; followed by list. Alternative: use Composition.section for structured bibliography.</td></tr><tr><td>url-attribute (url attribute (for ulink/link))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>href-attribute (href attribute on &lt;a&gt;)</td><td>@url → @href</td></tr><tr><td>type-attribute (type attribute (for ulink/link))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#equivalent\" title=\"equivalent\">is equivalent to</a></td><td>target-attribute (target attribute on &lt;a&gt;)</td><td>@type='_blank' → @target='_blank' (opens in new window)</td></tr><tr><td>mark-attribute (mark attribute (for itemizedlist))</td><td><a href=\"http://hl7.org/fhir/R5/codesystem-concept-map-relationship.html#relatedto\" title=\"relatedto\">is related to</a></td><td>class-or-style (class or style attribute on &lt;ul&gt;)</td><td>@mark='bullet' → class='bullet', @mark='hyphen' → class='hyphen' or inline style for list-style-type</td></tr></table></div>"
  },
  "url" : "https://inera.se/fhir/core/ConceptMap/docbook-to-narrative",
  "version" : "0.2.0",
  "name" : "ConceptMapDocBookToNarrative",
  "title" : "DocBook to FHIR Narrative XHTML Mapping",
  "status" : "draft",
  "experimental" : false,
  "date" : "2025-12-09",
  "publisher" : "Inera AB",
  "contact" : [
    {
      "name" : "Inera AB",
      "telecom" : [
        {
          "system" : "url",
          "value" : "https://www.inera.se"
        },
        {
          "system" : "email",
          "value" : "info@inera.se"
        }
      ]
    },
    {
      "name" : "Inera AB",
      "telecom" : [
        {
          "system" : "url",
          "value" : "https://www.inera.se"
        },
        {
          "system" : "email",
          "value" : "info@inera.se"
        }
      ]
    }
  ],
  "description" : "Mapping between DocBook elements supported by 1177 Inkorg and FHIR Narrative.div XHTML.\n\nDocBook is the required format for 1177 Inkorg messages (AddMessage.Message.Text), but FHIR uses \nNarrative.div with a restricted XHTML subset (FHIR Narrative data type).\n\n**Source**: DocBook subset supported by 1177 Inkorg  \n**Target**: FHIR Narrative XHTML (limited XHTML 1.0 Strict subset)\n\n**FHIR Narrative Constraints**:\n- Only specific XHTML tags allowed: div, span, p, h1-h6, a, ul, ol, li, dl, dt, dd, b, i, u, em, strong, table, etc.\n- All content must be in a single <div xmlns='http://www.w3.org/1999/xhtml'> root\n- No DocBook-specific elements (article, section, emphasis[@role]) in output\n- Custom styling via @class or @style attributes where needed\n\n**Reference**: \n- https://inera.atlassian.net/wiki/spaces/OIIK/pages/3590029598/Docbook-formatering+av+meddelande\n- https://inera.atlassian.net/wiki/spaces/OIIK/pages/3590619160/DocBook+exempel\n- http://hl7.org/fhir/R4/narrative.html#Narrative",
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "SE",
          "display" : "Sweden"
        }
      ]
    }
  ],
  "purpose" : "Enable transformation between 1177 Inkorg DocBook format and FHIR Narrative.div for patient communications in DocumentReference and Composition resources",
  "sourceUri" : "https://inera.se/fhir/core/ValueSet/docbook-elements",
  "targetUri" : "http://hl7.org/fhir/ValueSet/narrative-xhtml-tags",
  "group" : [
    {
      "source" : "https://inera.se/fhir/core/CodeSystem/docbook-elements",
      "target" : "http://hl7.org/fhir/narrative-xhtml",
      "element" : [
        {
          "code" : "article",
          "display" : "article (document root)",
          "target" : [
            {
              "code" : "div",
              "display" : "<div xmlns='http://www.w3.org/1999/xhtml'>",
              "equivalence" : "equivalent",
              "comment" : "Root <article> becomes the required <div> wrapper for FHIR Narrative. All Narrative content must be inside this div."
            }
          ]
        },
        {
          "code" : "section",
          "display" : "section (document section)",
          "target" : [
            {
              "code" : "div-section",
              "display" : "<div class='section'> or <div id='section-id'>",
              "equivalence" : "equivalent",
              "comment" : "Each <section> becomes a <div> with optional class='section' or id attribute for internal linking. Alternative: use Composition.section instead for structured sections."
            }
          ]
        },
        {
          "code" : "info",
          "display" : "info (metadata container)",
          "target" : [
            {
              "code" : "omit",
              "display" : "(omit - metadata goes in resource elements)",
              "equivalence" : "relatedto",
              "comment" : "Metadata from <info> (title, author, date) maps to Composition/DocumentReference resource elements, not Narrative.div"
            }
          ]
        },
        {
          "code" : "title",
          "display" : "title (section or document title)",
          "target" : [
            {
              "code" : "heading",
              "display" : "<h1>, <h2>, <h3> etc.",
              "equivalence" : "equivalent",
              "comment" : "In info/article: <h1>. In section: <h2> or deeper based on nesting. Consider using Composition.title instead of Narrative heading."
            }
          ]
        },
        {
          "code" : "para",
          "display" : "para (paragraph)",
          "target" : [
            {
              "code" : "p",
              "display" : "<p>",
              "equivalence" : "equivalent",
              "comment" : "Direct mapping: <para> → <p>"
            }
          ]
        },
        {
          "code" : "emphasis",
          "display" : "emphasis (inline emphasis with role attribute)",
          "target" : [
            {
              "code" : "span-varied",
              "display" : "<span>, <b>, <i>, <u>, <em>, <strong> based on @role",
              "equivalence" : "relatedto",
              "comment" : "Map based on @role attribute - see role-specific mappings below"
            }
          ]
        },
        {
          "code" : "emphasis-bold",
          "display" : "emphasis[@role='bold']",
          "target" : [
            {
              "code" : "strong",
              "display" : "<strong> or <b>",
              "equivalence" : "equivalent",
              "comment" : "<emphasis role='bold'>text</emphasis> → <strong>text</strong> (semantic) or <b>text</b> (visual)"
            }
          ]
        },
        {
          "code" : "emphasis-italics",
          "display" : "emphasis[@role='italics']",
          "target" : [
            {
              "code" : "em",
              "display" : "<em> or <i>",
              "equivalence" : "equivalent",
              "comment" : "<emphasis role='italics'>text</emphasis> → <em>text</em> (semantic) or <i>text</i> (visual)"
            }
          ]
        },
        {
          "code" : "emphasis-underline",
          "display" : "emphasis[@role='underline']",
          "target" : [
            {
              "code" : "u",
              "display" : "<u> or <span style='text-decoration:underline'>",
              "equivalence" : "equivalent",
              "comment" : "<emphasis role='underline'>text</emphasis> → <u>text</u>"
            }
          ]
        },
        {
          "code" : "emphasis-collapsible",
          "display" : "emphasis[@role='collapsible']",
          "target" : [
            {
              "code" : "details",
              "display" : "<div class='collapsible'> (non-standard, requires JS)",
              "equivalence" : "relatedto",
              "comment" : "FHIR Narrative doesn't support <details>. Use <div class='collapsible'> with custom CSS/JS, or expand all content in static view. Alternative: use separate Composition.section with emptyReason."
            }
          ]
        },
        {
          "code" : "emphasis-bgcolor",
          "display" : "emphasis[@role='bgcolor']",
          "target" : [
            {
              "code" : "span-highlight",
              "display" : "<span class='highlight'> or <span style='background-color:#ffff00'>",
              "equivalence" : "relatedto",
              "comment" : "Use <span> with class or inline style for background color highlighting"
            }
          ]
        },
        {
          "code" : "emphasis-information",
          "display" : "emphasis[@role='information']",
          "target" : [
            {
              "code" : "div-info-box",
              "display" : "<div class='info-box'> (gray box in 1177)",
              "equivalence" : "relatedto",
              "comment" : "Gray information box from 1177. Map to <div class='info-box'> with CSS for gray background. Content inside includes heading and list."
            }
          ]
        },
        {
          "code" : "emphasis-observe",
          "display" : "emphasis[@role='observe']",
          "target" : [
            {
              "code" : "div-warning-box",
              "display" : "<div class='warning-box'> (yellow box in 1177)",
              "equivalence" : "relatedto",
              "comment" : "Yellow warning/observe box from 1177. Map to <div class='warning-box'> with CSS for yellow background. Content inside includes heading and list."
            }
          ]
        },
        {
          "code" : "emphasis-frame",
          "display" : "emphasis[@role='frame']",
          "target" : [
            {
              "code" : "div-framed-box",
              "display" : "<div class='framed-box'> (white bordered box in 1177)",
              "equivalence" : "relatedto",
              "comment" : "White framed/bordered box from 1177. Map to <div class='framed-box'> with CSS for border. Content inside includes heading and paragraph."
            }
          ]
        },
        {
          "code" : "ulink",
          "display" : "ulink (external URL link)",
          "target" : [
            {
              "code" : "a-external",
              "display" : "<a href='url' target='_blank'>",
              "equivalence" : "equivalent",
              "comment" : "<ulink url='https://example.com' type='_blank'>text</ulink> → <a href='https://example.com' target='_blank'>text</a>"
            }
          ]
        },
        {
          "code" : "link",
          "display" : "link (internal document link)",
          "target" : [
            {
              "code" : "a-internal",
              "display" : "<a href='#anchor'>",
              "equivalence" : "equivalent",
              "comment" : "<link url='#section-id'>text</link> → <a href='#section-id'>text</a>. Ensure target div has matching id attribute."
            }
          ]
        },
        {
          "code" : "itemizedlist",
          "display" : "itemizedlist (bulleted/unordered list)",
          "target" : [
            {
              "code" : "ul",
              "display" : "<ul> or <ul class='bullet'> or <ul class='hyphen'>",
              "equivalence" : "equivalent",
              "comment" : "<itemizedlist> → <ul>. Use @mark attribute to determine list-style-type (bullet vs hyphen) via CSS class."
            }
          ]
        },
        {
          "code" : "itemizedlist-bullet",
          "display" : "itemizedlist[@mark='bullet']",
          "target" : [
            {
              "code" : "ul-bullet",
              "display" : "<ul style='list-style-type:disc'> or <ul class='bullet'>",
              "equivalence" : "equivalent",
              "comment" : "Bullet list with disc markers (default for <ul>)"
            }
          ]
        },
        {
          "code" : "itemizedlist-hyphen",
          "display" : "itemizedlist[@mark='hyphen']",
          "target" : [
            {
              "code" : "ul-hyphen",
              "display" : "<ul style='list-style-type:\"- \"'> or <ul class='hyphen'>",
              "equivalence" : "equivalent",
              "comment" : "Hyphen list. Use CSS to change list markers to hyphens."
            }
          ]
        },
        {
          "code" : "listitem",
          "display" : "listitem (list item content)",
          "target" : [
            {
              "code" : "li",
              "display" : "<li>",
              "equivalence" : "equivalent",
              "comment" : "<listitem> → <li> (both in itemizedlist/ul and variablelist/dl contexts)"
            }
          ]
        },
        {
          "code" : "variablelist",
          "display" : "variablelist (definition/variable list)",
          "target" : [
            {
              "code" : "dl",
              "display" : "<dl> (definition list)",
              "equivalence" : "equivalent",
              "comment" : "<variablelist> → <dl>. Common in 1177 for key-value pairs (Datum: / Tisdag 10 mars 2022)"
            }
          ]
        },
        {
          "code" : "varlistentry",
          "display" : "varlistentry (variable list entry)",
          "target" : [
            {
              "code" : "dt-dd-pair",
              "display" : "<dt> + <dd> pair",
              "equivalence" : "equivalent",
              "comment" : "Each <varlistentry> contains one <term> (→ <dt>) and one <listitem> (→ <dd>)"
            }
          ]
        },
        {
          "code" : "term",
          "display" : "term (variable list term)",
          "target" : [
            {
              "code" : "dt",
              "display" : "<dt>",
              "equivalence" : "equivalent",
              "comment" : "<term>Datum:</term> → <dt>Datum:</dt>"
            }
          ]
        },
        {
          "code" : "varlistentry-listitem",
          "display" : "listitem (in variablelist context)",
          "target" : [
            {
              "code" : "dd",
              "display" : "<dd>",
              "equivalence" : "equivalent",
              "comment" : "<listitem>Tisdag 10 mars 2022</listitem> → <dd>Tisdag 10 mars 2022</dd> (in variablelist)"
            }
          ]
        },
        {
          "code" : "bibliography",
          "display" : "bibliography (references section)",
          "target" : [
            {
              "code" : "div-references",
              "display" : "<div class='references'> or <h2>Referenser</h2> + content",
              "equivalence" : "relatedto",
              "comment" : "Create <div class='references'> section or use <h2>Referenser</h2> followed by list. Alternative: use Composition.section for structured bibliography."
            }
          ]
        },
        {
          "code" : "url-attribute",
          "display" : "url attribute (for ulink/link)",
          "target" : [
            {
              "code" : "href-attribute",
              "display" : "href attribute on <a>",
              "equivalence" : "equivalent",
              "comment" : "@url → @href"
            }
          ]
        },
        {
          "code" : "type-attribute",
          "display" : "type attribute (for ulink/link)",
          "target" : [
            {
              "code" : "target-attribute",
              "display" : "target attribute on <a>",
              "equivalence" : "equivalent",
              "comment" : "@type='_blank' → @target='_blank' (opens in new window)"
            }
          ]
        },
        {
          "code" : "mark-attribute",
          "display" : "mark attribute (for itemizedlist)",
          "target" : [
            {
              "code" : "class-or-style",
              "display" : "class or style attribute on <ul>",
              "equivalence" : "relatedto",
              "comment" : "@mark='bullet' → class='bullet', @mark='hyphen' → class='hyphen' or inline style for list-style-type"
            }
          ]
        }
      ]
    }
  ]
}