schematron中的XSLT语法用于查找另一个xml文档中的属性,并从同一条目返回另一个属性
[更新] 请参阅下面我的评论-我在连接/拉入参考文档数据(文件名为problems.xml)时遇到困难 以下是指向示例源xml文档的链接(用于运行xsl): 这是problems.xml中的一个小样本,我需要交叉引用,将上面样本(schematron中的XSLT语法用于查找另一个xml文档中的属性,并从同一条目返回另一个属性,xml,xslt,schematron,Xml,Xslt,Schematron,[更新] 请参阅下面我的评论-我在连接/拉入参考文档数据(文件名为problems.xml)时遇到困难 以下是指向示例源xml文档的链接(用于运行xsl): 这是problems.xml中的一个小样本,我需要交叉引用,将上面样本(cda:ClinicalDocument/cda:component/cda:structuredBody/cda:component/cda:section/cda:entry/cda:entryRelationship/cda:observation/cda:va
cda:ClinicalDocument/cda:component/cda:structuredBody/cda:component/cda:section/cda:entry/cda:entryRelationship/cda:observation/cda:value/@displayName
)中的数据匹配到这里的代码/值,比较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>
名称与规范名称不匹配
显示名称
[原件]
我有一个schematron文件,用于验证内容的xml文件。我需要验证的一些内容已经存在于一个单独的xml文件中。本质上,我需要查看正在验证的xml,找到条目的值(代码)及其对应的名称(displayName),在引用文件中查找值(value),获取其对应的名称(displayName),然后比较这两个名称并验证它们是否相同(displayName=displayName)
这是我正在验证的xml文件中的条目的外观:
<value xsi:type="OK" code="12345" displayName="Rounds"
您是否使用基于XSLT2的Schematron实现?Schematron是否允许您为交叉引用查找声明XSLT键?在XSLT2中,您可以使用例如
,然后比较例如键('code-ref',@code,doc('code.xml')//system[@valueSet='99999999'])/@displayName=@displayName
。Martin指出的xsl:key方法是最有效的方法。简单的xPath方法如下:代码>谢谢你的评论。有一段时间我被从这件事中拉了出来,最近几天我一直在尝试应用上面提到的方法。一个变化是我中止了schematron路由并决定使用XSLT。但是,我还不能开始计算语法。每次尝试引用该文档时,我都会得到“在默认排序规则属性中找不到可识别的排序规则URI…”,但我还不知道如何提取数据。我正在用当前不工作的xsl文件内容和一个示例链接更新原始帖子。
<system valueSet="999999999" valueSetName="Widgets">
<code value="12345" displayName="Round" />
<code value="246810" displayName="Square" />
<code value="13579" displayName="Triangular" />
document('<name-here>.xml')/<xpath-here>[@valueSet='999999999']/code/@value