2010-10-05 7 views
2

Ce XML documentation semble dire que l'ID type dérivé prend en charge un modèle, mais lorsque je tente de définir un avec ce code:
Comment définissez-vous un attribut d'ID de schéma XML qui a un modèle?

 <complexType name="CourseType"> 
      <attribute name="courseNumber" type="ID"> 
       <pattern value="[A-Z]{2}(\d{3}).(\d{3})" /> 
      </attribute> 
      <attribute name="numOfCredits" type="university:CourseCredits" /> 
      <element name="course_name" type="university:MixedName" /> 
      <element name="course_professor" type="string" /> 
     </complexType>> 


... Je reçois une erreur dans le fichier XML oXygen éditeur qui dit The content of 'courseNumber' must match (annotation?, (simpleType?)). A problem was found starting at: pattern.

Est-ce que je définis correctement mon schéma pour cet attribut ID?

Répondre

3

Si vous avez besoin de restreindre le type de données simple intégré, vous devez créer votre propre simpleType. Utilisez Derivation by Restriction. Essayez quelque chose comme ceci:

<simpleType name='better-ID'> 
    <restriction base='ID'> 
    <pattern value='(\d{3}).(\d{3})'/> 
    </restriction> 
</simpleType> 

<complexType name="CourseType"> 
     ... 
     <attribute name="courseNumber" type="better-ID"/> 
     <attribute name="numOfCredits" type="university:CourseCredits" /> 
</complexType> 

Ou vous pouvez simplement intégrer simpleType:

<complexType name="CourseType"> 
      ... 
      <attribute name="courseNumber"> 
       <simpleType> 
        <restriction base='ID'> 
        <pattern value='(\d{3}).(\d{3})'/> 
        </restriction> 
       </simpleType> 
      </attribute> 
      <attribute name="numOfCredits" type="university:CourseCredits" /> 
    </complexType> 

Voir aussi @jasso commentaires ci-dessous pour corriger quelques autres erreurs dans votre XSD.

+2

L'idée est correcte mais cette solution a quelques problèmes. 'complexType' ne peut pas contenir' element' en tant qu'enfant direct. Tous les 'element's doivent être les descendants d'un seul élément' all', 'choice',' group' ou 'sequence'. Les attributs doivent également être définis * après * le conteneur de l'élément. – jasso

+2

@kchau, @Shcheklein: Le motif d'identification spécifié par OP, semble étrange aussi. IIRC \ d signifie un nombre décimal afin qu'il puisse contenir un point. Ainsi, l'ID contient uniquement des nombres et 1-3 points. Pourtant, il devrait être un 'xs: ID' valide, mais' ID's doivent être des NCNames valides, donc ils ne peuvent pas commencer par un nombre! Soit je me trompe, soit il y a un "bug" dans tes devoirs. – jasso

+0

@jasso: merci pour les corrections. Je ne peux pas corriger le code dans ma réponse car je ne sais pas ce que @kchau veut exactement - séquence, groupe, choix. Cependant fixé ma réponse pour mentionner vos commentaires. – Shcheklein