2010-11-19 17 views
6

8 karakter uzunluğunda:XSD düzenli ifade modeli: i bir dize olduğu XSD bir şema kuralı tanımlamak çalışıyorum şu ya da hiçbir şey

<PostedDate>42183296</PostedDate> 

ve boşluk doldurma da izin verilir:

<xs:simpleType name="DateFormat"> 
    <xs:restriction base="xs:string"> 
     <xs:length value="8" />   //exactly 8 characters long 
</xs:simpleType> 

ama da e olabilir değeri:

<PostedDate>  </PostedDate> 
XSD götürdü hangi mpty (ör. Sıfır karakter uzunluğunda): götürdü

<PostedDate></PostedDate> 
<PostedDate /> 

safça denemek için: tabii izin verilmez

<xs:simpleType name="DateFormat"> 
    <xs:restriction base="xs:string"> 
     <xs:length value="8" />   //exactly 8 characters long 
     <xs:length value="0" />   //exactly 0 characters long 
</xs:simpleType> 

.

genellikle XSD olduğu gibi

, çoğu formatlar XSD ile kolayca temsil edilemez, bu yüzden bir düzenli ifade kuralı denemek için seçti: XSD dönüştürmek için çalışıyor

.{8} | "" 

i yazın:

<xs:simpleType name="DateFormat"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value=".{8}|''" /> 
    </xs:restriction> 
</xs:simpleType> 

Ama işe yaramadı:

''20101111' is not facet-valid with respect to pattern '.{8}|''' for type 'DateFormat' 

ben de

çalıştı
  • <xs:pattern value="[0-9]{8}|''" />
  • <xs:pattern value="([0-9]{8})|('')" />
  • <xs:pattern value="(\d{8})|('')" />

Can eşleşen sorunu ya çözen bir desen başkasının şey - bazı özel desen - Boş

Bonus: can kimse'teki yeri işaret ediyor \d o rakamlar ile eşleşen? Ya da diğer özel desen kodları nelerdir?

+0

Bence çalışıyorum. \ D {8}? '' ', isteğe bağlı olan her şeyden önce gelir. –

cevap

11

Patters'ın "sekiz basamaklı veya hiçbir şey" anlamına gelen \d{8}| gibi görünmesi gerektiğini tahmin edebilirim, ancak sekiz basamak veya iki tırnak değil. Ancak bu açıklanmadı, neden 20101111 eşleşmiyor. Öğe değerinde hiçbir boşluk veya başka ek sembol olmadığından emin misiniz?
\d bölüm "F.1.1 Karakter Sınıfı kaçar" in basamak Ben de boş dize gibi aynı durumda aksi o olmalı 6 uzunluk numaraları izin

+0

Bu asla çözemediğim bir hile oldu. \ D {8} | '* *" sekiz haneli | hiçbir şey yok "*. Sinsi. Ve haklısın; neden desenimi bilmiyorum. {8} | '' daha önce 20101111' ile eşleşmedi - şimdi yapmıyor.Her ne kadar xml + xsd'yi doğrulamak için bir web sitesi kullanıyor olsam da. Öğle yemeğinden bu yana daha etkileşimli geribildirim vermek için bir xml stüdyo programı yazdım. –

+2

Ayrıca, xs: totalDigits' kısıtlamasının ** a 'xs: pattern' kısıtlamasından sonra ** gelmesi gerektiğini de unutmamak gerekir. Aksi takdirde, ayrıştırıcı dahili olarak '000001' metnini '1' tek rakamına dönüştürür, bu da 6 karakter uzunluğunda olmadığı için, '(\ d) {6} 'desenine karşı doğrulama yapamaz! –

3

maç için söylenir. Sonunda aşağıdaki gibi kullandım. Bu benim için