重新定义xsd元素

时间:2010-11-18 15:29:08

标签: xml xsd

我正在尝试重新定义external xsd中包含的元素定义(我无法修改),如下所示:

<xsd:element name="view-controller">
    <xsd:complexType>
        <xsd:attribute name="path" type="xsd:string" use="required" />
        <xsd:attribute name="view-name" type="xsd:string" />
    </xsd:complexType>
</xsd:element>

这定义了以下元素:

<mvc:view-controller path="/path" view-name="server/view/etc" />

如何扩展它以便我可以创建具有2个附加属性(foo和bar)的元素?
请参阅下面的示例,了解我需要的最终结果:

<mvc:view-controller path="/path" view-name="server/view/etc" foo="stuff" bar="more stuff" />

我尝试了什么:

<xsd:redefine schemaLocation="http://www.domain.org/schema/correct-path.xsd">
    <xsd:simpleType name="view-controller">
        <xsd:complexContent>
            <xsd:extension base="view-controller">
                <xsd:attribute name="foo" type="xsd:string" />
                <xsd:attribute name="bar" type="xsd:string" />
            </xsd:extension>
        </xsd:complexContent>
    </xsd:simpleType>
</xsd:redefine>

然而这不起作用。
我似乎无法找到任何详细说明如何重新定义包含xsd:element属性的资源,我认为这是问题所在。

如果需要更多信息,请发表评论。

2 个答案:

答案 0 :(得分:2)

你不能在simpleType中有一个complexContent,它没有意义。

此外,您可以重新定义的唯一内容是:simpleType,complexType,group,attributeGroup。所以你不能重新定义一个元素。只有在具有命名类型时才能更改其类型,在您的示例中似乎不是这种情况。

有关详细信息,请参阅http://www.w3.org/TR/xmlschema-0/#Redefine

答案 1 :(得分:0)

@Razor,你的意思是你不想修改现有的xsd,但想再创建一个改变元素属性的xsd?

如果是这种情况那么我认为它几乎是不可能的!错误如definition already exists麻烦..