<?xml version=“1.0” encoding=“utf-8” standalone=“yes”?> <xsl:stylesheet version=“1.0” xmlns:xsl=“www.w3.org/1999/XSL/Transform” xmlns:dc=“purl.org/dc/elements/1.1/” xmlns:cci=“iase.disa.mil/cci”>

<xsl:decimal-format NaN=""/>
<xsl:variable name="apos">'</xsl:variable>
<!-- default search order -->
<xsl:param name="sortorder" select="'800-53'"/>
<xsl:template match="/">
        <html>
                <head>
                        <style type="text/css">
                                BODY { font-family: sans-serif; }
                                TD { border: none; font-size: 12pt; vertical-align: top; }
                                TR.header, TD.header { font-weight: bold; }
                        </style>
                        <title>CCI List</title>
                </head>
                <body>
                        <xsl:apply-templates select="cci:cci_list"/>
                </body>
        </html>
</xsl:template>
<xsl:template match="cci:cci_list">
        <b>CCI List</b><br />
        <b>Version <xsl:value-of select="cci:metadata/cci:version"/></b><br />
        <b>Date <xsl:value-of select="cci:metadata/cci:publishdate"/></b>
        <hr/>
        <xsl:choose>
                <xsl:when test="$sortorder = 'publishdate'">
                        <xsl:apply-templates select="cci:cci_items/cci:cci_item">
                                <xsl:sort data-type="text" select="publishdate"/>
                        </xsl:apply-templates>                          
                </xsl:when>
                <xsl:when test="$sortorder = '800-53'">
                        <xsl:apply-templates select="cci:cci_items/cci:cci_item">
                                <xsl:sort data-type="text" select="concat(substring(cci:references/cci:reference[@title = 'NIST SP 800-53 Revision 4']/@index, 1, 2), 'Z', format-number(substring-before(substring-after(cci:references/cci:reference[@title = 'NIST SP 800-53 Revision 4']/@index, '-'), ' '), '000'), format-number(substring-after(cci:references/cci:reference[@title = 'NIST SP 800-53 Revision 4']/@index, '-'), '000'), translate(substring(substring-after(cci:references/cci:reference[@title = 'NIST SP 800-53 Revision 4']/@index, ' '), 1, 1), '(abcdefghijklmnopqrstuvwxyz', '-//////////////////////////'),  translate(substring(substring-after(cci:references/cci:reference[@title = 'NIST SP 800-53 Revision 4']/@index, ' '), 1, 1), 'abcdefghijklmnopqrstuvwxyz(', 'abcdefghijklmnopqrstuvwxyz'), format-number(substring-before(substring-after(cci:references/cci:reference[@title = 'NIST SP 800-53 Revision 4']/@index, '('), ')'), '000'), translate(substring(substring-after(substring-after(cci:references/cci:reference[@title = 'NIST SP 800-53 Revision 4']/@index, '('), '('), 1, 1), '0123456789abcdefghijklmnopqrstuvwxyz', '----------//////////////////////////'),  translate(substring(substring-after(substring-after(cci:references/cci:reference[@title = 'NIST SP 800-53 Revision 4']/@index, '('), '('), 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'abcdefghijklmnopqrstuvwxyz'), format-number(substring-before(substring-after(substring-after(cci:references/cci:reference[@title = 'NIST SP 800-53 Revision 4']/@index, '('), '('), ')'), '000'))"/>
                        </xsl:apply-templates>
                </xsl:when>
                <xsl:when test="$sortorder = 'type'">
                        <xsl:apply-templates select="cci:cci_items/cci:cci_item">
                                <xsl:sort data-type="text" select="cci:type"/>
                        </xsl:apply-templates>
                </xsl:when>
                <xsl:when test="$sortorder = 'status'">
                        <xsl:apply-templates select="cci:cci_items/cci:cci_item">
                                <xsl:sort data-type="text" select="cci:status"/>
                        </xsl:apply-templates>
                </xsl:when>
                <xsl:otherwise>
                        <xsl:apply-templates select="cci:cci_items/cci:cci_item">
                                <xsl:sort data-type="text" select="@id"/>
                        </xsl:apply-templates>
                </xsl:otherwise>
        </xsl:choose>
</xsl:template> 
<xsl:template match="cci:cci_item">
        <table width="100%">
                <tr>
                        <td width="15%" class="header"><xsl:value-of select="'CCI:'"/></td>
                        <td width="35%"><xsl:value-of select="@id"/></td>
                        <td width="15%" class="header"><xsl:value-of select="'Status:'"/></td>
                        <td width="35%"><xsl:value-of select="cci:status"/></td>
                </tr>
                <tr>
                        <td class="header"><xsl:value-of select="'Contributor:'"/></td>
                        <td><xsl:value-of select="cci:contributor"/></td>
                        <td class="header"><xsl:value-of select="'Published Date:'"/></td>
                        <td><xsl:value-of select="cci:publishdate"/></td>
                </tr>
                <tr>
                        <td class="header"><xsl:value-of select="'Definition:'"/></td>
                        <td colspan="3"><xsl:value-of select="translate(cci:definition,'^',$apos)"/></td>
                </tr>
                <xsl:if test="cci:type != ''">
                        <tr>
                                <td class="header"><xsl:value-of select="'Type:'"/></td>
                                <td colspan="3">
                                        <xsl:for-each select="cci:type">
                                                <xsl:value-of select="."/>
                                                <xsl:if test="position() &lt; count(../cci:type)">, </xsl:if>
                                        </xsl:for-each>
                                </td>
                        </tr>
                </xsl:if>
                <xsl:if test="cci:note != ''">
                        <tr>
                                <td class="header"><xsl:value-of select="'Note:'"/></td>
                                <td colspan="3"><xsl:value-of select="cci:note"/></td>
                        </tr>
                </xsl:if>
                <xsl:if test="cci:parameter != ''">
                        <tr>
                                <td class="header"><xsl:value-of select="'Parameter:'"/></td>
                                <td colspan="3"><xsl:value-of select="cci:parameter"/></td>
                        </tr>
                </xsl:if>
                <xsl:apply-templates select="cci:references/cci:reference">
                        <xsl:sort select="@creator"/>
                        <xsl:sort select="@title"/>
                        <xsl:sort select="@version"/>
                </xsl:apply-templates>
        </table>
        <hr />
</xsl:template> 
<xsl:template match="cci:reference">
        <tr>
                <td class="header">
                        <xsl:if test="position() = 1">
                                References:
                        </xsl:if>
                </td>
                <td colspan="3">
                        <xsl:value-of select="@creator"/>
                        <xsl:value-of select="':  '"/>
                        <a>
                                <xsl:attribute name="href">
                                        <xsl:value-of select="@location"/>
                                </xsl:attribute>
                                <xsl:value-of select="@title"/>
                                <xsl:value-of select="' (v'"/>
                                <xsl:value-of select="@version"/>
                                <xsl:value-of select="')'"/>
                        </a>
                        <xsl:value-of select="':  '"/>
                        <xsl:value-of select="@index"/>
                </td>
        </tr>
</xsl:template>

</xsl:stylesheet>