Синтаксис XSLT в schematron для поиска атрибута в другом документе xml и возврата другого атрибута из той же записи - PullRequest
0 голосов
/ 06 января 2020

[Обновлено] См. Мой комментарий ниже - У меня проблемы с подключением / извлечением данных справочного документа (проблемы с именем файла. xml).

Вот ссылка на образец исходного документа xml (для запуска xsl): https://github.com/chb/sample_ccdas/blob/master/Cerner%20Samples/problems-and-medications.xml

Это небольшой пример проблем. xml Мне нужно сделать перекрестную ссылку, сопоставив данные из приведенного выше примера (cda:ClinicalDocument/cda:component/cda:structuredBody/cda:component/cda:section/cda:entry/cda:act/cda:entryRelationship/cda:observation/cda:value/@displayName) с code/value здесь, и сравнив displayName = displayName:

<?xml version="1.0" encoding="utf-8"?>
<systems xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.lantanagroup.com/voc">
    <system valueSetOid="2.16.840.1.113883.3.88.12.3221.7.4" valueSetName="Problem">
     <code value="10000006" displayName="Radiating chest pain (finding)" codeSystemName="SNOMED CT" codeSystem="2.16.840.1.113883.6.96" />
     <code value="10001005" displayName="Bacterial sepsis (disorder)" codeSystemName="SNOMED CT" codeSystem="2.16.840.1.113883.6.96" />
     <code value="10007009" displayName="Coffin-Siris syndrome (disorder)" codeSystemName="SNOMED CT" codeSystem="2.16.840.1.113883.6.96" />
     <code value="1001000119102" displayName="Pulmonary embolism with pulmonary infarction (disorder)" codeSystemName="SNOMED CT" codeSystem="2.16.840.1.113883.6.96" />
     <code value="1001000124104" displayName="Normal left ventricular systolic function (finding)" codeSystemName="SNOMED CT" codeSystem="2.16.840.1.113883.6.96" />
     <code value="10017004" displayName="Occlusal wear of teeth (disorder)" codeSystemName="SNOMED CT" codeSystem="2.16.840.1.113883.6.96" />
     <code value="100191000119105" displayName="Asymmetry of prostate (finding)" codeSystemName="SNOMED CT" codeSystem="2.16.840.1.113883.6.96" />
    </system>
</systems>

Вот все (неверно) Синтаксис в моем теперь xsl-файле

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cda="urn:hl7-org:v3" >

    <xsl:variable name="SNOMEDCTProblems" select="document('voc.xml')/systems/system[@valueSetOid='2.16.840.1.113883.3.88.12.3221.7.4']"/>
    <xsl:key match="$SNOMEDCTProblems/code[@value]" name="problemsKey" use="@value"/>

    <xsl:template match="/">
        <html>
            <body>
                <u>
                    <b>
                        <h4>Name does not match Canonical name</h4>
                    </b>
                </u>
                <table border="1">
                    <tr>
                        <th>displayName</th>
                    </tr>

                    <xsl:for-each default-collation="key('problemsKey', @value, @displayName)/@displayName = 
                                                             $problemEntries/cda:entry/cda:act/cda:entryRelationship/cda:observation/cda:value/@displayName">
                        <tr>
                            <td>
                                <xsl:value-of select="cda:entryRelationship/cda:observation/cda:value/@displayName" />
                            </td>
                        </tr>
                    </xsl:for-each>

                </table>
            </body>
        </html>
    </xsl:template>

</xsl:stylesheet>

[Оригинал] У меня есть файл схематора для проверки xml файлов для содержимого. Часть содержимого, которое мне нужно проверить, уже существует в отдельном файле xml. По сути, мне нужно взглянуть на xml, который я проверяю, найти значение (код) для записи и соответствующее имя (displayName), посмотреть значение в справочном файле (значение), получить соответствующее имя ( displayName), затем сравните два имени и убедитесь, что они совпадают (displayName = displayName).

Вот так выглядит запись в файле xml, который я проверяю:

<value xsi:type="OK" code="12345" displayName="Rounds"

Вот так выглядят данные отдельного файла xml для проверки:

<system valueSet="999999999" valueSetName="Widgets">
    <code value="12345" displayName="Round" />
    <code value="246810" displayName="Square" />
    <code value="13579" displayName="Triangular" />

Мне уже удалось найти синтаксис для ссылки на файл и указанное поле c в файле. Переход к «коду» будет выглядеть примерно так:

document('<name-here>.xml')/<xpath-here>[@valueSet='999999999']/code/@value

Однако я не уверен, как вернуть значение другого атрибута в той же записи, чтобы затем сравнить с ним. Любые предложения или рекомендации будут очень полезны.

...