XML通过xsd断言进行更具体的验证
这是一个我需要改进的模式,通过断言来验证,如果XML通过xsd断言进行更具体的验证,xml,xsd,assert,complextype,Xml,Xsd,Assert,Complextype,这是一个我需要改进的模式,通过断言来验证,如果rule/type的值为a或B,则Return=true 例如: <xsd:assert test="if (@type$value = A or @type$value= B) then @return$value = true" /> 这是我已经在工作的XSD: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:simpleType n
rule/type
的值为a
或B
,则Return=true
例如:
<xsd:assert test="if (@type$value = A or @type$value= B) then @return$value = true" />
这是我已经在工作的XSD:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:simpleType name="Rule">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="A"/>
<xsd:enumeration value="B"/>
<xsd:enumeration value="C"/>
<xsd:enumeration value="D"/>
<xsd:enumeration value="E"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="cType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="C-val1"/>
<xsd:enumeration value="C-val2"/>
<xsd:enumeration value="C-val3"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="DType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="D-val1"/>
<xsd:enumeration value="D-val2"/>
<xsd:enumeration value="D-val3"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="Rule">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="Type" type="Rule"/>
<xsd:element name="Return" type="xsd:boolean"/>
<xsd:choice>
<xsd:element name="BConfig"/>
<xsd:element name="AConfig"/>
<xsd:element name="CConfig" type="CRule"/>
<xsd:element name="DConfig" type="DRule"/>
<xsd:element name="EElement" type="xsd:integer"/>
</xsd:choice>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="CRule">
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="C" type="CType" maxOccurs="3" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="DRule">
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="D" type="DType" maxOccurs="3" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
但不知道如何正确使用资产
更新1:
在sergiofc之后,这是更新的模式
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:simpleType name="Rule">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="A"/>
<xsd:enumeration value="B"/>
<xsd:enumeration value="C"/>
<xsd:enumeration value="D"/>
<xsd:enumeration value="E"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="cType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="C-val1"/>
<xsd:enumeration value="C-val2"/>
<xsd:enumeration value="C-val3"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="DType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="D-val1"/>
<xsd:enumeration value="D-val2"/>
<xsd:enumeration value="D-val3"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="Rule">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="Type" type="Rule"/>
<xsd:element name="Return" type="xsd:boolean"/>
<xsd:choice>
<xsd:element name="BConfig"/>
<xsd:element name="AConfig"/>
<xsd:element name="CConfig" type="CRule"/>
<xsd:element name="DConfig" type="DRule"/>
<xsd:element name="EElement" type="xsd:integer"/>
</xsd:choice>
</xsd:sequence>
<xsd:assert test="if (Type = ('A', 'B')) then Return = true() else true()"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="CRule">
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="C" type="CType" maxOccurs="3" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="DRule">
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="D" type="DType" maxOccurs="3" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
但是我仍然不知道在哪里可以找到
xsd:assert
,我仍然会得到相同的错误。请遵循以下示例:
它处理条件测试
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="size" type="xs:integer"/>
</xs:sequence>
<xs:attribute name="dept" type="xs:string"/>
<xs:assert test="if (@dept = 'ACC')
then number > 500
else if (@dept = 'WMN')
then number <= 300 and number > 200
else if (@dept = 'MEN')
then number < 200
else false()"/>
</xs:complexType>
请遵循以下示例: 它处理条件测试
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="size" type="xs:integer"/>
</xs:sequence>
<xs:attribute name="dept" type="xs:string"/>
<xs:assert test="if (@dept = 'ACC')
then number > 500
else if (@dept = 'WMN')
then number <= 300 and number > 200
else if (@dept = 'MEN')
then number < 200
else false()"/>
</xs:complexType>
请遵循以下示例: 它处理条件测试
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="size" type="xs:integer"/>
</xs:sequence>
<xs:attribute name="dept" type="xs:string"/>
<xs:assert test="if (@dept = 'ACC')
then number > 500
else if (@dept = 'WMN')
then number <= 300 and number > 200
else if (@dept = 'MEN')
then number < 200
else false()"/>
</xs:complexType>
请遵循以下示例: 它处理条件测试
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="size" type="xs:integer"/>
</xs:sequence>
<xs:attribute name="dept" type="xs:string"/>
<xs:assert test="if (@dept = 'ACC')
then number > 500
else if (@dept = 'WMN')
then number <= 300 and number > 200
else if (@dept = 'MEN')
then number < 200
else false()"/>
</xs:complexType>
如果我理解清楚,您希望
返回值,如果Type
值是A
或B
。如果是,您可以使用以下断言:
<xsd:assert test="if (Type = ('A', 'B')) then Return = true() else true()"/>
说明:
只能使用@name
来获取名为name
的属性,如果要选择元素,则不能使用@
如果要选择名为name
的元素,name
是enoug
$value
是仅存在于
中的变量。对于简单值,它不存在于
中
在XPath中,如果左边的某个元素出现在右边的序列中,则类似于'val2'=('val1','val2','val3')
的表达式将返回true,尽管您的or方法也是有效的
如果您愿意,您可以阅读XPath规范或XPath教程来更好地了解它。如果我理解得很好,您希望在Type
值为A
或B
时返回
值为true。如果是,您可以使用以下断言:
<xsd:assert test="if (Type = ('A', 'B')) then Return = true() else true()"/>
说明:
只能使用@name
来获取名为name
的属性,如果要选择元素,则不能使用@
如果要选择名为name
的元素,name
是enoug
$value
是仅存在于
中的变量。对于简单值,它不存在于
中
在XPath中,如果左边的某个元素出现在右边的序列中,则类似于'val2'=('val1','val2','val3')
的表达式将返回true,尽管您的or方法也是有效的
如果您愿意,您可以阅读XPath规范或XPath教程来更好地了解它。如果我理解得很好,您希望在Type
值为A
或B
时返回
值为true。如果是,您可以使用以下断言:
<xsd:assert test="if (Type = ('A', 'B')) then Return = true() else true()"/>
说明:
只能使用@name
来获取名为name
的属性,如果要选择元素,则不能使用@
如果要选择名为name
的元素,name
是enoug
$value
是仅存在于
中的变量。对于简单值,它不存在于
中
在XPath中,如果左边的某个元素出现在右边的序列中,则类似于'val2'=('val1','val2','val3')
的表达式将返回true,尽管您的or方法也是有效的
如果您愿意,您可以阅读XPath规范或XPath教程来更好地了解它。如果我理解得很好,您希望在Type
值为A
或B
时返回
值为true。如果是,您可以使用以下断言:
<xsd:assert test="if (Type = ('A', 'B')) then Return = true() else true()"/>
说明:
只能使用@name
来获取名为name
的属性,如果要选择元素,则不能使用@
如果要选择名为name
的元素,name
是enoug
$value
是仅存在于
中的变量。对于简单值,它不存在于
中
在XPath中,如果左边的某个元素出现在右边的序列中,则类似于'val2'=('val1','val2','val3')
的表达式将返回true,尽管您的or方法也是有效的
如果你愿意,您可以阅读XPath规范或XPath教程以更好地了解它。实际上,这是我的想法来源的示例,但我需要访问此任务的类型和返回元素,并且似乎可以找到一个合适的示例。实际上,这是我的想法来源的示例,但我需要访问类型和返回元素返回此t的元素