8
votes

XSD: restreindre l'attribut à XS: flotter ou ""

J'essaie de définir un type d'élément en XSD, pour lequel je veux un attribut facultatif, lequel si le présent peut contenir un flotteur ou être vide (mais toujours présent).

IE: xxx

nécessite "de fixation" pour permettre à tous les points XML suivants: - xxx

La seule façon dont je peux voir que cela consiste à faire Changer de type sur XS: chaîne et utilisez XS: restriction avec une expression régulière. Mais cela ne semble pas très idéal pour moi. Y a-t-il une meilleure façon?

et je avez pour pouvoir prendre en charge ces variations du programme XML - le programme et XML existant est l'héritage et j'essaie de revenir en arrière Un schéma pour correspondre aux myriades variations que je vois dans ce que nous devons considérer comme XML valide.

xsd

0 commentaires

3 Réponses :


1
votes

Je ne pense pas qu'il y ait un moyen de gérer cela et d'utiliser xs: float . Fondamentalement, cela revient au fait que la chaîne vide n'est pas un nombre valide. Vous vous attendriez normalement d'une valeur de 0, soit pour que l'élément soit manquant complètement. Il y a une bonne explication que la réponse à la question suivante:

éléments vides pour primitve DaTatypes interdits dans XSD < / p>

Il semble que la possibilité d'utiliser XS: String et une regexp puissent être votre meilleur plan.


0 commentaires

4
votes

Si vous pouviez vous tenir à l'aide d'un élément plutôt que d'un attribut, vous pouvez faire le XS: Float Nillable. De cette façon, vous pouvez utiliser XSI: nil = "true" dans votre document d'instance pour indiquer que l'élément n'a pas de valeur: xxx

aucun équivalent pour les attributs cependant. >


0 commentaires

6
votes

Vous pouvez définir un type personnalisé pour cela en combinant float et chaîne vide: xxx pré>

ou à l'aide de REGEXP: p>

<xs:simpleType name="emptyFloat">
    <xs:restriction base="xs:string">
        <xs:pattern value="-?\d*\.?\d*"/>
    </xs:restriction>
</xs:simpleType>


1 commentaires

Je suppose que vous pouvez faire la même chose avec des attributs en utilisant complextype s? C'est une excellente réponse et a résolu mon problème.