0

私は過去数日間、いくつかの xml スキーマ ファイルを開発しており、simpletypes および complextype 要素を拡張する特定の要素について学びました。

私は現在、Visual Studio 2012 プロフェッショナル エディションを使用しており、たとえば、これらのファイル間の XSD ファイルの関係 (あえて親子関係、または 1 対多の関係) をテストしています (Google DFA API のオブジェクトを使用しています)。 :

RichMediaAsset
∟ RichMediaExpandingHtmlAsset
∟ RichMediaExpandingHtmlAsset
∟ RichMediaFloatingHtmlAsset
...

これらのクラスはすべて、RichMediaAsset (基本または抽象) から「拡張」または「継承」します。XSDでRichMediaAssetを次のように定義しました

<?xml version="1.0" standalone="yes"?>
<xs:schema id="RedirectCreativeBase" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <!-- simpleTypes=primitive -->
  <!-- extBooleanMethodPrefix=is -->
  <xs:complexType name="RichMediaAssetWrapper" abstract="true">
    <xs:sequence>
      <xs:element name="fileName" type="xs:string" minOccurs="0" />
      <xs:element name="fileSize" type="xs:int" minOccurs="0" />
      <xs:element name="id" type="xs:long" minOccurs="0" />
      <xs:element name="parentAssetId" type="xs:long" minOccurs="0" />
      <xs:element name="type" type="xs:string" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

2 番目のファイル RichMediaExpandingHtmlAsset を次のように定義しました。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="RichMediaExpandingHtmlAssetWrapper" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:include schemaLocation="./RichMediaAsset.xsd"/>
  <xs:complexType name="RichMediaExpandingHtmlAssetWrapper" abstract="false" >
    <xs:extension base="RichMediaAssetWrapper"> <!-- Not happy here -->
      <xs:sequence>
         <!-- content to be included,extending RichMediaAsset's complex type called RichMediaAssetWrapper -->
      </xs:sequence>
    </xs:extension>
  </xs:complexType>
</xs:schema>

私がVS2012が満足していないと述べた部分は、次のように定義されています。

Warning 1   The 'http://www.w3.org/2001/XMLSchema:extension' element is not supported in this context.  C:\eclipse\Workspace\aem_adservices_google_dfa\aem.adservices.google.dfa\xsd\Creative\RichMediaExpandingHtmlAsset.xsd   5   6   Miscellaneous Files
Warning 2   The element 'complexType' in namespace 'http://www.w3.org/2001/XMLSchema' has invalid child element 'extension' in namespace 'http://www.w3.org/2001/XMLSchema'. List of possible elements expected: 'annotation, simpleContent, complexContent, group, all, choice, sequence, attribute, attributeGroup, anyAttribute' in namespace 'http://www.w3.org/2001/XMLSchema'.    C:\eclipse\Workspace\aem_adservices_google_dfa\aem.adservices.google.dfa\xsd\Creative\RichMediaExpandingHtmlAsset.xsd   5   6   Miscellaneous Files

現在の質問: これは 2012 年のバグの可能性ですか、エラーを犯したのでしょうか、(w3schools.com で使用例を確認したにもかかわらず) これは単にサポートされていないのでしょうか、それとも 1 対多を定義するためのより良い方法はありますか?関係?

4

1 に答える 1

0

XSD に問題が見つかりました。実はタグが抜けていました。これらの場合、混合コンテンツまたは要素のみを含む複合型/単純型それぞれに拡張または制限を定義するために、 xs:complexContentorを定義する必要があります。xs:simpleContent

これが私の解決策であり、コードのエラーも消えました。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="RichMediaExpandingHtmlAssetWrapper" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:include schemaLocation="./RichMediaAsset.xsd"/>
  <xs:complexType name="RichMediaExpandingHtmlAssetWrapper" abstract="false" >
    <xs:complexContent>
      <xs:extension base="RichMediaAssetWrapper">
        <xs:sequence>
          ...
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>

ソース: ComplexContent ; シンプルコンテンツ

于 2012-11-13T09:50:43.947 に答える