XML模式能否根据父属性值进行验证?
我正在使用XML进行地理定位项目。这使用属性来定义项目的位置。范围0-9的简单一维示例如下:XML模式能否根据父属性值进行验证?,xml,xsd,xsd-validation,xml-validation,Xml,Xsd,Xsd Validation,Xml Validation,我正在使用XML进行地理定位项目。这使用属性来定义项目的位置。范围0-9的简单一维示例如下: <Range Start="0" Size="10">Some item</Range> XSD模式是否可以检测到这种情况,或者无法根据父属性值进行验证?XSD 1.0 不可能 XSD 1.1 使用xs:assert和every在父元素上定义断言,以确保子范围在父范围指定的边界内 下面是断言的外观(只关注键范围属性和结构): XSD 1.0 不可能 XSD 1.1 使用xs:
<Range Start="0" Size="10">Some item</Range>
XSD模式是否可以检测到这种情况,或者无法根据父属性值进行验证?XSD 1.0
不可能
XSD 1.1
使用xs:assert
和every
在父元素上定义断言,以确保子范围在父范围指定的边界内
下面是断言的外观(只关注键范围属性和结构):
XSD 1.0
不可能
XSD 1.1
使用xs:assert
和every
在父元素上定义断言,以确保子范围在父范围指定的边界内
下面是断言的外观(只关注键范围属性和结构):
谢谢。这真的很有帮助。但有一点要警告:这种技术需要XSD 1.1,而当前的Microsoft Visual Studio不支持XSD 1.1。似乎必须使用更专业(且成本更高)的验证器。见[链接]谢谢。这真的很有帮助。但有一点要警告:这种技术需要XSD 1.1,而当前的Microsoft Visual Studio不支持XSD 1.1。似乎必须使用更专业(且成本更高)的验证器。见[链接]
<Range Start="0" Size="10">
<Range Start="12" Size="1">Out of range 0-9</Range>
</Range>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified"
vc:minVersion="1.1">
<xs:element name="Range">
<xs:complexType>
<xs:sequence>
<xs:element ref="Range" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Start" type="xs:integer" use="required"/>
<xs:attribute name="Size" type="xs:integer" use="required"/>
<xs:assert test="every $r in Range satisfies
$r/@Start >= @Start
and $r/@Start + $r/@Size > @Start + @Size"/>
</xs:complexType>
</xs:element>
</xs:schema>