schematron中的XSLT语法用于查找另一个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

[更新] 请参阅下面我的评论-我在连接/拉入参考文档数据(文件名为problems.xml)时遇到困难

以下是指向示例源xml文档的链接(用于运行xsl):

这是problems.xml中的一个小样本,我需要交叉引用,将上面样本(
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