Ответ 1
Try
<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>
Это мой пример кода XML:
<bestContact>
<firstName><![CDATA[12345]]></firstName>
<lastName />
</bestContact>
Я использую:
<xs:element name="lastName" type="xs:string" minOccurs="1" nillable="false"/>
XSD Должно быть проверено lastName
как не пустое или пустое.
Try
<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>
@Камал дал вам в основном правильный ответ здесь. Вот почему - nillable
всегда вызывает проблемы. Эффективно, вы можете рассмотреть nillable
как значение разрешить атрибут xsi:nil
для этого элемента. Спецификация XML-схемы описывает nillable как внеполосный сигнал - в основном используется для обозначения NULL для баз данных.
То, что вы хотите, это элемент, который должен иметь хотя бы один символ, заданный @Kamal
Это ИМХО лучший образец:
<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>
Это было мое любимое решение.
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:pattern value="[\s\S]*[^ ][\s\S]*"/>
</xs:restriction>
</xs:simpleType>