2017-01-03 11 views
0

抽象クラス(例:「車両」)を持ち、他のクラス(「車」および「バイク」の例として)を派生させたいと思います。抽象クラスから派生し、派生クラスのみを参照する

私の主な要素で抽象クラスを参照したいので、xmlファイルで "vehicles"のすべての派生クラスを使用することができます。私はそれをどうやって行うのか分かりません。どんな助けもありがたいです。

例のXML:

<main xmlns="http://www.exampleURI.com/example"> 
    <car> 

    </car> 
    <motorbike> 

    </motorbike> 
</main> 

例XSDは:

<?xml version="1.0"?> 
<xs:schema targetNamespace="http://www.exampleURI.com/example" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ex="http://www.exampleURI.com/example"> 
    <xs:element name="main" type="ex:main"/> 
    <xs:complexType name="main"> 
     <xs:sequence> 
      <xs:element name="vehicles" type="ex:vehicles"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:element name="vehicles" type="ex:vehicles"/> 
    <xs:complexType name="vehicles" abstract="true"> 
     <xs:sequence/> 
    </xs:complexType> 
    <xs:element name="car" type="ex:car"/> 
    <xs:complexType name="car"> 
     <xs:complexContent> 
      <xs:extension base="ex:vehicles"> 
       <xs:sequence/> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
    <xs:element name="motorbike" type="ex:motorbike"/> 
    <xs:complexType name="motorbike"> 
     <xs:complexContent> 
      <xs:extension base="ex:vehicles"> 
       <xs:sequence/> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:schema> 
+0

あなたがこれまでに書かれているXMLスキーマ文書をご提示ください。ありがとう。 –

+0

事は現時点ではEnterprise Architectで視覚的に行っていますが、生成されたコードを表示できます。一秒。 – Cyriac

答えて

1

トリックを行うだろう置換グループのように思えます。また、mainの内部では、ref属性を使用して、正しい要素が参照されていることを確認し、無制限の数の子を許可する必要があります。

<?xml version="1.0"?> 
<xs:schema targetNamespace="http://www.exampleURI.com/example" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ex="http://www.exampleURI.com/example"> 
    <xs:element name="main" type="ex:main"/> 
    <xs:complexType name="main"> 
     <xs:sequence> 
      <xs:element ref="ex:vehicles" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:element name="vehicles" type="ex:vehicles"/> 
    <xs:complexType name="vehicles" abstract="true"> 
     <xs:sequence/> 
    </xs:complexType> 
    <xs:element name="car" type="ex:car" substitutionGroup="ex:vehicles"/> 
    <xs:complexType name="car"> 
     <xs:complexContent> 
      <xs:extension base="ex:vehicles"> 
       <xs:sequence/> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
    <xs:element name="motorbike" type="ex:motorbike" substitutionGroup="ex:vehicles"/> 
    <xs:complexType name="motorbike"> 
     <xs:complexContent> 
      <xs:extension base="ex:vehicles"> 
       <xs:sequence/> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:schema> 

この文書では、上記のスキーマに対して有効である:

<main xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.exampleURI.com/example test.xsd" 
xmlns="http://www.exampleURI.com/example"> 
    <car></car> 
    <motorbike></motorbike> 
</main> 
関連する問題