Purpose: Provide general purpose display of CDA release 2 (Specification: ANSI/HL7 CDAR2)
and CDA release 3 (Specification: currently in ballot) documents, and be a starting
point for people interested in extending the display. This stylesheet displays all
section content, but does not try to render each and every header attribute. For header
attributes it tries to be smart in displaying essentials, which is still a lot.
License: Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
History: This stylesheet stands on the shoulders of giants. The stylesheet is the cumulative
work of several developers; the most significant prior milestones were the foundation
work from HL7 Germany and Finland (Tyylitiedosto) and HL7 US (Calvin Beebe), and the
presentation approach from Tony Schaller, medshare GmbH provided at IHIC 2009. The
stylesheet has subsequently been maintained/updated by Lantana Group (US) and Nictiz
(NL).
TODO
Fix for Mobile Safari (iOS 6): doesn't support opening the table of contents
Fix a problem where the footer div will not be rendered by browsers when an iframe
exists (pdf usually)
Revisions
01/17/2019 AH, v4.0.1
Approved all changes in beta 1 and beta 2 as-is except for the addition of IHE PCC
MCV. The StrucDoc WG feels that this addition needs some more thought before a decision
on re-adding it can be made.
Added support for patient/languageCommunication
Added support for patientRole/providerOrganization
Added support for informationRecipient/intendedRecipient/receivedOrganization
Updated rendering of nonXMLBody and observationMedia to check for Base64 content before
checking text/plain. This fixes support for Base64 encoded text/plain.
When showing other than complete content, do something special to show that the entire
section is empty. See Section 3.1.5.3.1 for an example.
No. TODO? How?
xHistoric
Content is Historic When showing content that was assessed, these data should be hidden.
See Section 3.1.5.3.2 for an example.
No. TODO? How?
xAssessed
Content Assessed/Discussed this visit
When showing content that was assessed, these data shall be shown. See Section 3.1.5.3.2
for an example.
No. TODO? How?
xDetail
Extra Detail – not necessarily for Patients
When showing patient related views, this content may be omitted. See Section 3.1.5.3.3
for an example.
No. TODO? How?
xDate
Content is a Date
Show as a date.
No. TODO? How?
xDateTime
Content is a Date with Time
Show as a date with time.
No. TODO? How?
xCode
Content is a code from some code system.
Show as a code.
No. TODO? How?
xPhone
Content is a telephone number
Show as a phone number.
No. TODO? How?
xEmail
Content is an email address
Show as an email address.
No. TODO? How?
xAddress
Content is a Street Address
Shows an address.
No. TODO? How?
xPersonName
Content is a person name
Show as the name of a person.
No. TODO? How?
xIdentifier
Content is an identifier
Show as an identifier.
Yes. Rendered with red font color
xAlert
The content contains information of importance that needs to be used to alert the
reader, for example level of severity considered life threatening.
Show in some manner to indicate an Alert.
Yes. Rendered with red font color
xAbnormal
The content contains information that may be considered to be not within what are
considered to be normal values.
Show in some manner to indicate a value that is not normal.
No. TODO? How? Just display:none or with javascript for unhide?
xHidden
Content may typically be repetitive and unnecessary to display.
Hide the content.
Yes. Rendered in italics
xLabel
The content is a label of some data, e.g., Refills:
Show content as a label.
Yes. No specifics
xValue
The content contains a data that is a value, e.g., 98.6
Show content as a clinical item status value.
Yes. No specifics
xReaction
The content represents text about a reaction.
Show content as a reaction.
Yes. No specifics
xComment
The content is comment text.
Show as a comment.
Yes. text-align: center
xCenter
Text to be centered
Alignment should be centered.
Yes. text-align: right
xRight
Text to be right justified
Alignment should be right.
Yes. text-align:left
xLeft
Text to be left justified
Alignment should be left.
Yes. font-family: monospace
xMono
Text to be output in a monospace font
Render in a monospace font.
Yes. background-color: yellow; color: black;
xHighlight
Text to be highlighted
Render with highlight.
Yes. render an hr element
xHR
A horizontal line is to be drawn
Render a horizontal line.
Yes
xRowNormal
For example, to indicate an odd numbered row of a table.
Render table row as normal.
Yes
xRowAlt
For example, to indicate an even numbered row of a table.
Render table row as alternate.
Yes
xIndent
Render content indented.
Yes
xSecondary
This content is of secondary importance.
Render in some manner to indicate this content is of secondary importance, for example
in a lighter font color.
Yes
xRowGroup
This is used on table rows to show that children and parent objects are related
Keep lines from appearing between child objects and their parents in a table together
Yes
xContentWrapping
This is used to keep the text in the first column from wrapping under the bullets
that appear for child objects inside of a table
Prevent text from wrapping under child objects
Added support for patient/languageCommunication
Added support for patientRole/providerOrganization
Added support for informationRecipient/intendedRecipient/receivedOrganization
11/13/2018 AH, v4.0.1 beta 1
Updated rendering of nonXMLBody and observationMedia to check for Base64 content before
checking text/plain. This fixes support for Base64 encoded text/plain.
10/02/2018 AH, v4.0.0
Administrative rename to final product after StrucDoc committee approval
09/26/2018 AH, v4.0.0 beta 8
Fixed an issue that for certain ids would cause a warning "Non-text output nodes are
ignored when writing an attribute, comment, or PI" and/or "Cannot write an attribute
node when no element start tag is open"
Fixed an issue for caption elements under anything but a table, e.g. a list, where
the text content would be duplicated
08/31/2018 AH, v4.0.0 beta 7
Consistency update. Changed all US English label names to use Camel Casing
Added OID labels for SNOMED CT, ICD-10-NL, ICD-10-DE, ICD-10-CM
Added support for originalText and translation rendering on coded elements, regardless
of nullFlavor status
Fixed a bug that would occur when AD.useablePeriod exists and added rendering support
when it does
08/27/2018 AH, v4.0.0 beta 6
Improved rendering of empty (sub)sections
Added various more OID translations like the NHS Number
Extended the l10.xsd to include an enumeration for language, and made attributes required
Fixed all uppercase language codes in l10n file
Improved rendering of confidentialityCode in the title when the code is not from x_BasicConfidentialityKind
Removed illegal css instruction "float: top;" on documentheader, documentbody and
documentfooter
Hide expand/collapse triangle for sections upon print
Added support for collapsing/expanding all or selected (sub) sections
Fix for empty elements causing XHTML grief
Improved rendered warning for potential malicious contents
Improved rendering of inFulFillment
Improved rendering of names by eliminating leading/trailing spaces, and by rendering
only the first name in the header. All names are in the footer.
Improved rendering of addresses by pulling buildingNumberSuffix into the address line
08/05/2018 AH, v4.0.0 beta 4
Added support to mask or skip patient ids based on a comma separated list of @root values. Masking will cause xxx-xxx-xxx
to appear with a mouse over that states "masked"
Now renders subsection almost the same way as top level sections including any overriding
authors/informants/subjects, section numbering. The difference lies in increasing
left indenting for every subsection
06/19/2018 AH, v4.0.0 beta 3
Fixed a bug in rendering ClinicalDocument/confidentialityCode causing it not to get
rendered
Based on physician feedback: header labels are now all bold (was normal), header values
are now all normal (was italic). This leads to more focus on what's important
Based on physician feedback: Patient-IDs now all go on a new line when the view becomes
too small to be on one line (was: line wrapped). This is always true for print
Based on physician feedback: More space between Patient header parts
Based on physician feedback: Updated encounter/code label from "Code" to "Type" as
it caused confusion
Smarter interval of time rendering: when both low/high are on the same date, renders
date only once, so "January 12, 2018 10AM -0500 - 11PM -0500" instead of "from January
12, 2018 10AM -0500 to January 12, 2018 11PM -0500"
Now renders id/@assigningAuthorityName as title on an id. This was not rendered at
all before. May need better solutions for that info in future update
Smart rendering of addresses. Now skips rendering of streetName, houseNumber, houseNumberNumeric
when there is a streetAddressLine. Now renders postalCode next to city (leading/trailing
depending on CDA order)
Fixed rendering issue in outlining of authenticator and legalAuthenticator in the
footer
05/23/2018 AH, v4.0.0 beta 2
Rerouted rendering of narrative block renderMultiMedia to rendering of nonXMLBody
so there's now one block of logic and security checks on that. At the same time this
extends the support for types of renderMultiMedia as originally only gif and jpeg
were supported. At least some ELGA examples now render their PDF contents correctly.
Fixed rendering of caption elements when not under a table
Fixed duplicate rendering of ids for footnotes
Updated all @name based anchors to @id based anchors for xhtml alignment
Added new parameters for skipping the rendering of the CDA header info at the top
of the document (dohtmlheader) and/or footer (dohtmlfooter)
Fix for visibility in the TOC of empty sections as specified by the StrucDoc WG with
section/@nullFlavor
Fix in documentationOf: don't render @classCode if ACT as that doesn't hold information,
and improved serviceEvent/performer contact detail rendering
Fix for missing space in rendering of time intervals
Update localization function for the compressed l10n structure
Update menu behavior. Now only expands sublevels (if any) when hovering the parent
04/11/2018 Alexander Henket
Updated rendering of documentationOf/serviceEvent/@classCode so it does not render
if it is 'ACT'
Fixed a bug in rendering documentationOf/serviceEvent/code (it was inadvertently not
rendered)
Added rendering of documentationOf/serviceEvent/performer name in the document header
Added rendering of documentationOf/serviceEvent/performer contact details in the document
footer
Fixed l10n for keys typeCode-PRP, typeCode-PPRP and typeCode-SPRP. Each last P should
have been an F.
Little tweak to author to avoid rendering of additional commas when certain content
is missing
Skip timestamp seconds when they are 00. Skip minutes and seconds when they are 00:00.
Both for readability.
03/24/2018 Alexander Henket
Added parameter menu-depth with min 1, max 3, default 1 (the way it always has been)
-- temporarily left on 3 for browser testing
02/16/2018 Alexander Henket
Moved header authenticator so it is right above legalAuthenticator instead of just
under participant
Improved readability. Moved contact details for all header participants (recordTarget,
author, informant, authenticator, legalAuthenticator, ...) to the right instead of
underneath the participant name.
02/15/2018 Alexander Henket
Fixed rendering of serviceEvent/code, location/healthCareFacility/id, order/code,
order/priorityCode, consent/code, consent/statusCode
Fixed casing of "inFulfillmentOf" and added call to it under documentationOf (GForge#3169)
Render recordTarget regardless of nullFlavor in id. (GForge#3590)
Added support for encompassingEncounter dischargeDispositionCode, sdtc:admissionReferralSourceCode,
encounterParticipant
Added support for ClinicalDocument/versionNumber, ClinicalDocument/setId, and relatedDocument
(it was not called)
(CDA R2.1) Added support for hl7:admissionReferralSourceCode
(CDA R2.1) Added support for Person/desc as div under name
(CDA R2.1) Added support for Person/birthTime
(CDA R2.1) Added support for relatedDocument/@inversionInd
(CDA R2.1) Added support for serviceEvent/statusCode
(CDA R2.1) Added support for section subject/relatedSubject/subject/birthTime | deceasedTime
| deceasedInd | multipleBirthInd | multipleBirthOrderNumber | raceCode | ehtnicGroupCode
12/15/2017 Alexander Henket
Reimplemented security fix from Rick Geimer, Lantana, that does full checking on narrative
table components
Fixed capitals in iframe properties WIDTH and HEIGHT
Added support for looking up an author organization name based on orgsanization id
Fixed getting the relatedDocument/parentDocument/id
Enhanced rendering of date/time. Now renders with AM/PM in English and with h or u
on 24h clock otherwise if at least hours are present.
10/20/2014 Alexander Henket
Fixed support for recordTarget/patient extensions deceasedInd/deceasedTime and multipleBirthInd/multipleBirthOrderNumber.
They were inadvertently called in the HL7 namespace.
10/13/2014 Alexander Henket
Fixed @ID by adding it to whatever in scope element (div, sup, sub, a, etc.) as @id.
To this end the separate calls were replaced by a central call in mode 'handleSectionTextAttributes'.
10/02/2014 Alexander Henket
Fixed linkHtml support as it was calling the wrong named template and thus would not
render at all.
08/28/2014 Alexander Henket
Adjusted time zone in formatDateTime representation so it just displays as-is when available. The number2name conversion,
e.g. PST or CET, would fail part of the year due to daylight savings
Implemented minimal mitigation for the security risk in rendering iframes for an arbritrary reference/@value
Note that this cda.xsl does not copy arbritrary attributes from section text. The
noted risk on calling external images thereby sending HTTP Referer URL is not mitigated
05/30/2013 Alexander Henket
Made parameters out of font-family and font-sizes for the main font, h1-h6, and footers
Font-sizes are now all in points rather than pixels and points so more reliable in
rendering
Fixed getLocalizedString so it now does a lowercase comparison of the language
Added German translations for Table of Contents and Show/Hide revisions
05/29/2013 Alexander Henket
Internet Explorer update: disabled the use of textEncoding, otherwise it would not render
Fixed font-size problem for Internet Explorer 8 - it doesn't inherit size in td tags
Fixed table of contents problem for Internet Explorer 8 - wouldn't open
Fixed #documentfooter style
Pulled bgcolor in the header and footer part into CSS so it may be overridden
05/28/2013 Alexander Henket
Redesigned the setup. Now has three main divs.
#documentheader contains basic Patient and Author info
#documentbody contains section content
#documentfooter contains all relevant CDA header info
Updated for CDA release 3 as of Ballot May 2013. Includes datatypes awareness in alle
relevant places This update is largely about feature parity
Added <oXygen/> style documentation tags to facilitate HTML documentation
05/22/2013 Alexander Henket
Added parameter for external css if so desired
06/28/2011 Alexander Henket
Improved show-id by diplaying nullFlavor where applicable
05/31/2011 Alexander Henket
Improved show-code to return translated codes, and finally the original code if originalText
and @displayName fail
Improved label on bottom participant to include translated assignedEntity/code if
available
Improved readability of participant/assignedEntity
05/30/2011 Alexander Henket
Participant codes are now displayed by default instead of only when the name is omitted
Fixed translation of patientIdLong, by using the literal string instead treating it
as a node
Improved title on ids in fixed top header by adding a newline between multiple ids
Changed behavior of "Waarschuwingen" and "Behandelaanwijzigingen" to display "Er zijn
geen ..." if they are not applicable, instead of showing nothing
Changed "Behandelaanwijzingen into "Behandelrestricties"
05/03/2011 Alexander Henket
Added language file and a template getLocalizedString to deal with it
Added parameter textLang to feed the desired language. Does not work with just a browser,
so textLang needs to be set in any environment
Replaced all current text in the stylesheet with calls to getLocalizedString
Improved layout of page so there's now a fixed header. Shrunk the TOC into a button
with hover to open so it doesn't always take up all screen space. The layout is enforced
using div with an id To avoid lots of scrolling in the header area this part needed
to be predictable and small. All header info except recordTarget is now to the bottom
of the document Also the document title was made less big
Added support for every styleCode in CDA release 2, not just bold/italics/underline,
but also all list styles and e.g. Botrule
Added support for footnotes/footnoteRefs
Added support for multiple section authors (used to be just one, and support was bugged)
Added support for (multiple) section informants
Added support for section subject
Added support for @ID, @IDREF, @language, and all other style properties from CDA
release 2
Added support for the display of nonXMLBody with text/plain content
Added support for Narrative block <linkHtml/>
Added support for revisions. Deletions will get a strikethrough, Insertions an underline
and overline Both get a title saying 'delete' or 'insert'. This feature is off by
default, but above the TOC there's a toggle to switch revisions marks on or off. A
little Javascript was used for that.
Added confidentiality to the title of the document if present and other than N (Normal).
If someone took the effort to send the confidentiality it should be 'in your face'
as recipient.
Added support for multiple section authors (used to be just one, and support was bugged)
Added support for (multiple) section informants
Added support for section subject
Added a switch to diable Javascript in case the environment requires that
Improved support for data type II when there's only a root and no extension
Improved support for the author organization which not displayed
Improved support for telecom and addr use codes. Now supports multiples
Improved support for names. Now gets out every node, supporting mixed mode too.
Improved readability for the support for lists by combining the two templates
Improved support for observationMedia by removing the limitation of just gif and jpeg.
If the browser does not support a given type, then at least a question mark is displayed.
Before there was nothing
Improved support for observationMedia by adding the id (if available) to the alt and
title of the image
Added support for inline base64 images. HTML actually can deal with that too
Improved handling of addresses so it now walks through all nodes, support mixed content.
Also, the elements are now handled in the order of the instance and not just US order
Improved support for dates by including a language switch. Now just handles en-US
and nl-NL, but could handle more Likely more sophisticated support is in order, but
this works for our purposes while leaving US conventions intact
Improved handling of names, addresses and telecom. The templates gave incorrect results
for multiples of these, mixing the contents of the latter with the first. Added name
use code to the display of names if available.
Fixed the author string in the main document info. It used to '-', but is now "Author"
in any supported language
Below is here the list of changes in the versions of the stylesheet up to version
3.1.1. This version of the stylesheet implements all changes done up to version 3.1.1.
05/14/2018 Alexander Henket Better use of variables (GForge#15683)
02/15/2018 Alexander Henket Render recordTarget regardless of nullFlavor in id. Updated rendering of ids with
nullFlavors (GForge#3590)
02/15/2018 Alexander Henket Minor formatting fix to table/caption and ul captions. (GForge#3185)
02/15/2018 Alexander Henket Fixed casing of "inFulfillmentOf" and added call to it under documentationOf (GForge#3169)
09/19/2016 Rick Geimer Fixed some iframe issues (attribute typos). Added datauri support for nonXMLBody
docs with B64 PDFs (does not work in IE or Edge as of this time, but does work in
Chrome and FireFox).
11/12/2014 Rick Geimer Minor formatting fix to authenticator.
04/13/2014 Rick Geimer more security fixes. Added sandbox attribute to iframe. Added td to the list of elements
with restricted table attributes (missed that one previously). Fixed some typos. Cleaned
up CSS styles. Merged the table templates since they all use the same code. Fixed
a bug with styleCode processing that could result in lost data. Added external-image-whitelist
param.
04/07/2014 Rick Geimer more security fixes. Limited copy of only legal CDA table attributes to XHTML output.
04/07/2014 Rick Geimer more security fixes. Fixed some bugs from the hot fix on 4/6 ($uc and $lc swapped
during some translates). Added limit-external-images param that defaults to yes. When
set to yes, no URIs with colons (protocol URLs) or beginning with double slashes (protocol
relative URLs) are allowed in observation media. I'll revise later to add a whitelist
capability.
04/06/2014 Rick Geimer security hot fixes: Addressed javascript in nonXMLBody/text/reference/@value and
non-sanitized copy of all table attributes.
Produces a section title with at least an anchor based on relative position in the
document (for the Table of Contents), and a second anchor if the section has the @ID
tag
<xsl:template name="section-title"><xsl:param name="level" select="3"/><!--<xsl:if test="@ID">
<a name="{@ID}"/>
</xsl:if>--><xsl:element name="{concat('h', $level)}"><xsl:attribute name="id"><xsl:choose><xsl:when test="@ID"><xsl:value-of select="@ID"/></xsl:when><xsl:otherwise><xsl:apply-templates select="." mode="getAnchorName"/></xsl:otherwise></xsl:choose></xsl:attribute><xsl:if test="hl7:code"><xsl:attribute name="title"><xsl:call-template name="show-code-set"><xsl:with-param name="in" select="hl7:code"/><xsl:with-param name="sep" select="', '"/></xsl:call-template></xsl:attribute></xsl:if><xsl:choose><xsl:when test="count(hl7:component/hl7:structuredBody/hl7:component[hl7:section]) > 1"><!-- Add link to go back to top if the document has more than one section, otherwise superfluous --><a href="#_toc"><xsl:apply-templates select="." mode="getTitleName"/></a></xsl:when><xsl:otherwise><xsl:apply-templates select="." mode="getTitleName"/></xsl:otherwise></xsl:choose></xsl:element></xsl:template>
Handle footnoteRef. Produces a superscript [n] where n is the occurence number of
this ref in the
whole document. Also adds a title with the first 50 characters of th footnote on the
number so you
don't have to navigate to the footnote and just continue to read.
Namespace
No namespace
Match
hl7:footnoteRef
Mode
#default
Import precedence
0
Source
<xsl:template match="hl7:footnoteRef"><xsl:variable name="idref" select="@IDREF"/><xsl:variable name="footNoteNum"><xsl:for-each select="//hl7:footnote"><xsl:if test="@ID = $idref"><xsl:value-of select="position()"/></xsl:if></xsl:for-each></xsl:variable><xsl:variable name="footNoteText"><xsl:copy-of select="//hl7:footnote[@ID = $idref]//text()"/></xsl:variable><sup><xsl:text>[</xsl:text><a href="#{$idref}"><!-- Render footnoteref with the first 50 characters of the text --><xsl:attribute name="title"><xsl:value-of select="substring($footNoteText, 1, 50)"/><xsl:if test="string-length($footNoteText) > 50"><xsl:text>...</xsl:text></xsl:if></xsl:attribute><xsl:value-of select="$footNoteNum"/></a><xsl:text>]</xsl:text></sup></xsl:template>
Handle RenderMultiMedia. This currently only handles GIF's and JPEG's. It could, however,
be extended
by including other image MIME types in the predicate and/or by generating <object>
or <applet>
tag with the correct params depending on the media type @ID =$imageRef referencedObject
Namespace
No namespace
Match
hl7:renderMultiMedia
Mode
#default
Import precedence
0
Source
<xsl:template match="hl7:renderMultiMedia"><xsl:variable name="imageRefs" select="@referencedObject"/><!--<xsl:variable name="imageRefs">
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="@referencedObject"/>
<xsl:with-param name="delimiters" select="' '"/>
</xsl:call-template>
</xsl:variable>--><xsl:variable name="referencedObjects" select="ancestor::hl7:ClinicalDocument//hl7:regionOfInterest[@ID = $imageRefs] | ancestor::hl7:ClinicalDocument//hl7:observationMedia[@ID = $imageRefs]"/><br/><span><xsl:apply-templates select="hl7:caption"/><xsl:for-each select="$referencedObjects"><xsl:choose><xsl:when test="self::hl7:regionOfInterest"><!-- What we actually would want is an svg with fallback to just the image that renders the ROI on top of image
The only example (in the CDA standard itself) that we've seen so far has unusable coordinates. That for now
is not very encouraging to put in the effort, so we just render the images for now
--><xsl:apply-templates select=".//hl7:observationMedia"><!--<xsl:with-param name="usemap" select="@ID"/>--></xsl:apply-templates><!--<xsl:variable name="coords">
<xsl:variable name="tcoords">
<xsl:for-each select="hl7:value/@value">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="translate(normalize-space($tcoords),' ',',')"/>
</xsl:variable>--><!--<svg id="graph" width="100%" height="400px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink">
<!-\- pattern -\->
<defs>
<pattern id="image" x="0%" y="0%" height="100%" width="100%" viewBox="0 0 512 512">
<image x="0%" y="0%" width="512" height="512" xlink:href="https://cdn3.iconfinder.com/data/icons/people-professions/512/Baby-512.png"/>
</pattern>
</defs>
<circle id="sd" class="medium" cx="5%" cy="40%" r="5%" fill="url(#image)" stroke="lightblue" stroke-width="0.5%"/>
</svg>--><!--<map id="{@ID}" name="{@ID}">
<xsl:choose>
<!-\- A circle defined by two (column,row) pairs. The first point is the center of the circle and the second point is a point on the perimeter of the circle. -\->
<xsl:when test="hl7:code/@code = 'CIRCLE'">
<area shape="circle" coords="{$coords}" alt="Computer" href="computer.htm"/>
</xsl:when>
<!-\- An ellipse defined by four (column,row) pairs, the first two points specifying the endpoints of the major axis and the second two points specifying the endpoints of the minor axis. -\->
<xsl:when test="hl7:code/@code = 'ELLIPSE'">
<area shape="poly" coords="{$coords}" alt="Computer" href="computer.htm"/>
</xsl:when>
<!-\- A single point denoted by a single (column,row) pair, or multiple points each denoted by a (column,row) pair. -\->
<xsl:when test="hl7:code/@code = 'POINT'">
<area shape="poly" coords="{$coords}" alt="Computer" href="computer.htm"/>
</xsl:when>
<!-\- A series of connected line segments with ordered vertices denoted by (column,row) pairs; if the first and last vertices are the same, it is a closed polygon. -\->
<xsl:when test="hl7:code/@code = 'POLY'">
<area shape="poly" coords="{$coords}" alt="Computer" href="computer.htm"/>
</xsl:when>
</xsl:choose>
</map>--></xsl:when><!-- Here is where the direct MultiMedia image referencing goes --><xsl:when test="self::hl7:observationMedia"><xsl:apply-templates select="."/></xsl:when></xsl:choose></xsl:for-each></span></xsl:template>
Handle one line of birth/death/multiple birth data
Parameters
in
One element with the child elements birthTime, deceasedInd, deceasedTime, multipleBirthInd,
multipleBirthOrderNumber. Each of those is optional and may bein the V3 namespace
or in another namespace like sdtc
Retrieves a language dependant string from our language file such as a label based on a key. Returns string based on textLang, textLangDefault, the first two characters of the textLangDefault, e.g. 'en' in 'en-US' and finally
if all else fails just the key text.
Parameters
pre
Some text or space to prefix our string with
key
The key to find our text with
post
Some text like a colon or space to postfix our text with
Default language for retrieval of language dependant strings such as labels, e.g.
'en-US'. This is the fallback language in case the string is not available in the
actual language. See also textLang.
Actual language for retrieval of language dependant strings such as labels, e.g. 'en-US'.
Unless supplied, this is taken from the ClinicalDocument/language/@code attribute,
or in case that is not present from textlangDefault.
Currently unused. Unsupported by Internet Explorer. Text encoding to render the output
in. Defaults to UTF-8 which is fine for most environments. Could change into more
localized encodings such as cp-1252 (Windows Latin 1), iso-8859-1 (Latin 1), or shift-jis
(Japanese Kanji table))
Boolean value for whether the result document may contain JavaScript. Some environments
forbid the use of JavaScript. Without JavaScript, certain more dynamic features may
not work.
Absolute or relative URI to an external Cascading Stylesheet (CSS) file that contains
style attributes for custom markup, e.g. in the @styleCode attribute in Section.text
Determines if the document title and top level summary of header information (patient/guardian/author/encounter/documentationOf,
inFulfillmentOf) should be rendered. Defaults to "true", any other value is interpreted
as "do not render". Some systems may have a context around the rendering of the document
that would make rendering the header superfluous. Note that the footer, which may
be switched off separately contains everything that the header does and more.
Security parameter. May contain a vertical bar separated list of URI prefixes, such
as "http://www.example.com|https://www.example.com". See parameter limit-external-images for more detail.
Security parameter. When set to 'yes' limits the URIs to images (if any) to locally
attached images and/or images that are on the external-image-whitelist. When set to anything other than 'yes' also allows for arbitrary external images
(e.g. through http:// or https://). Default value is 'yes' which is considered defensive
against potential security risks that could stem from resources loaded from arbitrary
source.
Privacy parameter. Accepts a comma separated list of patient ID root values (normally
OID's). When a patient ID is encountered with a root value in this list, then the
rendering of the extension will be xxx-xxx-xxx regardless of what the actual value
is. This is useful to prevent public display of for example the US SSN. Default is
to render any ID as it occurs in the document. Note that this setting only affects
human rendering and that it does not affect automated processing of the underlying
document. If the same value also occurs in the skip-ids list, then that takes precedence.
Privacy parameter. Accepts a comma separated list of patient ID root values (normally
OID's). When a patient ID is encountered with a root value in this list, then the
rendering of this ID will be skipped. This is useful to prevent public display of
for example the US SSN. Default is to render any ID as it occurs in the document.
Note that this setting only affects human rendering and that it does not affect automated
processing of the underlying document.
Determines if sections will receive numbering according to ClinicalDocument order.
Value 'true' activates numbering. Top level sections are 1, 2, 3, 4, sub level sections
are 1.1, 1.2, 1.2.1, 1.2.2 etc.
<xd:doc>
<xd:desc>
<xd:p>Handle renderMultiMedia. Produces one or more iframes depending on the number of IDREFS in @referencedObject. Can have a caption on all of them.</xd:p>
</xd:desc>
</xd:doc>
<xsl:template match="hl7:renderMultiMedia">
<xsl:variable name="idrefs">
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="@referencedObject"/>
</xsl:call-template>
</xsl:variable>
<xsl:apply-templates select="ancestor::hl7:ClinicalDocument//hl7:observationMedia[@ID = $idrefs]"/>
</xsl:template>