2010-02-23 9 views
4

J'ai un projet où un document xsd est chargé, et sur la base de cela un éditeur est créé pour chaque élément. Et puis xml qui implémente ce schéma est chargé dans l'éditeur. Cela peut être une simple zone de texte pour une chaîne de caractères, une datepicker pour une date ou une donnée plus complexe comme un chapitre avec des métadonnées associées.
L'éditeur est générique, l'éditeur a donc été généré en fonction du schéma. Pour les types simples (comme la chaîne et la date), nous pouvons utiliser l'attribut type. Mais pour les types personnalisés plus complexes, nous devons ajouter un attribut au document xsd qui définit le sous-élément de l'éditeur à utiliser.Comment ajouter un attribut à un élément de schéma xml?

J'ai donc ajouté un attribut personnalisé appelé UIType, mais cela n'est pas autorisé par le schéma de schéma w3. Y a-t-il un moyen d'étendre le schéma du schéma w3, de préférence sans en faire une copie et en ajoutant ce dont j'ai besoin, mais en l'agrandissant? Ou y a-t-il une autre façon plus intelligente de faire cela?

Merci.

Juste pour rendre clair; Je ne veux pas ajouter l'attribut aux données xml réelles, mais au schéma.

Voici un exemple du schéma:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified"> 
    <xs:element name="PublishDate" type="xs:date" /> 
    <xs:element name="Chapters"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element maxOccurs="unbounded" name="Chapter" UIType="ChapterPicker" > 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="ID" type="xs:int" /> 
          <xs:element name="FileID" type="xs:int" /> 
          <xs:element name="Title" type="xs:string" /> 
          <xs:element name="Artist" type="xs:string" /> 
          <xs:element name="Year" type="xs:int" /> 
          <xs:element name="Timestamp" type="xs:string" /> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

Je me demandais cela aussi. –

Répondre

2

Vous semblez déjà être créer vos types étendus. Vous n'êtes pas limité à utiliser "xs: int" ou "xs: string" comme type. Vous pouvez définir vos propres types en extrayant les éléments complexType et en les nommant. Vous pouvez ensuite utiliser leur nom comme type pour d'autres éléments.

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified"> 
    <xs:element name="PublishDate" type="xs:date" /> 
    <xs:element name="Chapters" type="Chapters_t" /> 
    <xs:complexType name="Chapters_t"> 
     <xs:sequence> 
      <xs:element maxOccurs="unbounded" name="Chapter" UIType="ChapterPicker" > 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="ID" type="xs:int" /> 
         <xs:element name="FileID" type="xs:int" /> 
         <xs:element name="Title" type="xs:string" /> 
         <xs:element name="Artist" type="xs:string" /> 
         <xs:element name="Year" type="xs:int" /> 
         <xs:element name="Timestamp" type="xs:string" /> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 
+0

Ahh frig, je pense que j'ai même lu à ce sujet sur w3schools il y a quelque temps ... Je pense que cela devrait résoudre le problème. Je vais le donner. Je vous donnerai l'acceptation plus tard une fois que je l'ai testé. –

+0

Cela fonctionne. C'était anoyingly simple. Merci. –

+0

De rien. – Ioan

Questions connexes