在 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
属性的值特定于每个不同的子类型。
编辑 - -
为了使问题更清楚,我将用 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;
};
现在,其中一个孩子可以这样实现:
class Signal : public Event
{
public:
Signal() : Event( "signal" ){}
};
如您所见,子类定义了由基类定义的属性值。甚至可以用xsd表达吗?