我一直在寻找一段时间,并得出结论可能无法更改属性的每个值的验证。
例如,我有两个“动作”节点,都有“type”属性和两个元素(“name”和“description”)
只有当“type”属性的值为“1”时,它才有一个带有“abc”子元素的“a”元素,当“type”属性为“2”时,它有一个带有“bla”元素的“bla”元素但“儿童元素。
类型1的示例
<action type="1">
<name>yup</name>
<description>yyy</description>
<a>
<abc>false</abc>
</a>
</action>
类型2的示例
<action type="2">
<name>yup2</name>
<description>RRR</description>
<bla>
<yet />
</bla>
</action>
我想创建一个可以检查这两种类型的XSD *,这可能吗? 如果是这样,怎么样?
答案 0 :(得分:1)
你是对的,XSD 1.0不可能是MSSQL支持的唯一XSD版本。您可以获得的最佳效果是在a
和bla
之间创建一个选项,可能会对属性type
值设置一些限制等。下面是一个插图。
<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="action">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="description" type="xs:string" />
<xs:choice>
<xs:element name="a">
<xs:complexType>
<xs:sequence>
<xs:element name="abc" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="bla">
<xs:complexType>
<xs:sequence>
<xs:element name="yet" type="xs:anyType" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:sequence>
<xs:attribute name="type" type="xs:unsignedByte" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
如果您控制XML结构,并且仍想使用某个属性来控制内容模型,则xsi:type是在XSD 1.0中执行此操作的唯一方法。
答案 1 :(得分:0)
您可以使用工具XML Stylus Studio创建任何类型的复杂XSD。
查看详细信息:http://www.stylusstudio.com/