在oxygenxml编辑器中,Xerces和Saxon验证引擎对特定的断言条件进行不同的评估。
我已经创建了一个xsd模式(版本1.1),并按照所创建的模式创建了相应的xml测试文件。根据XMLSpy 2019,xml文件是正确的。
如果使用Xerces作为验证模式,则oxygenxml 21.0中的测试xml文件的验证失败。
同时,如果使用Saxon作为验证引擎,则验证是成功的。
这样的断言子句是否存在Xerces实现问题
<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引擎的验证是成功的。
发布于 2019-03-26 00:29:09
您还没有提供足够的信息来全面研究这一点,但是您给处理程序提供了一个使用表达式$pos/geography lt ...的困难任务,因为计算依赖于geography元素的数据类型。规范规定应该使用geography的类型化值(例如xs:integer,如果它是这样定义的)来计算断言,但这很难实现,因为表达式在验证完成之前就进行了计算。因此,尽管根据规范对结果进行了很好的定义,但如果您避免依赖规范的此功能,并执行显式类型转换,则可能会获得更多可互操作的结果:
<xs:assert test="every $pos in ./position satisfies
not(($pos/geography/xs:integer(.) lt $pos/preceding-sibling::position[1]/geography/xs:integer(.)) ..."/>https://stackoverflow.com/questions/55341053
复制相似问题