Bir XML doğrulayıcı, bir XML belgesinin XML 1.0 belirtimi (W3C Önerisi, beşinci sürüm) tarafından tanımlanan yapısal kurallara uyup uymadığını denetler. Bu XML doğrulayıcı, en temel düzeyde bir belgenin iyi biçimlendirilmiş olduğunu doğrular: tek bir kök öğesi vardır, tüm etiketler düzgün iç içe yerleştirilmiş ve kapatılmıştır, öznitelik değerleri tırnak içindedir ve ayrılmış karakterler önceden tanımlanmış varlıkları kullanır. Bu denetimlerden herhangi birini geçemeyen bir belge, XML ayrıştırıcılarının sessizce hatalı çıktı üretmek yerine hata fırlatmasına neden olur.
İyi biçimlendirilmiş olma ile geçerlilik arasındaki fark önemlidir. İyi biçimlendirilmiş bir XML belgesi, XML belirtiminin sözdizimi kurallarını karşılar. Geçerli bir XML belgesi ise daha da ileri giderek DTD (Belge Türü Tanımı), XSD (XML Şema Tanımı) veya Relax NG şeması gibi harici bir şemada tanımlanan kısıtlamalara da uyar. Bu araç, en yaygın ilk doğrulama adımı olan iyi biçimlendirilmiş olma denetimini gerçekleştirir. Bu adım olmadan, ardından gelen hiçbir işlem ilerleyemez.
XML doğrulama, hataları canlı ortama ulaşmadan önce yakalar. Kapatılmamış etiketler, uyumsuz öğe adları, kaçışlanmamış ve işaretleri ve yinelenen öznitelikler, elle düzenlenen XML'deki en yaygın hatalar arasındadır. Farklı dillerdeki ayrıştırıcılar bu hataları farklı şekillerde ele alır: bir kısmı sessizce başarısız olur, bir kısmı kısmi sonuçlar döndürür, bir kısmı ise istisna fırlatır. XML'nizi bir doğrulayıcıdan geçirmek bu belirsizliği ortadan kaldırır ve hata konumu ayrıntılarıyla birlikte net bir geçti-kaldı sonucu verir.
Neden Çevrimiçi XML Doğrulayıcı Kullanmalısınız?
XML sözdizimi hatalarını erkenden yakalamak, XML verisi kullanan uygulamalardaki zincirleme hataları önler. Tarayıcı tabanlı bir doğrulayıcı, komut satırı araçları kurmadan veya IDE eklentileri yapılandırmadan anında geri bildirim sunar.
⚡
Anlık hata tespiti
XML'nizi yapıştırın ve bir saniyeden kısa sürede kesin hata konumuyla birlikte geçti/kaldı sonucunu alın. Derleme ardışık düzeni veya CLI aracı kurulumu beklemenize gerek yok.
🔒
Gizlilik öncelikli işleme
Tüm ayrıştırma ve doğrulama, DOMParser API kullanılarak tarayıcınızda gerçekleşir. XML'niz makinenizi hiç terk etmez ve herhangi bir sunucuya asla gönderilmez.
🎯
Hassas hata raporlaması
Doğrulamanın başarısız olduğu satır ve sütunu, hatanın açıklamasıyla birlikte görün. Bu, uygulama kodunuzdaki bir ayrıştırıcıdan yığın izini okumaktan çok daha hızlıdır.
📋
Hesap veya kurulum gerekmez
Sayfayı açın, XML'nizi yapıştırın ve sonucu görün. Kayıt formu yok, masaüstü yazılımı yok, tarayıcı eklentisi yok.
XML Doğrulayıcı Kullanım Senaryoları
Frontend geliştirme
SVG dosyalarını ve XHTML parçalarını React veya Vue bileşenlerine yerleştirmeden önce doğrulayın. Bir SVG içindeki tek bir kapatılmamış etiket, bileşen ağacının tamamını bozabilir.
Backend mühendisliği
Üçüncü taraf API'lerden gelen SOAP yanıtlarını, XML-RPC yüklerini ve RSS/Atom beslemelerini kontrol edin. Ayrıştırıcı istisnalarını çalışma zamanında hata ayıklamaktan kaçınmak için serileştirme kaldırma mantığını yazmadan önce ham yanıtı doğrulayın.
DevOps ve CI/CD
Otomatik düzenlemelerden sonra Maven pom.xml, .csproj veya Ant derleme dosyalarının iyi biçimlendirilmiş olduğunu doğrulayın. Derleme yapılandırmasındaki bir sözdizimi hatası, anlaşılması güç bir hata mesajıyla tüm ardışık düzeni başarısız kılabilir.
QA ve test
Entegrasyon testlerini çalıştırmadan önce XML test bağlamlarını ve beklenen çıktı dosyalarını doğrulayın. Hatalı biçimlendirilmiş bağlamlar, hata ayıklama süresini boşa harcayan yanlış negatif sonuçlara yol açar.
Veri mühendisliği
Veritabanlarından, devlet açık veri portallarından ve ETL ardışık düzenlerinden yapılan XML dışa aktarmalarını kontrol edin. XPath sorguları veya XSLT dönüşümleri yazmadan önce yapıyı doğrulamak, bozuk kaynak veriler üzerinde harcanan çabayı önler.
XML öğrenmek
W3C XML veya XSLT eğitimlerini takip eden öğrenciler, sözdizimlerini kontrol etmek için alıştırma dosyalarını doğrulayıcıya yapıştırabilir. Hata mesajları tam sorunu gösterir ve öğrenme döngüsünü hızlandırır.
XML İyi Biçimlendirilmiş Olma Kuralları
XML 1.0 belirtimi, katı bir sözdizimi kuralları kümesi tanımlar. İyi biçimlendirilmiş kabul edilmek için bir belge bunların tamamını karşılamalıdır. Aşağıdaki tablo her kuralı, gereksinimlerini ve doğru bir örneği listeler. Doğrulama hatalarının büyük çoğunluğu bu kurallardan birine dayanır.
Kural
Gereksinim
Doğru Örnek
Single root element
Document must have exactly one root
<root>...</root>
Matched tags
Every opening tag needs a closing tag
<p>text</p>
Proper nesting
Tags must close in reverse order of opening
<a><b>...</b></a>
Quoted attributes
Attribute values must be in single or double quotes
<el attr="val"/>
Entity escaping
Reserved characters must use predefined entities
< > & " '
Case sensitivity
Tag names are case-sensitive: <A> is not </a>
<Book>...</Book>
No duplicate attributes
Each attribute name must appear once per element
<el a="1" b="2"/>
Valid XML declaration
If present, must be the very first line
<?xml version="1.0"?>
İyi Biçimlendirilmiş, DTD-Geçerli ve Şema-Geçerli Karşılaştırması
XML doğrulamanın üç düzeyi vardır. Bu araç, diğer ikisinin ön koşulu olan birinci düzeyi (iyi biçimlendirilmiş olma) denetler.
İyi biçimlendirilmiş
XML 1.0 sözdizimi kurallarını karşılar: tek kök, eşleşen etiketler, tırnak içinde öznitelikler, düzgün iç içe yerleştirme. Her XML ayrıştırıcı önce bunu kontrol eder. Bir belge iyi biçimlendirilmiş değilse, XML bile sayılmaz.
DTD-geçerli
Hangi öğe ve özniteliklere izin verildiğini, sıralarını ve kardinalitelerini belirten bir Belge Türü Tanımına uygundur. DTD'ler satır içi olarak veya DOCTYPE referansıyla bildirilir. DTD doğrulaması eski sistemlerde ve XHTML'de yaygındır.
Şema-geçerli (XSD / Relax NG)
Bir XML Şema Tanımına (XSD) veya Relax NG şemasına uygundur. Bu şemalar veri türlerini (tamsayı, tarih, URI), ad alanlarını ve karmaşık içerik modellerini destekler. XSD doğrulaması SOAP web servislerinde, HL7 sağlık verilerinde ve kurumsal entegrasyonda standarttır.
Kod Örnekleri
Farklı dillerde XML'yi programatik olarak doğrulayın. Her örnek iyi biçimlendirilmiş olup olmadığını kontrol eder ve belge hatalı biçimlendirilmişse hata mesajını döndürür.
import xml.etree.ElementTree as ET
def validate_xml(xml_string):
try:
ET.fromstring(xml_string)
return True, "Well-formed XML"
except ET.ParseError as e:
return False, str(e)
valid, msg = validate_xml('<root><item>hello</item></root>')
# → (True, "Well-formed XML")
valid, msg = validate_xml('<root><item>hello</root>')
# → (False, "mismatched tag: line 1, column 27")
# With lxml — also supports XSD schema validation
from lxml import etree
schema = etree.XMLSchema(etree.parse('schema.xsd'))
doc = etree.fromstring(b'<root><item>hello</item></root>')
schema.validate(doc) # → True or False
Go
package main
import (
"encoding/xml"
"fmt"
"strings"
)
func validateXML(raw string) error {
decoder := xml.NewDecoder(strings.NewReader(raw))
for {
_, err := decoder.Token()
if err != nil {
if err.Error() == "EOF" {
return nil
}
return err
}
}
}
func main() {
err := validateXML("<root><item>hello</item></root>")
fmt.Println(err) // → <nil>
err = validateXML("<root><item>hello</root>")
fmt.Println(err) // → XML syntax error: unexpected end element </root>
}
CLI (xmllint)
# Check well-formedness (part of libxml2, pre-installed on macOS/Linux)
xmllint --noout document.xml
# Exit code 0 = valid, non-zero = errors printed to stderr
# Validate against an XSD schema
xmllint --noout --schema schema.xsd document.xml
# Validate against a DTD
xmllint --noout --dtdvalid schema.dtd document.xml
# Validate from stdin
echo '<root><unclosed>' | xmllint --noout -
# → :1: parser error : Premature end of data in tag unclosed line 1
Sıkça Sorulan Sorular
İyi biçimlendirilmiş XML ile geçerli XML arasındaki fark nedir?
İyi biçimlendirilmiş XML, XML 1.0 belirtiminin sözdizimi kurallarına uyar: tek kök öğesi, eşleşen ve düzgün iç içe yerleştirilmiş etiketler, tırnak içinde öznitelikler. Geçerli XML ise daha da ileri giderek hangi öğelere, özniteliklere ve veri türlerine izin verildiğini tanımlayan bir DTD veya XSD şemasına da uyar. Bir belge doğru sözdizimine sahip ancak şema kısıtlamasını ihlal ediyorsa iyi biçimlendirilmiş fakat geçersiz olabilir.
Bir XML belgesi geçerli fakat iyi biçimlendirilmemiş olabilir mi?
Hayır. İyi biçimlendirilmiş olma, geçerliliğin ön koşuludur. Bir belge herhangi bir XML sözdizimi kuralını ihlal ederse (kapatılmamış etiket, tırnaksız öznitelik vb.), ayrıştırıcılar ondan bir ağaç oluşturamaz ve şema doğrulaması başlayamaz. Önce iyi biçimlendirilmiş olma hatalarını düzeltin, ardından şemaya karşı kontrol edin.
En yaygın XML doğrulama hataları hangileridir?
En sık görülen beş hata şunlardır: kapatılmamış veya uyumsuz etiketler, metin içeriğinde kaçışlanmamış ve işaretleri, tırnaksız öznitelik değerleri, eksik kök öğesi ve etiket adlarında yanlış büyük/küçük harf kullanımı (XML büyük/küçük harfe duyarlıdır). Bu hataların çoğu XML'nin elle düzenlenmesinden veya düzgün bir XML serileştirici yerine kod içinde dize birleştirmesi kullanılmasından kaynaklanır.
XML doğrulama ile XML linting aynı şey midir?
Örtüşürler ancak özdeş değildir. Doğrulama, bir belgenin XML belirtimine (iyi biçimlendirilmiş olma) veya bir şemaya (DTD/XSD) uyup uymadığını kontrol eder. Linting genellikle daha da ileri gider ve tutarsız girinti, kullanılmayan ad alanı bildirimleri veya gereksiz varsayılan öznitelik değerleri gibi stil sorunlarını da işaretler. libxml2 kaynaklı xmllint her ikisini birleştirir: --noout iyi biçimlendirilmiş olmayı kontrol ederken --schema XSD doğrulaması ekler.
XML doğrulama, JSON doğrulamadan nasıl farklıdır?
XML, JSON'dan daha katı ve daha karmaşık bir gramera sahiptir. XML, eşleşen açılış/kapanış etiketleri gerektirir; öznitelikleri, ad alanlarını, karışık içeriği (metin ve öğelerin bir arada kullanımı) destekler ve birden fazla şema diline (DTD, XSD, Relax NG, Schematron) sahiptir. JSON doğrulaması küme/köşeli parantez eşleşmesini, tırnak içindeki anahtarları ve virgül yerleşimini kontrol eder. JSON Schema mevcut olmakla birlikte XSD'den daha basittir. Aynı veriler için bir XML belgesi genellikle eşdeğer JSON'dan 2-3 kat büyüktür.
Bu araç XSD veya DTD şemalarına karşı doğrulama yapar mı?
Bu araç yalnızca iyi biçimlendirilmiş olma denetimi yapar: XML'nizin XML 1.0 belirtiminin sözdizimi kurallarına uyduğunu doğrular. Harici DTD veya XSD şemalarına karşı doğrulama yapmaz. Şema doğrulaması için komut satırında xmllint --schema komutunu veya hem XSD hem de Relax NG'yi destekleyen Python'daki lxml kitaplığını kullanın.
XML'im doğru görünmesine rağmen neden doğrulamada başarısız oluyor?
En yaygın görünmez nedenler şunlardır: XML bildiriminden önce bir bayt sırası işareti (BOM), kapanış kök etiketinden sonra kaçak bir karakter, metin içeriğindeki kaçışlanmamış ve işareti (bunun yerine & kullanın) veya kullanılmış fakat hiç bildirilmemiş bir ad alanı öneki. XML'nizi bir hex görüntüleyiciye kopyalayın ya da hatanın tam bayt ofsetini almak için xmllint --noout ile çalıştırın.