xsdファイルには、この要素の基本型があります。
<xs:complexType name="event" abstract="true" >
<xs:attribute name="move" type="aos:move_ref" use="required" />
<xs:attribute name="type" type="aos:event_type" use="required" />
</xs:complexType>
そして、子タイプの属性の値を定義したいtype
ので、これを試しました:
<xs:complexType name="signal" >
<xs:complexContent>
<xs:extension base="aos:event">
<xs:attribute name="type" type="aos:event_type" fixed="signal" />
<xs:attribute name="source" type="aos:signal_source" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
Visual Studioは気にしないようですが、CodeSynthesis C ++コードジェネレーターは同意していないようです:
エラー:属性'type'はすでにベースで定義されています
これはどのように書くべきですか?属性の値type
をそれぞれの異なる子タイプに固有にする必要があります。
編集 - -
質問をより明確にするために、私がやりたいのと同じことをC++で記述します。
基本クラスは次のとおりです。
class Event
{
public:
std::string name() const { return m_name; }
protected:
// we need the child class to set the name
Event( const std::string& name ) : m_name( name ) {}
// it's a base class
virtual ~Event(){}
private:
std::string m_name;
};
これで、子の1つを次のように実装できます。
class Signal : public Event
{
public:
Signal() : Event( "signal" ){}
};
ご覧のとおり、子クラスは基本クラスによって定義される属性の値を定義します。xsdで表現することさえ可能ですか?