0

ユーザー指定の xml スキーマから空の xml を生成していますが、属性の名前空間宣言と混同しています。

たとえば、このスキーマの場合。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns="http://tempuri.org/Product" 
           targetNamespace="http://tempuri.org/Product">
    <xs:complexType name="ProductType">
        <xs:sequence>            
        </xs:sequence>
        <xs:attribute name="Id" type="xs:string" />
        <xs:attribute name="Name" type="xs:string" />
    </xs:complexType>
    <xs:element name="Product" type="ProductType" />
</xs:schema>

これを生成しました。

<root>
  <Product xmlns="http://tempuri.org/Product" 
           xmlns:ns1="http://tempuri.org/Product" 
           ns1:Id="1" 
           ns1:Name="2" />
</root>

しかし、これを生成するビジュアル スタジオ。

<root>
  <Product xmlns="http://tempuri.org/Product" 
           Id="1" 
           Name="2" />
</root>

どちらが正しいですか ?

更新 1:

xml スキーマのフォーム属性がどのように設定されていても、生成された xml を XML DOM にロードすると、Name 属性の NamespaceURI は常に空の文字列になります。(製品には名前空間がありますが)

これらの属性に対して xpath クエリを実行していますが、常に名前空間プレフィックスを使用するか、親要素の名前空間と常に同じであると想定するかを決定できません。

違いの例;

/*/ns1:Product/@Id
/*/ns1:Product/ns1:@Id

スキーマを知らずに名前空間属性構文 (修飾された ?、修飾されていない ?) の一般的な使用例は何ですか?

4

3 に答える 3

1

attributeFormDefault="qualified"スキーマはルート<xs:schema>要素で指定されていないため、後者が正しいです。デフォルトの動作 ( attributeFormDefault="unqualified") では<xs:attribute>、複合型内にネストされた宣言には名前空間がありません。に設定されている場合、スキーマqualifiedの が取得されtargetNamespace、その時点で最初の選択肢が正しいでしょう。

于 2013-01-03T16:59:29.053 に答える
0

によると。XSD 1.0仕様の3.2.2、または秒。XSD 1.1 の3.2.2.2、ローカル属性宣言 (例のIdおよびName属性の宣言など) は、次の場合に名前空間で修飾されます。

  • 彼らのxsd:attribute宣言はform="qualified"、または
  • それらのxsd:attribute宣言にはform属性がなく、外側のxsd:schema要素にはattributeFormDefault="qualified".

それ以外の場合、それらは修飾されていません (展開された名前の名前空間の値は null です)。

(XSD 1.0 は、同じセクションでトップレベルとローカルの両方の属性宣言に対して XML からスキーマ コンポーネントへのマッピングを提供することに注意してください。どのケースが記述されているかを注意して確認する必要があります。XSD 1.1 では、テキストがより細かく分割されます。混乱を避けるためです。)

したがって、表示するスキーマを考えると、スキーマに対して有効なのは最初ではなく 2 番目のインスタンスです。

于 2013-01-03T17:03:50.070 に答える
0

これはformxs:attribute 要素の属性に関するものだと思います。from属性値が、qualifiedスキーマによって記述された属性に接頭辞を付ける必要がある (つまり、名前空間に属している) 場合、それ以外の場合は接頭辞を付けてはなりません。form属性が欠落している場合、値は xs:schema 要素から取得されattributeFormDefaultます。この属性がunqualified指定されていない場合、デフォルト値は です。詳細については、 Xsd スキーマ仕様に移動し、「attributeFormDefault」を検索してください。この場合、VSが正しいと思います。

于 2013-01-03T17:09:42.430 に答える