これは私のサンプルXMLコードです。
<bestContact>
<firstName><![CDATA[12345]]></firstName>
<lastName />
</bestContact>
私は使っている:
<xs:element name="lastName" type="xs:string" minOccurs="1" nillable="false"/>
XSDはlastName
がnullまたは空でないことを検証する必要があります。
試して
<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>
これは私見のより良いパターンです:
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:pattern value="^(?!\s*$).+" />
</xs:restriction>
</xs:simpleType>
または
<xs:simpleType name="NonEmptyStringWithoutSpace">
<xs:restriction base="xs:string">
<xs:pattern value="\S+"/>
</xs:restriction>
</xs:simpleType>
@Kamalは、ここで基本的に正しい答えを与えました。これが理由です-nillable
は常に問題を引き起こすようです。実質的に、nillable
は、この要素のxsi:nil
属性を許可する意味と見なすことができます。 XML Schema spec は、nillableを帯域外信号として説明します-基本的に、データベースに[〜#〜] null [〜#〜]を示すために使用されます。
必要なのは、@ Kamalで指定された少なくとも1文字の長さでなければならない要素です
これは私のお気に入りのソリューションでした。
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:pattern value="[\s\S]*[^ ][\s\S]*"/>
</xs:restriction>
</xs:simpleType>