[Обновлено] См. Мой комментарий ниже - У меня проблемы с подключением / извлечением данных справочного документа (проблемы с именем файла. 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
Однако я не уверен, как вернуть значение другого атрибута в той же записи, чтобы затем сравнить с ним. Любые предложения или рекомендации будут очень полезны.