首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >断言条件对于Xerces为false,而对于Saxon为true

断言条件对于Xerces为false,而对于Saxon为true
EN

Stack Overflow用户
提问于 2019-03-25 23:18:23
回答 1查看 53关注 0票数 0

在oxygenxml编辑器中,Xerces和Saxon验证引擎对特定的断言条件进行不同的评估。

我已经创建了一个xsd模式(版本1.1),并按照所创建的模式创建了相应的xml测试文件。根据XMLSpy 2019,xml文件是正确的。

如果使用Xerces作为验证模式,则oxygenxml 21.0中的测试xml文件的验证失败。

同时,如果使用Saxon作为验证引擎,则验证是成功的。

这样的断言子句是否存在Xerces实现问题

代码语言:javascript
复制
<xs:complexType>
    <xs:sequence>
        <xs:element name="scenario" type="Scenario"/>
        <xs:element name="year" type="StressYear"/>
        <xs:element name="position" type="STACreditPosition" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:assert test="every $pos in ./position satisfies not(($pos/geography lt $pos/preceding-sibling::position[1]/geography) or (($pos/geography eq $pos/preceding-sibling::position[1]/geography) and ($pos/creditAssetClass le $pos/preceding-sibling::position[1]/creditAssetClass)))"/>
</xs:complexType>

我希望Xerces引擎的验证是成功的。

EN

回答 1

Stack Overflow用户

发布于 2019-03-26 00:29:09

您还没有提供足够的信息来全面研究这一点,但是您给处理程序提供了一个使用表达式$pos/geography lt ...的困难任务,因为计算依赖于geography元素的数据类型。规范规定应该使用geography的类型化值(例如xs:integer,如果它是这样定义的)来计算断言,但这很难实现,因为表达式在验证完成之前就进行了计算。因此,尽管根据规范对结果进行了很好的定义,但如果您避免依赖规范的此功能,并执行显式类型转换,则可能会获得更多可互操作的结果:

代码语言:javascript
复制
<xs:assert test="every $pos in ./position satisfies
 not(($pos/geography/xs:integer(.) lt $pos/preceding-sibling::position[1]/geography/xs:integer(.)) ..."/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55341053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档