2010-03-08 25 views
6

Xml'inizde kullanılan <myElement/> formunun boş öğelerini engellemenin bir yolu var mı? Başka bir deyişle, xsd'inizde <myElement/>'un geçersiz olduğunu belirtebilir misiniz?xsd'de boş öğeleri kısıtlama

çalışmıyor nillable="false" kullanarak, ne de yapar - Bunlardan ikisi <myElement/> izin verir.

cevap

10

Öğenin görünmesini engellemeye çalışıyorsanız, minOccurs="0" ile işaretleyebilirsiniz. Sanırım bu sizin peşinde olmadığınız şey değil, dolayısıyla karmaşık öğeye bağlı özniteliklerin her zaman olduğundan emin olmak istiyorsanız, özniteliklerden en az birinde usage="required" belirtmeniz veya bir öznitelik kullanmanız gerekir. grubudur. myElement basit bir türse ve bir değere sahip olduğundan emin olmak istiyorsanız, her zaman bunun türünü kısıtlayabilirsiniz. Eğer sıfır olmayan bir dize istiyorsanız, o zaman yapabilirdi: veri tipi TARİH bir Element null olduğunda

<xsd:element name="myElement"> 
    <xsd:simpleType> 
     <xsd:restriction base="xsd:string"> 
      <xsd:minLength value="1" /> 
     </xsd:restriction> 
    </xsd:simpleType> 
</xsd:element> 
+0

Bu umut verici görünüyor. Ya basit bir tür değilse, ör. "xsd: date" –

+0

'xsd: date' basit bir türüdür. Ancak, bu basit bir tür değilse, '' işlevini kullanabilirsiniz. Bununla birlikte, ben tipik olarak, 'xsd: element' türünün' type' özniteliğini kullanıyorum, yani: '' –

+0

Yani 'minLength' olduğunu dize olmayan basit türler için geçerli özellik? –

4

senin şema doğrulama hatası göstermek mümkün değilse, o zaman bir kullanabilirsiniz desen [gerekli formatı yazmanız sizin için bir yük değilse];

<root> 
    <date1>12/31/1999</date1> <!-- The Date format defined here is MM/DD/YYYY, null value or Date with any other format aren't accepted--> 
</root> 

Bu ilgili XSD geçerli::

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:include schemaLocation="Date_Def.xsd"/> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="date1" type="DATE_TYPE" minOccurs="0" maxOccurs="1" /> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

gözlemleyin Bu örnek XML olduğunu



Ben, benzer kod uygulaması aracınızın üzerinde çalışacak bir örnek eklemiş, DATE_TYPE,
türünün tanımını içeren bir şema dosyası ekliyorum. İşte Date_Def.xsd dosyasıdır:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:simpleType name="DATE_TYPE"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="([0][1-9]|[1][0-2])/([0][1-9]|[1-2][0-9]|[3][0-1])/[1-2][0-9][0-9][0-9]"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

burada tanımlanan tarihi formatında 10, kabul de boş etiketini kabul istiyorsanız , bununla kalıbını değiştirecek değildir/GG/YYYY, başka herhangi bir formatı ile boş değer veya Tarih MM olduğunu ..

null etiket veya desen GG/AA/yyyy bir tarihi değerini kabul eden Doğrulama olan
<xs:pattern value="|(([0][1-9]|[1][0-2])/([0][1-9]|[1-2][0-9]|[3][0-1])/[1-2][0-9][0-9][0-9])"/> 

.

Desenlerin tasarımında daha fazla yardıma ihtiyacınız varsa, o zaman SO içinde bir gönderi yapmakta çekinmeyin, umarım yardımcı olur. :-)

[not :: Tipi Çözünürlüklü da XML yanı sıra XSD dosyalarında belirtilen ek isim-boşluk gereken bir aynı dosyada, tanımlanabilir bir harici dosyayı tanımlayan bir zararsız ve yeniden kullanılabilir]

+0

Detaylı yanıt için teşekkürler. Doğrulamayı doğru yapan araçları bulmayı başardım. Bu desen şeyler yararlıdır, tho. –

+0

@Chris, np [15 karakter] –