Je voudrais créer un XSD qui définit un attribut qui peut être placé sur des éléments d'autres schémas, ou des éléments qui ne sont pas dans un schéma. Par exemple, le schéma ressemblerait à quelque chose comme ceci:Puis-je créer un schéma XSD qui place un attribut sur tous les types complexes?
<xs:schema id="MySchema"
targetNamespace="http://tempuri.org/MySchema"
elementFormDefault="qualified"
xmlns="http://tempuri.org/MySchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:attribute name="myAttribute" />
</xs:schema>
Et le document pourrait ressembler à ceci:
<someElement xmlns="http://tempuri.org/OtherSchema" xmlns:m="http://tempuri.org/MySchema">
<someOtherElement someAttribute="value" m:myAttribute="value2" />
</someElement>
"OtherSchema" pour cet exemple ressemble à ceci:
<xs:schema id="OtherSchema"
targetNamespace="http://tempuri.org/OtherSchema"
elementFormDefault="qualified"
xmlns="http://tempuri.org/OtherSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="someElement">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="someOtherElement">
<xs:complexType>
<xs:attribute name="someAttribute" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Un exemple complet, comprenant une application console C# effectuant une validation, peut être téléchargé à partir du http://dl.getdropbox.com/u/407740/SchemaTest.zip. Mon but est de le faire valider sans avoir à modifier "OtherSchema". Est-ce possible?
Est-ce que someElement, someOtherElement et someAttribute sont définis dans OtherSchema? Je pense que vous voulez que myAttribute soit requis sur * tous * les éléments, sans qu'il soit défini sur ces éléments. Cela me semble impossible. Je l'ai essayé, et bien sûr ça ne marche pas. John dit que cela fonctionne pour xsi: nil etc, mais ils sont intégrés dans le monde XML Schema, et pourraient être (et ressembler) à des cas spéciaux pour moi, comme suggéré par jelovirt. – 13ren
Oui, autant que je sache, les attributs de l'instance de schéma sont gérés spécialement. Je peux construire un OtherSchema qui rend l'exemple ci-dessus valide, mais je voudrais que cela fonctionne sans avoir à modifier OtherSchema. –
@jon s'il vous plaît ajouter un exemple complet qui devrait faire ce que vous voulez, mais pas, de sorte qu'il peut être exécuté directement. C'est-à-dire, un "OtherSchema", les espaces de noms qui fonctionnent, et tout ce qui est nécessaire, donc il peut simplement être coupé et collé. Je pense que c'est une question intéressante, mais elle est aussi assez sophistiquée et abstraite, et cela vous aidera beaucoup si vous la rendez aussi concrète et précise que possible. – 13ren