2010-11-18 2 views
3

Я пытаюсь переопределить определение элемента, содержащегося в external xsd (что я не могу изменить), который выглядит следующим образом:Redefine 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" /> 

Как продлить его, чтобы я мог создавать элементы с двумя дополнительными атрибутами (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, содержащих атрибуты, которые, я считаю, являются проблемой здесь.

Прокомментируйте, если требуется дополнительная информация.

+0

Это действительно сбивает с толку. Это вопрос о Spring MVC, XML Schema или Visual Studio? Это не все три. – skaffman

+0

Вышеприведенная схема взята из весеннего mvc xml, я добавил этот тег, если кто-то должен был его модифицировать точно так, как я должен сейчас. Визуальная студия просто говорит мне, что это неправильно, но я предполагаю, что все остальное могло бы подсказать те же ошибки. – Razor

+0

полезно (+1) ..... –

ответ

2

У вас не может быть complexContent внутри simpleType, это не имеет смысла.

Кроме того, вы можете только переопределить: simpleType, complexType, group, attributeGroup. Таким образом, вы не можете переопределить элемент. Вы можете изменить его тип, только если он имеет именованный тип, что, похоже, не так в вашем примере.

См. http://www.w3.org/TR/xmlschema-0/#Redefine для получения дополнительной информации.

+0

Все еще новый с xml-схемами, поэтому я знал, что совершил ошибки там, но вы говорите, что если задать элемент с двумя атрибутами, я больше не могу добавить какой-либо атрибут? – Razor

+0

В этом случае, поскольку тип элемента не указан в исходной схеме, вы не можете переопределить его, как вы надеялись. Но какова ваша цель? Я хочу сказать, что если вы хотите создать допустимые документы для этой схемы mvc, вы не можете добавлять атрибуты (для чего предназначена схема, и эта схема не позволяет добавлять дополнительные атрибуты для элемента view-controller). Но если вас это не волнует, вы можете скопировать этот файл схемы и изменить его, а также изменить пространство имен, чтобы избежать путаницы. – Damien

+0

Моя цель заключалась в расширении xml, чтобы мое приложение могло иметь некоторые требуемые дополнительные данные, которые не нужны оригинальному приложению. Трудно понять, почему я не могу * добавить * данные, я могу понять, почему атрибуты должны быть защищены от удаления tho. Спасибо за ответ! – Razor

0

@Razor, вы имеете в виду, что вы не хотите изменять существующий xsd, но хотите создать еще один xsd, который изменяет свойства элемента?

если это так, то я думаю, что это почти невозможно! ошибки, такие как definition already exists проблема ..

+0

Это не то, что я не хочу, я не могу, так как он поддерживается третьей стороной. Довольно уверен, что 'xsd: redefine' делает то, что мне нужно здесь, но я не знаю, какой правильный синтаксис. – Razor

Смежные вопросы