2010-12-10 10 views

Antwort

42

Versuchen

<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> 
+3

gute antwort - das 'nillable' ist überflüssig gedacht. –

+0

@Nic - Einverstanden. Ich habe nur die Zeile aus der Frage kopiert und eingefügt :) – Kamal

+0

Mit diesem bekomme ich "Element 'lastName' hat sowohl ein Attribut 'type' als auch ein Kind 'anonymer Typ'. Nur eines davon ist für ein Element erlaubt." Ich denke, es gibt ein Problem bei der Verwendung von type = "xs: string" im Container-Element. –

9

@Kamal Sie im Grunde richtige Antwort hier gegeben hat. Deshalb - nillable scheint immer Probleme zu verursachen. Effektiv können Sie nillable als das Attribut xsi:nil für dieses Element berücksichtigen. Die XML Schema spec beschreibt Nillable als Out-of-Band-Signal - es wird im Grunde verwendet, um NULL zu Datenbanken anzuzeigen.

Was Sie wollen, ist ein Element, das durch @Kamal

13
<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> 
+0

Ich mag das besser als das von Gab angebotene 2, dieses funktioniert für mich. Da ich nach einem Ausdruck suchte, der gerade die führenden Räume los wurde, nicht die Zwischenräume zwischen Text – ycomp

+2

Ich denke, dass Sie diese Regex einfach durch ersetzen können '\ S +' wie Gab darauf hingewiesen hat. – bvdb

8

Dies ist IMHO ein besseres Muster als gegeben mindestens ein Zeichen lang sein muss:

<xs:simpleType name="NonEmptyString"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="^(?!\s*$).+" /> 
    </xs:restriction> 
</xs:simpleType> 

oder

<xs:simpleType name="NonEmptyStringWithoutSpace"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="\S+"/> 
    </xs:restriction> 
</xs:simpleType> 
+0

Gibt es einen Vorteil für Ihren ersten Vorschlag gegenüber dem zweiten Vorschlag? – ycomp

+0

Nun wird ein (nicht leerer) blanck String vom 1. aber nicht vom 2. erlaubt. Es hängt nur von Ihren Bedürfnissen ab – Gab

0

Das war meine Lieblingslösung.

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