1

xsd を使用して、xml を検証しようとしています。

xml は、オブジェクトの作成に使用されます。リスト内の要素によって作成できるオブジェクトには、SC と SMSC の 2 種類があります。SMSC は SC であり、それを拡張したものです。

SMSC には新しいプロパティは含まれていません。xml の観点からは、SMSC は、そのプロパティを定義する要素が<SMSC>タグではなくタグでラップされていることを除いて、あらゆる点で SC と同じです<SC>

XSD は次のようになります。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name='Definitions'>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" name="SC">
          <!--SNIP properties of SC and SMSC -->
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

SMSC 要素内のすべてのプロパティ定義を複製する以外に、要素として SC または SMSC を許可するようにこれを変更する方法はありますか? ドキュメントの長さを 2 倍にして、すべてのプロパティ定義を複製する必要はありません。

現状では、XML で唯一の検証エラーは、SMSC 要素がある場所です。すべてのプロパティ定義を複製せずにこれを修正する方法がない場合は、そのままにしておきますが、実用的であれば、これがスローする警告を削除することを明らかに望んでいます。

4

1 に答える 1

1

紛らわしいby tags instead of tagsですが、以下はあなたの質問に答えているか、より良い説明を引き出していると思います.

つまり、重複を回避しています。追加のタイプSMSCは実際には必要ありませんが( Definitions2を参照)、念のため入れておきます ( Definitions )。SCタイプのSMSCエレメントを作成しても、まったく同じように機能します。

Definitions / Definitions2Definitions3の違いは、選択肢の代わりに置換グループを使用することです。私は個人的に選択肢よりも置換グループを好みますが、置換グループに関連する問題に遭遇することはそれほど珍しいことではありません (つまり、あちこちでサポートが不十分です)。

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" xmlns="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:complexType name="SC">
        <xsd:sequence>
            <!-- Stuff goes here -->
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="SMSC">
        <xsd:complexContent>
            <xsd:extension base="SC"/>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:element name="Definitions">
        <xsd:complexType>
            <xsd:choice maxOccurs="unbounded">
                <xsd:element name="SC" type="SC"/>
                <xsd:element name="SMSC" type="SMSC"/>
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>
    <!-- Another way -->
    <xsd:element name="Definitions2">
        <xsd:complexType>
            <xsd:choice maxOccurs="unbounded">
                <xsd:element name="SC" type="SC"/>
                <xsd:element name="SMSC" type="SC"/>
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Definitions3">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="SC" maxOccurs="unbounded"/>               
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="SC" type="SC" />                 
    <xsd:element name="SMSC" type="SMSC" substitutionGroup="SC" />              
</xsd:schema>
于 2013-03-12T14:54:26.873 に答える