XSD ile XML Doğrulayıcı
Bir XML belgesini bir XSD'ye göre denetleyin ve hangi öğenin hangi kuralı çiğnediğini görün.
Bu araç sunucuda çalışır. XML Schema'ya göre doğrulama bir tarayıcının yapabileceği bir şey değildir; bu yüzden belgeniz ve şemanız kontrol edilmek üzere buraya gönderilir, ardından atılır. Saklanmaz, günlüğe yazılmaz ve hiçbir zaman bir URL'ye konmaz. Belge gizliyse bunun yerine xmllint'i kendi bilgisayarınızda çalıştırın — aynı motordur.
Bir belgeyi ve uyması gereken XSD'yi yapıştırın. Kararı ve çiğnenen her kural için öğeyi, satırı ve kısıtlamayı alırsınız; yalnızca “geçersiz” kelimesini değil.
Nasıl çalışır
Üç şey ters gidebilir ve ayrı ayrı bildirilir, çünkü farklı anlamlara gelirler. Belge iyi biçimlendirilmiş XML olmayabilir; bu durumda hiçbir şey denetlenmemiştir. Şema kullanılabilir bir XSD olmayabilir; bu durumda da hiçbir şey denetlenmemiştir. Ya da ikisi de okunmuş ve belge bir kuralı çiğnemiştir; “geçersiz” kelimesinin verileriniz hakkında size bir şey söylediği tek durum budur.
Doğrulama, neredeyse tüm XML araçlarının arkasındaki motor olan libxml ile yapılır; dolayısıyla cevap, build'inizin söyleyeceğiyle aynıdır. Tanılama mesajları geldiği gibi, İngilizce gösterilir; çünkü öğeyi ve kısıtlamayı adlandırırlar ve bir başka sözcüklerle anlatım, bizim yazmadığımız bir mesajın ne demek istediğine dair bir tahmin olurdu.
Bu araç sunucuda çalışır ve buradakiler arasında bunu yapan tek araçtır. Hiçbir tarayıcı XML Schema'ya göre doğrulama yapamaz; bunun için bir API yoktur. Belgeniz ve şemanız gönderilir, denetlenir ve atılır: asla diske yazılmaz, asla kayda geçirilmez ve asla bir URL'ye konmaz.
İki şey doğrudan reddedilir. Bir DTD ya da varlık bildiren bir belge veya şema, çünkü bir DTD ayrıştırıcıya sunucudaki dosyaları okumasını söyleyebilir. Ve başka bir dosyayı içe aktaran ya da dahil eden bir şema, çünkü burada hiçbir şey indirilmez: yalnızca bir kısmı uygulanabilirdi ve geçti diye sunulan kısmi bir denetim, bir doğrulayıcının verebileceği en kötü cevaptır.
Örnekler
| Durum | Girdi | Sonuç |
|---|---|---|
| Yanlış türde bir değer | <price>cheap</price> | Element 'price': 'cheap' is not a valid value of the atomic type 'xs:decimal'. |
| Eksik bir zorunlu öznitelik | <book><title>V</title><price>1</price></book> | Element 'book': The attribute 'id' is required but missing. |
| Eksik bir alt öğe | <book id="b1"><title>V</title></book> | Element 'book': Missing child element(s). Expected is ( price ). |
Sık sorulan sorular
Belgem tarayıcımdan dışarı çıkıyor mu?
Evet ve sitede bunun doğru olduğu tek araç bu. XML Schema'ya göre doğrulama bir tarayıcının yapabileceği bir şey değildir; bu yüzden belge ve şema buraya gönderilir, denetlenir ve atılır. Saklanmaz, kayda geçirilmez ve hiçbir URL'ye konmaz. Elinizdeki belge için bu kabul edilemezse onu kendi bilgisayarınızda doğrulayın: xmllint aynı motorla aynı işi yapar.
Şemam başka bir şemayı içe aktardığı için neden reddedildi?
Çünkü hiçbir yerden hiçbir şey indirilmez: ne ağdan ne dosya sisteminden. Birkaç dosyaya bölünmüş bir şema burada ancak yarım yamalak uygulanabilir ve kuralların yarısını denetleyip ardından “geçerli” diyen bir doğrulayıcı, hiç cevap vermemekten daha kötü bir cevap verir. Dosyaları birleştirin ya da diğer dosyanın bulunduğu kendi bilgisayarınızda doğrulayın.
Bir DOCTYPE neden reddediliyor?
Çünkü bir DTD, sunucudaki bir dosyayı gösteren bir varlık bildirebilir ve bu, bir XML ayrıştırıcısını dosya okuyucuya çevirmenin bilinen en eski yoludur. Varlık yükleme burada ayrıca devre dışıdır; yani bu yapıyı reddetmek tek kilit değil, ikinci bir kilittir. Ama her durumda, bir XSD'ye göre denetlenen bir belgenin DTD'ye ihtiyacı yoktur.
Hata mesajları neden İngilizce?
Bu siteden değil, libxml'den geliyorlar. Öğelerinizin adlarını ve başarısız olan kısıtlamayı aktarırlar; ihtiyacınız olan kısım da budur. Onları çevirmek, bizim yazmadığımız tanılama mesajlarını başka sözcüklerle anlatmak demek olurdu; birini yanlış aktarmanın bedeli, onu İngilizce okumaktan daha ağırdır.
Hangi XML Schema sürümü?
XSD 1.0; libxml'in uyguladığı sürüm budur. XSD 1.1 doğrulamaları (assertion) ve koşullu tür atama desteklenmez; bu yüzden bunları kullanan bir 1.1 şeması, o kurallar olmadan sessizce denetlenmek yerine okunamaz olarak bildirilir.
Şemam encoding="utf-16" ile başlıyor ve reddedildi. Neden?
Çünkü bu bildirim bir dosyayı tanımlar; bu sayfaya ulaşan ise tarayıcınızın gönderdiğidir ve o da UTF-8'dir. libxml bildirime inandı ve şemayı okumayı reddetti. Artık kodlama, UTF-8 demediği her durumda yok sayılıyor ve sonuç bunu belirtiyor. Aynı şey encoding="ISO-8859-1" ile eskiden daha da kötüydü, çünkü hata vermiyordu: aksanlı her karakter sessizce bozuluyor, belge ardından kimsenin yazmadığı bir metne göre doğrulanıyordu.
Bilmekte fayda var
- Sunucuda çalışır. Belgeniz ve şemanız gönderilir, denetlenir ve atılır: saklanmaz, kayda geçirilmez ve bir URL ile paylaşılamaz. Bu kategorideki diğer tüm araçlar tarayıcınızda çalışır; bu çalışamaz, çünkü hiçbir tarayıcı XML Schema doğrulaması yapmaz.
- Karar libxml'e aittir; tüm tanılama mesajlarının ifadesi de öyle. Yalnızca XSD 1.0.
- En fazla elli sorun listelenir. Bir kuralı bin kez çiğneyen bir belge, genellikle onu tek bir nedenle çiğniyordur.