Схематрон, сравнение значений нескольких элементов

В схематроне у меня 2 файла. В source01.xml есть keyvalue (xacml-context:AttributeValue), и с этим keyvalue я хочу получить минимальное значение уровня обслуживания в source02.xml, сравнивая значение keyvalue со значением "eh:ServiceProviderID" в source02. XML.

В следующем примере я хочу получить "2" в качестве результата.

source01.xml

<xacml-context:Resource>
<xacml-context:Attribute AttributeId="urn:etoegang:core:ServiceID" DataType="http://www.w3.org/2001/XMLSchema#string">
    <xacml-context:AttributeValue>01002</xacml-context:AttributeValue>
</xacml-context:Attribute>
<xacml-context:Attribute AttributeId="urn:etoegang:core:ServiceUUID" DataType="http://www.w3.org/2001/XMLSchema#string">
    <xacml-context:AttributeValue>    
</xacml-context:AttributeValue>

source02.xml

    <eh:ServiceProvider>        
    <eh:ServiceProviderID>01001</eh:ServiceProviderID>  
    <eh:OrganizationDisplayName>company A</eh:OrganizationDisplayName>   
    <eh:Service>    
        <eh:ServiceID>DV:01506</eh:ServiceID>
        <eh:ServiceLevel>1</eh:ServiceID>
        ...
    </eh:Service>
    <eh:Service>    
        <eh:ServiceID>DV:02506</eh:ServiceID>
        <eh:ServiceLevel>2</eh:ServiceID>
        ...
    </eh:Service>
    <eh:Service>    
        <eh:ServiceID>DV:03506</eh:ServiceID>
        <eh:ServiceLevel>3</eh:ServiceID>
        ...
    </eh:Service>
</eh:ServiceProvider>

<eh:ServiceProvider>        
    <eh:ServiceProviderID>01002</eh:ServiceProviderID>  
    <eh:OrganizationDisplayName>company B</eh:OrganizationDisplayName>  
    <eh:Service>    
        <eh:ServiceID>DV:01507</eh:ServiceID>
        <eh:ServiceLevel>2</eh:ServiceID>
        ...
    </eh:Service>
    <eh:Service>    
        <eh:ServiceID>DV:02507</eh:ServiceID>
        <eh:ServiceLevel>2+</eh:ServiceID>
        ...
    </eh:Service>
    <eh:Service>    
        <eh:ServiceID>DV:03507</eh:ServiceID>
        <eh:ServiceLevel>3</eh:ServiceID>
        ...
    </eh:Service>
</eh:ServiceProvider>

<eh:ServiceProvider>        
    <eh:ServiceProviderID>01003</eh:ServiceProviderID>  
    <eh:OrganizationDisplayName>company C</eh:OrganizationDisplayName>  
    <eh:Service>    
        <eh:ServiceID>DV:02508</eh:ServiceID>
        <eh:ServiceLevel>1</eh:ServiceID>
        ...
    </eh:Service>
    <eh:Service>    
        <eh:ServiceID>DV:03508</eh:ServiceID>
        <eh:ServiceLevel>3</eh:ServiceID>
        ...
    </eh:Service>
</eh:ServiceProvider>

Schematron

<rule context="xacml-c:Attribute[@AttributeId='urn:etoegang:core:ServiceID']">
        <let name="ServiceIdValue" value="xacml-c:AttributeValue"/>
        <assert test="$ServiceIdValue=' '">ServiceID (<value-of select="$ServiceIdValue"/>) is the keyvalue.</assert>
        <let name="DCValue" value="document('source02.xml')//*[name()='eh:ServiceProviderID']"/>
        <assert test="$DCValue=' '">DCValue (<value-of select="$DCValue"/>) is the source02 value. </assert>
    </rule>

0 ответов

Другие вопросы по тегам