web-dev-qa-db-ja.com

XmlのXSD要素がヌルまたは空の制約ではない?

これは私のサンプルXMLコードです。

<bestContact>
<firstName><![CDATA[12345]]></firstName>
<lastName />
</bestContact>

私は使っている:

<xs:element name="lastName" type="xs:string" minOccurs="1" nillable="false"/>

XSDはlastNameがnullまたは空でないことを検証する必要があります。

23
Ramakrishnan

試して

<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>
16
sri

これは私見のより良いパターンです:

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

@Kamalは、ここで基本的に正しい答えを与えました。これが理由です-nillableは常に問題を引き起こすようです。実質的に、nillableは、この要素のxsi:nil属性を許可する意味と見なすことができますXML Schema spec は、nillableを帯域外信号として説明します-基本的に、データベースに[〜#〜] null [〜#〜]を示すために使用されます。

必要なのは、@ Kamalで指定された少なくとも1文字の長さでなければならない要素です

9
Nic Gibson

これは私のお気に入りのソリューションでした。

<xs:simpleType name="NonEmptyString">
    <xs:restriction base="xs:string">
        <xs:pattern value="[\s\S]*[^ ][\s\S]*"/>
    </xs:restriction>
</xs:simpleType>
0
mrx