Voici mon exemple de code XML:
<bestContact>
<firstName><![CDATA[12345]]></firstName>
<lastName />
</bestContact>
J'utilise:
<xs:element name="lastName" type="xs:string" minOccurs="1" nillable="false"/>
Le XSD doit valider lastName
comme non nul ou vide.
Essayer
<xs:element name="lastName" minOccurs="1" nillable="false">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xsd:element name="lastName" type="NonEmptyString" nillable="false"/>
<xsd:simpleType name="NonEmptyString">
<xsd:restriction base="xs:string">
<xsd:minLength value="1" />
<xsd:pattern value=".*[^\s].*" />
</xsd:restriction>
</xsd:simpleType>
@Kamal vous a fondamentalement donné la bonne réponse ici. C'est pourquoi - nillable
semble toujours causer des problèmes. Effectivement, vous pouvez considérer nillable
comme signifiant autoriser l'attribut xsi:nil
sur cet élément. La spécification XML Schema décrit nillable en tant que signal hors bande - elle est essentiellement utilisée pour indiquer NULL aux bases de données.
Ce que vous voulez, c'est un élément qui doit comporter au moins un caractère, comme indiqué par @Kamal.
Ceci est un meilleur modèle IMHO:
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:pattern value="^(?!\s*$).+" />
</xs:restriction>
</xs:simpleType>
ou
<xs:simpleType name="NonEmptyStringWithoutSpace">
<xs:restriction base="xs:string">
<xs:pattern value="\S+"/>
</xs:restriction>
</xs:simpleType>
C'était ma solution préférée.
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:pattern value="[\s\S]*[^ ][\s\S]*"/>
</xs:restriction>
</xs:simpleType>`