0

私の XSD は Visual Studio 2010 で動作しないため、それを使用して生成しました。私のものと生成されたものの違いは階層ですか? dtype を使用して複合型を呼び出します。なぜそれがうまくいかないのですか?

ビジュアル スタジオのバージョン:

<?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>

個人的には自分のバージョンがきちんとしていると思いますが、この時点でタイプを参照として使用できないというエラーが発生します:

<?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'の複合型の欠落している終了タグが指定されると、次の問題は、名前空間という名前の型を参照していることです。これは、null名前空間chield1chield2呼ばれることもあります。つまり、それらの展開された名前は特定の名前空間を識別しません。XSDおよび他の多くの仕様では、null名前空間は、名前がない単なる別の名前空間であるかのように扱われます。

一方、スキーマドキュメントでは、名前空間にという名前のchield12つのタイプが宣言されています。(ちなみに、名前空間名は適切ではありません。複雑な理由で多くのツールがこのルールを適用していませんが、名前空間名は絶対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 に答える