1

我已经搜索了一段时间,得出的结论是,可能无法更改每个属性值的验证。

例如,我有两个“动作”节点,都有一个“类型”属性和两个元素(“名称”和“描述”)

只有当“type”属性的值为“1”时,它才有一个带有“abc”子元素的“a”元素,当“type”属性为“2”时,它有一个带有“yet”子元素的“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* 来检查这两种类型,这可能吗?如果是这样,怎么办?

  • 它必须是一个 XSD,因为我想将 XSD 放在 MSSQL 数据库表的 XML 列上。
4

2 回答 2

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 中唯一的方法。

于 2012-09-26T13:30:33.200 回答
0

您可以使用 XML Stylus Studio 工具来创建任何类型的复杂 XSD。

查看详情: http: //www.stylusstudio.com/

于 2012-09-26T11:32:53.787 回答