[oXygen-user] Schematron doesn't respect the full path in the test attribute.

Oxygen XML Editor Support (Octavian Nadolu) support at oxygenxml.com
Wed May 17 07:57:27 CDT 2023


Hello Danny,

Thanks again for your feedback.
ItappearsthatSaxonisevaluatingthemap:contains()functionwhenitshouldnot.WehaveaddedanissuetotheSaxonicaissuetrackertoverifythesituationandwillletyouknowwhenthefixisintegratedinOxygen. 


Best Regards,
Octavian


On 5/15/2023 8:04 PM, Danny MacMillan wrote:
> I meant the context attribute of course.
>
> I can also silence the warning by defining a variable holding the 
> appropriate elements and using the variable in my rules. This is what 
> I will do in practice. It does look broken to me though.
>
> Thanks,
>
> -- 
> Danny MacMillan
>
> Sent with Proton Mail <https://proton.me/> secure email.
>
> ------- Original Message -------
> On Monday, May 15th, 2023 at 10:36, Danny MacMillan 
> <dm-bulk-oxygenxml at mail-eh.ca> wrote:
>
>> Hello,
>>
>> Consider the following XML:
>>
>> <?xml version="1.0"?>
>> <root>
>>   <relevant>
>>     <element relevant-attribute="this attribute exists only on 
>> elements under relevant"/>
>>   </relevant>
>>   <irrelevant>
>>     <element/>
>>   </irrelevant>
>> </root>
>>
>> And the following Schematron:
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <schema xmlns="http://purl.oclc.org/dsdl/schematron" 
>> queryBinding="xslt3" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
>> xmlns:map="http://www.w3.org/2005/xpath-functions/map">
>>   <ns prefix="map" uri="http://www.w3.org/2005/xpath-functions/map"/>
>>   <let name="some-map" value="map {}"/>
>>   <pattern>
>>     <rule context="/*/relevant/element[map:contains($some-map, 
>> @relevant-attribute)]">
>>       <assert test="true()">Impossible</assert>
>>     </rule>
>>   </pattern>
>> </schema>
>>
>> When I validate the XML with the Schematron, Oxygen prints a warning 
>> that an empty sequence is not allowed as the second argument to 
>> map:contains, which I've determined is because it is testing the 
>> "element" elements under "irrelevant". I know this because if I add a 
>> second such element, the error prints twice. If I have 9, the error 
>> prints 9 times. But why is it testing that element? I deliberately 
>> used xpath that navigates via the parent because I want to include 
>> only elements under that parent, but it seems that it's looking at 
>> all elements, anywhere in the document, named 'element'. Is this 
>> expected?
>>
>> I can silence the warning if I explicitly check for the presence of 
>> the attribute:
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <schema xmlns="http://purl.oclc.org/dsdl/schematron" 
>> queryBinding="xslt3" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
>> xmlns:map="http://www.w3.org/2005/xpath-functions/map">
>>   <ns prefix="map" uri="http://www.w3.org/2005/xpath-functions/map"/>
>>   <let name="some-map" value="map {}"/>
>>   <pattern>
>>     <rule context="/*/relevant/element[@relevant-attribute and 
>> map:contains($some-map, @relevant-attribute)]">
>>       <assert test="true()">Impossible</assert>
>>     </rule>
>>   </pattern>
>> </schema>
>>
>> But not if I precede the broken rule with a rule that should 
>> equivalently prevent the broken rule from firing on those elements:
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <schema xmlns="http://purl.oclc.org/dsdl/schematron" 
>> queryBinding="xslt3" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
>> xmlns:map="http://www.w3.org/2005/xpath-functions/map">
>>   <ns prefix="map" uri="http://www.w3.org/2005/xpath-functions/map"/>
>>   <let name="some-map" value="map {}"/>
>>   <pattern>
>>     <rule context="/*/relevant/element[not(@relevant-attribute)]">
>>       <assert test="true()">Impossible</assert>
>>     </rule>
>>     <rule context="/*/relevant/element[map:contains($some-map, 
>> @relevant-attribute)]">
>>       <assert test="true()">Impossible</assert>
>>     </rule>
>>   </pattern>
>> </schema>
>>
>> Thanks,
>>
>> -- 
>> Danny MacMillan
>>
>> Sent with Proton Mail <https://proton.me/> secure email.
>
>
> _______________________________________________
> oXygen-user mailing list
> oXygen-user at oxygenxml.com
> https://www.oxygenxml.com/mailman/listinfo/oxygen-user


-- 
Octavian Nadolu
<oXygen/> XML Editor
http://www.oxygenxml.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.oxygenxml.com/pipermail/oxygen-user/attachments/20230517/a49fd106/attachment.htm>


More information about the oXygen-user mailing list