web-dev-qa-db-fra.com

L'élément XSD n'est pas une contrainte nulle ou vide pour XML?

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.

21
Ramakrishnan

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>
51
Kamal
<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>
15
sri

@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.

9
Nic Gibson

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>
8
Gab

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>`
0
mrx