2010-11-18 17 views
3

Je suis en train de redéfinir une définition d'élément contenu dans un qui ressemble à external xsd (que je ne peux pas modifier) ​​ceci:Redéfinir élément 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> 

Cela définit des éléments tels que:

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

Comment puis-je l'étendre pour que je puisse créer des éléments avec 2 attributs supplémentaires (foo et bar)?
Voir cet exemple ci-dessous pour le résultat final, je dois:

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

Ce que j'ai essayé:

<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> 

Toutefois, cela ne fonctionne pas.
Je n'arrive pas à trouver de ressources détaillant comment redéfinir un xsd:element contenant des attributs, ce qui, je crois, est le problème ici.

S'il vous plaît commenter si plus d'infos est nécessaire.

+0

Ceci est vraiment déroutant. Est-ce une question sur Spring MVC, XML Schema ou Visual Studio? Ça ne peut pas être tous les trois. – skaffman

+0

Le schéma ci-dessus est tiré d'un printemps mvc xml, j'ai ajouté cette balise au cas où quelqu'un devait le modifier exactement comme je le dois maintenant. Visual Studio me dit simplement que ce qui précède est faux, mais je suppose que toute autre chose aurait mis en évidence les mêmes erreurs. – Razor

+0

utile (+1) ..... –

Répondre

2

Vous ne pouvez pas avoir un complexContent à l'intérieur d'un simpleType, cela n'a pas de sens. En outre, les seules choses que vous pouvez redéfinir sont: simpleType, complexType, group, attributeGroup. Vous ne pouvez donc pas redéfinir un élément. Vous ne pouvez changer son type que s'il a un type nommé, ce qui ne semble pas être le cas dans votre exemple.

Voir http://www.w3.org/TR/xmlschema-0/#Redefine pour plus d'informations.

+0

Toujours nouveau avec les schémas xml donc je savais que j'ai fait des erreurs là-bas - mais dites-vous que donné un élément défini avec 2 attributs, je ne peux plus ajouter d'attribut? – Razor

+0

Dans ce cas, étant donné que le type d'élément n'est pas nommé dans le schéma d'origine, vous ne pouvez pas le redéfinir comme vous l'espériez. Mais quel est votre objectif de toute façon? Je veux dire que si vous voulez créer des documents valides pour ce schéma mvc, vous ne pouvez pas ajouter d'attributs (c'est la raison d'être du schéma, et ce schéma n'autorise pas d'attributs supplémentaires pour l'élément view-controller). Mais si vous n'y tenez pas, vous pouvez copier ce fichier de schéma et le modifier - et également modifier l'espace de noms pour éviter toute confusion. – Damien

+0

Mon but était d'étendre le xml afin que mon application puisse avoir certaines données supplémentaires requises dont l'application d'origine n'a pas besoin. Difficile à comprendre pourquoi je ne peux pas * ajouter * des données, je peux voir pourquoi les attributs seraient protégés contre la suppression. Merci d'avoir répondu! – Razor

0

@Razor, vous voulez dire que vous ne voulez pas modifier le xsd existant mais que vous voulez en créer un de plus qui altère les propriétés des éléments ??

si c'est le cas, je pense que c'est presque impossible! erreurs comme definition already exists problème ..

+0

Ce n'est pas que je ne veux pas, je ne peux pas car il est entretenu par un tiers. Assez sûr que 'xsd: redefine' fait ce dont j'ai besoin ici, mais je ne sais pas quelle est la syntaxe correcte. – Razor