0

由于我的 XSD 不适用于 Visual Studio 2010,我用它来生成一个。mine 和 Generated 之间的区别是层次结构?我使用 dtype 来调用 complexetypes。为什么那行不通?

视觉工作室版本:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" 
           elementFormDefault="qualified" 
           targetNamespace="top.xsd" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="top">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="child1">
          <xs:complexType>
            <xs:attribute name="attribute1" type="xs:string" />
          </xs:complexType>
        </xs:element>       
        <xs:element name="child2">
          <xs:complexType>
            <xs:attribute name="attribute2" type="xs:string" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

我个人觉得我的版本很整洁,但出现了一个错误,此时 type 不能用作参考:

<?xml version="1.0" encoding="utf-8"?>
  <xs:schema attributeFormDefault="unqualified" 
             elementFormDefault="qualified"
             targetNamespace="top.xsd" 
             xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="top">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="chield1" type="chield1" />
          <xs:element name="chield2" type="chield2" />
        </xs:sequence>
    </xs:element>
    <xs:complexType name="chield1">
      <xs:attribute name="attribute1" type="xs:string" />
    </xs:complexType>
    <xs:complexType name="chield2">
      <xs:attribute name="attribute2" type="xs:string" />
    </xs:complexType>
  </xs:schema>
4

1 回答 1

1

第一个问题是您的模式文档格式不正确。

一旦提供了复杂类型 'top' 缺少的结束标记,下一个问题是您指的是已命名的类型chield1,并且chield2有时称为 null 命名空间。也就是说,它们的扩展名称不标识特定的命名空间;XSD 和许多其他规范将 null 命名空间视为只是另一个恰好没有名称的命名空间。

同时,您的模式文档在命名空间中声明了两种名为chield1和的类型。(顺便说一句,这不是一个好的命名空间名称——命名空间名称应该是绝对 URI,尽管出于复杂的原因,许多工具不强制执行此规则。)您对元素 chield1 和 chield2 的声明不指向这些类型。如果您希望他们这样做,则声明应说明如下:chield2top.xsd

<xs:element name="chield1" 
            type="tns:chield1"
            xmlns:tns="top.xsd" />
<xs:element name="chield2" 
            type="tns:chield2"
            xmlns:tns="top.xsd" />

当然,在实践中,tns 的命名空间声明可以在元素声明的任何共同祖先上进行,而不是;一个常见的模式是把它放在模式元素上。

于 2013-02-07T17:37:11.210 回答