Lompat ke konten
Aback Tools Logo

Cara Memvalidasi XML Terhadap Skema XSD: Kesalahan, Alat & CI/CD

Cara memvalidasi dokumen XML terhadap skema XSD: well-formedness vs validitas, anatomi XSD, validasi lokal di browser dan via CLI dengan xmllint, penjelasan kesalahan XSD umum, dan validasi skema otomatis di GitHub Actions.

DH
Tutorials & How-Tos12 menit baca2,700 kata

Dokumen XML yang di-parsing tanpa kesalahan adalah well-formed - tetapi well-formed tidak sama dengan benar. Validasi XSD menyelam satu level lebih dalam, memeriksa setiap elemen terhadap sebuah kontrak: field wajib hadir, tipe data cocok, nilai berada dalam rentang yang diizinkan, dan elemen muncul dalam urutan yang benar. Panduan ini menjelaskan dengan tepat apa yang diperiksa validasi XSD, cara menjalankannya online dan dalam kode, apa arti kesalahan paling umum, dan cara membangun validasi XSD ke dalam pipeline CI Anda agar dokumen yang rusak tidak pernah sampai ke produksi.

2Level validasiwell-formedness + validitas skema
100%Pemeriksaan lokal di browsertidak ada XML yang keluar dari perangkat Anda
<1sKecepatan validasiumpan balik instan atas kesalahan

Apa itu validasi XSD?

XSD adalah singkatan dari XML Schema Definition. Ini adalah standar W3C yang memungkinkan Anda mendeskripsikan struktur pasti yang harus diikuti sebuah dokumen XML: elemen mana yang diizinkan, dalam urutan apa mereka muncul, tipe data apa yang harus dicocokkan kontennya, dan atribut mana yang wajib atau opsional. Ketika Anda memvalidasi dokumen XML terhadap sebuah XSD, parser membaca kedua file dan melaporkan setiap tempat dokumen menyimpang dari kontrak skema.

XSD menggantikan format DTD (Document Type Definition) yang lebih lama sebagai bahasa skema XML utama karena ia sendiri ditulis dalam XML, mendukung rangkaian kaya tipe data bawaan (`xs:integer`, `xs:date`, `xs:boolean`, dll.), dan dapat mengekspresikan batasan kompleks seperti pola string, rentang numerik, dan persyaratan elemen kondisional. DTD masih dijumpai di sistem legacy, tetapi XSD adalah standar untuk pertukaran data berbasis XML apa pun yang dibangun dalam lima belas tahun terakhir.

Di mana validasi XSD digunakan

Validasi XSD muncul di mana pun data XML terstruktur melintasi batas sistem. Contoh umum termasuk permintaan dan respons layanan web SOAP (dideskripsikan oleh WSDL, yang menyematkan skema XSD), format e-invoicing dan pengadaan seperti UBL 2.1 dan EDIFACT, pertukaran data kesehatan menggunakan profil XML HL7 CDA dan FHIR, pengajuan XML pemerintah (pelaporan pajak, deklarasi bea cukai), dan file konfigurasi perangkat lunak korporat seperti `pom.xml` milik Maven atau XML konteks aplikasi milik Spring.

  • Layanan SOAP / WSDL: setiap elemen permintaan dan respons didefinisikan dalam XSD yang disematkan.
  • E-invoicing (UBL, CII): format pengadaan dan faktur membawa skema XSD publik yang divalidasi oleh mitra dagang.
  • Kesehatan (HL7, FHIR XML): pertukaran dokumen klinis menuntut kepatuhan XSD yang ketat sebelum diterima.
  • Pengajuan pemerintah: otoritas pajak dan lembaga bea cukai menerbitkan skema XSD yang harus dipenuhi dokumen yang diajukan.
  • Perangkat build: pom.xml Maven, build.xml Ant, dan banyak format konfigurasi lain memakai XSD untuk auto-complete dan validasi IDE.

Note

Validasi XSD berbeda dari kebenaran namespace XML. Dokumen bisa mereferensikan URI namespace yang benar dan tetap gagal validasi XSD jika kontennya melanggar batasan skema. Selalu validasi terhadap skema, bukan hanya deklarasi namespace.

Well-formedness vs validitas

Setiap dokumen XML harus pertama-tama well-formed sebelum dapat divalidasi. Well-formedness diperiksa oleh parser XML itu sendiri, tanpa skema. Validitas adalah lapisan tambahan yang diperiksa terhadap skema tertentu. Memahami perbedaan ini menghemat waktu debugging yang signifikan - validator XSD yang menerima dokumen cacat sering melaporkan kesalahan skema yang membingungkan alih-alih masalah parsing yang sebenarnya.

Sebuah objek tekstual adalah dokumen XML well-formed jika ia cocok dengan produksi berlabel document dan memenuhi semua batasan well-formedness yang diberikan dalam spesifikasi.

- Spesifikasi XML W3C

Apa yang diperiksa well-formedness

  • Pencocokan tag: setiap tag pembuka memiliki tag penutup yang sesuai (`&lt;item&gt;` → `&lt;/item&gt;`).
  • Penyusunan yang benar: tag harus ditutup dalam urutan terbalik - `&lt;a&gt;&lt;b&gt;&lt;/b&gt;&lt;/a&gt;` valid; `&lt;a&gt;&lt;b&gt;&lt;/a&gt;&lt;/b&gt;` tidak.
  • Elemen akar tunggal: dokumen memiliki tepat satu elemen tingkat atas.
  • Atribut berkutip: semua nilai atribut dibungkus kutip tunggal atau ganda.
  • Karakter khusus yang di-escape: `&lt;`, `&gt;`, `&`, `"` dan `'` di dalam konten teks harus memakai referensi entitas atau bagian CDATA.
  • Nama elemen dan atribut yang valid: nama dimulai dengan huruf atau garis bawah, bukan angka atau tanda hubung.

Apa yang ditambahkan validitas XSD di atasnya

Setelah well-formedness lolos, validasi XSD melapiskan kontrak skema. Ini termasuk memeriksa bahwa setiap elemen yang dideklarasikan wajib oleh `minOccurs="1"` benar-benar hadir, bahwa konten teks pada elemen bertipe cocok dengan `xs:type` yang dideklarasikan (tidak ada string di field integer), bahwa nilai numerik berada dalam batas `xs:minInclusive` dan `xs:maxInclusive`, bahwa konten string memenuhi batasan regex `xs:pattern`, dan bahwa elemen anak muncul dalam sequence, choice, atau grup all yang didefinisikan di skema.

PemeriksaanWell-formednessValiditas XSD
Pencocokan dan penyusunan tag✓ Ya✓ Prasyarat
Elemen akar tunggal✓ Ya✓ Prasyarat
Elemen wajib hadir✗ Tidak✓ Ya - minOccurs
Kebenaran tipe data✗ Tidak✓ Ya - xs:integer, xs:date, dll.
Batasan rentang numerik✗ Tidak✓ Ya - minInclusive/maxInclusive
Pencocokan pola string✗ Tidak✓ Ya - xs:pattern
Urutan elemen✗ Tidak✓ Ya - xs:sequence / xs:choice
Nilai atribut yang diizinkan✗ Tidak✓ Ya - xs:enumeration

Pemeriksa Well-Formedness XML

Periksa dokumen XML Anda untuk tag cacat, penyusunan tidak valid, elemen akar yang hilang, dan kesalahan entitas - lokal di browser dengan diagnostik tingkat baris.

Open tool

Anatomi skema XSD

Sebelum bisa memvalidasi XML terhadap XSD, Anda perlu memahami apa isi file XSD. File skema itu sendiri adalah dokumen XML valid, dengan elemen akar `xs:schema` di namespace `http://www.w3.org/2001/XMLSchema`. Semua di dalam skema menjelaskan seperti apa dokumen XML target harus terlihat.

invoice.xsd
xml
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- Root element declaration --&gt;
  <xs:element name="Invoice">
    <xs:complexType>
      <xs:sequence>
        <!-- Required string - must be present exactly once --&gt;
        <xs:element name="InvoiceNumber" type="xs:string" minOccurs="1" maxOccurs="1"/>
        <!-- Required date --&gt;
        <xs:element name="IssueDate"     type="xs:date"   minOccurs="1" maxOccurs="1"/>
        <!-- Required positive integer --&gt;
        <xs:element name="TotalAmount"   type="xs:decimal" minOccurs="1" maxOccurs="1"/>
        <!-- Optional - 0 to many line items --&gt;
        <xs:element name="LineItem"      type="LineItemType" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <!-- Required attribute --&gt;
      <xs:attribute name="currency" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- Reusable complex type definition --&gt;
  <xs:complexType name="LineItemType">
    <xs:sequence>
      <xs:element name="Description" type="xs:string"/>
      <xs:element name="Quantity"    type="xs:positiveInteger"/>
      <xs:element name="UnitPrice"   type="xs:decimal"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

Konsep kunci XSD

  • xs:element: mendeklarasikan elemen berdasarkan nama dan tipe. `minOccurs` dan `maxOccurs` mengatur kardinalitas.
  • xs:complexType: mendefinisikan elemen yang berisi elemen anak atau atribut (bukan hanya teks).
  • xs:simpleType: mendefinisikan tipe yang diturunkan dari tipe bawaan - dipakai untuk menambah batasan seperti pola atau enumerasi.
  • xs:sequence: elemen anak harus muncul dalam urutan persis seperti yang terdaftar.
  • xs:choice: tepat satu dari elemen anak yang terdaftar harus muncul.
  • xs:all: semua elemen anak yang terdaftar harus muncul, dalam urutan apa pun, masing-masing tepat satu kali.
  • xs:attribute: mendeklarasikan atribut pada elemen kompleks. `use="required"` menjadikannya wajib.
  • xs:restriction: menambahkan batasan ke tipe dasar - `xs:pattern`, `xs:minInclusive`, `xs:enumeration`, dll.

Tip

Anda bisa menghasilkan draf XSD dari dokumen XML yang ada memakai alat yang menyimpulkan skema dari data sampel. Selalu tinjau dan pertajam hasil yang dihasilkan - skema hasil inferensi cenderung menjadikan setiap elemen opsional dan membiarkan tipe sebagai `xs:string` sampai Anda menambahkan secara manual deklarasi tipe dan batasan kardinalitas yang tepat.

Cara memvalidasi XML terhadap XSD

Ada tiga cara praktis untuk memvalidasi dokumen XML terhadap skema XSD: alat berbasis browser untuk pemeriksaan cepat, alat baris perintah untuk pengembangan lokal dan scripting, dan pendekatan programatik untuk integrasi ke kode aplikasi atau pipeline CI. Ketiganya melaporkan kategori kesalahan yang sama - perbedaannya ada di mana dan bagaimana Anda menjalankan validasi.

1

Periksa well-formedness terlebih dahulu

Sebelum menjalankan validasi XSD, pastikan dokumen XML well-formed. Gunakan Pemeriksa Well-Formedness XML untuk menangkap kesalahan struktural - dokumen cacat akan menghasilkan kesalahan XSD yang menyesatkan dan membuang waktu debugging. Perbaiki dulu semua masalah level parser, lalu lanjut ke validasi skema.

2

Validasi online dengan XML Validator Aback Tools

Buka XML Validator, tempel dokumen XML Anda ke panel kiri dan skema XSD Anda ke panel kanan, lalu jalankan validasi. Alat ini memproses kedua file sepenuhnya di browser Anda - tidak ada data yang diunggah. Setiap kesalahan validasi dilaporkan dengan jalur elemen, batasan yang dilanggar, dan nomor baris di dokumen sumber.

3

Validasi di baris perintah dengan xmllint

Untuk pengembangan lokal dan scripting, `xmllint` dari paket libxml2 adalah pilihan CLI standar. Jalankan `xmllint --schema schema.xsd document.xml --noout` - flag `--noout` menekan gema dokumen sehingga hanya kesalahan yang dicetak. Keluar bersih tanpa output berarti dokumen valid. Di macOS, instal via `brew install libxml2`; di Ubuntu/Debian, `apt-get install libxml2-utils`.

4

Validasi secara programatik di Java, Python, atau .NET

Untuk validasi level aplikasi, gunakan pustaka XML bawaan bahasa Anda. Paket `javax.xml.validation` di Java (Xerces), `lxml.etree.XMLSchema` di Python, dan `XmlSchemaSet` dengan `XmlReader` di .NET semuanya mendukung validasi XSD dengan beberapa baris kode. Integrasikan panggilan validasi di batas API Anda atau titik penyerapan file untuk menolak dokumen tidak valid sebelum mencapai logika bisnis.

terminal
bash
# Validate document.xml against schema.xsd using xmllint
xmllint --schema schema.xsd document.xml --noout

# Output on success:
document.xml validates

# Output on failure:
document.xml:12: element TotalAmount: Schemas validity error:
Element 'TotalAmount': 'abc' is not a valid value of the
atomic type 'xs:decimal'.

XML Validator

Validasi dokumen XML untuk well-formedness dan kepatuhan skema - lokal di browser tanpa unggahan, dengan pelaporan kesalahan tingkat baris.

Open tool

Kesalahan validasi XSD yang umum

Kesalahan validasi XSD jatuh ke kategori yang dapat diprediksi. Memahami apa arti setiap jenis kesalahan memungkinkan Anda menemukan dan memperbaiki masalah di dokumen sumber dengan cepat, alih-alih membongkar output validator yang asing baris demi baris.

Kesalahan ketidakcocokan tipe

Kesalahan tipe terjadi ketika konten elemen atau atribut tidak cocok dengan `xs:type` yang dideklarasikan. Yang paling umum: string seperti `"N/A"` di field yang dideklarasikan sebagai `xs:integer`, tanggal dalam format salah (misalnya `15/06/2026` alih-alih `2026-06-15`) di field `xs:date`, atau desimal di field yang dideklarasikan sebagai `xs:positiveInteger`. Perbaiki dengan mengoreksi nilai di dokumen sumber atau menyesuaikan deklarasi tipe di skema jika tipe saat ini terlalu ketat.

Elemen wajib yang hilang

Ketika `minOccurs="1"` (bawaan untuk `xs:element`) dan elemen tidak ada di dokumen instans, validator melaporkan: `Element 'X': This element is not expected. Expected is one of ( Y )` atau `Element 'X' is missing`. Ini biasanya berarti produsen XML menghilangkan field wajib. Periksa `xs:sequence` skema untuk mengonfirmasi elemen mana yang wajib di posisi mana.

Elemen tak terduga atau tidak dideklarasikan

Jika skema Anda tidak memakai `xs:any` dan tidak menyetel `processContents="lax"`, setiap elemen yang tidak dideklarasikan di skema akan menghasilkan: `Element 'X': This element is not expected`. Ini kesalahan paling umum ketika produsen XML menambah field baru tanpa memperbarui skema, atau ketika dokumen berisi prefiks namespace yang tidak dideklarasikan. Periksa nama elemen, konteks elemen induk, dan deklarasi namespace di bagian atas dokumen.

Pelanggaran pola dan enumerasi

XSD mendukung `xs:pattern` (regex) dan `xs:enumeration` (daftar nilai yang diizinkan) sebagai facet pada tipe sederhana. Pelanggaran terlihat seperti: `Element 'Status': [facet 'enumeration'] The value 'ACTIVE' is not an element of the set active', 'inactive', 'pending`. Periksa apakah skema memakai nilai enumerasi yang peka huruf besar-kecil dan apakah dokumen instans cocok persis dengan kapitalisasi yang diharapkan.

Jenis kesalahanCuplikan pesan khasCara memperbaiki
Ketidakcocokan tipe'abc' is not a valid xs:integerKoreksi nilai atau longgarkan tipe
Elemen hilang'InvoiceNumber' is missingTambahkan elemen wajib ke dokumen
Elemen tak terduga'Notes': This element is not expectedHapus elemen atau tambahkan ke XSD
Kegagalan enumerasiValue 'ACTIVE' not in setSamakan kapitalisasi nilai enum skema
Pelanggaran polaValue fails xs:pattern restrictionPerbaiki nilai agar cocok dengan pola regex
Urutan sequenceExpected is 'IssueDate' not 'Total'Susun ulang elemen sesuai xs:sequence
KardinalitasElement 'Item' can occur max 1 timesHapus duplikat atau naikkan maxOccurs

Warning

Kesalahan urutan elemen sangat mudah terlewat. Deklarasi `xs:sequence` menuntut elemen muncul dalam urutan terdaftar - meski semua elemen hadir dan bernilai valid, urutan yang salah menyebabkan kegagalan validasi skema. Selalu periksa definisi sequence di XSD saat Anda melihat kesalahan "This element is not expected" pada elemen yang Anda tahu ada.

Validasi XSD dalam kode dan CI/CD

Validasi manual cocok untuk pemeriksaan sekali jalan, tetapi alur XML produksi butuh validasi otomatis di setiap titik integrasi. Menambahkan validasi XSD ke kode aplikasi dan pipeline CI Anda memastikan dokumen tidak valid ditolak sebelum menimbulkan korupsi data, kegagalan pemrosesan, atau pelanggaran kepatuhan di hilir.

Memvalidasi di Python dengan lxml

validate_xml.py
python
from lxml import etree

def validate_against_xsd(xml_path: str, xsd_path: str) -&gt; list[str]:
    """Returns a list of validation error messages, empty if valid."""
    with open(xsd_path, 'rb') as f:
        schema_doc = etree.parse(f)
    schema = etree.XMLSchema(schema_doc)

    with open(xml_path, 'rb') as f:
        doc = etree.parse(f)

    schema.validate(doc)
    return [str(e) for e in schema.error_log]

errors = validate_against_xsd('invoice.xml', 'invoice.xsd')
if errors:
    for err in errors:
        print(err)
else:
    print('Document is valid.')

Menambahkan validasi XSD ke GitHub Actions

Untuk workflow CI/CD yang memproses atau menghasilkan XML, langkah validasi mencegah dokumen rusak ter-merge. Perintah `xmllint` tersedia di runner Ubuntu GitHub Actions via `sudo apt-get install -y libxml2-utils`. Tambahkan langkah yang menjalankan `xmllint --schema schema.xsd document.xml --noout` pada setiap pull request yang menyentuh file XML. Kode keluar non-nol menggagalkan pemeriksaan dan memblokir merge.

.github/workflows/xml-validate.yml
yaml
name: Validate XML
on:
  pull_request:
    paths:
      - '**/*.xml'

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install xmllint
        run: sudo apt-get install -y libxml2-utils
      - name: Validate XML against XSD
        run: |
          xmllint --schema schemas/invoice.xsd \
                  data/invoices/*.xml \
                  --noout

Memakai XPath untuk menginspeksi nilai tertentu sebelum validasi

Sebelum menjalankan satu putaran penuh XSD, Anda dapat memakai Pencari dan Penguji XPath untuk menunjuk nilai elemen atau atribut tertentu di dokumen XML besar. Query XPath seperti `//Invoice/TotalAmount/text()` mengambil field tanpa harus mem-parsing seluruh file secara manual. Ini sangat berguna saat mendiagnosis ketidakcocokan tipe di dokumen dengan ratusan elemen - temukan dulu nilai bermasalahnya, baru terapkan perbaikannya.


Perbandingan pendekatan validasi

PendekatanKecepatanPrivasiDukungan skemaPaling cocok untuk
XML Validator Aback ToolsInstan✓ Lokal di browserWell-formed + XSDPemeriksaan cepat sekali jalan
xmllint CLICepat✓ Mesin lokalXSD, DTD, RelaxNGSkrip dev dan CI/CD
lxml / Xerces / .NETCepat✓ Dalam prosesXSD (spesifikasi penuh)Kode aplikasi
Alat online sisi serverSedang✗ Data diunggahBervariasiHindari untuk skema sensitif

Praktik terbaik XSD

Skema XSD yang dirancang baik membuat dokumen lebih mudah divalidasi, diperluas, dan dirawat antar versi skema. Praktik-praktik ini berlaku baik Anda menulis skema dari nol maupun merawat skema yang diterima dari mitra eksternal.

Gunakan tipe bernama alih-alih tipe inline anonim

Definisikan tipe kompleks dengan `xs:complexType name="..."` alih-alih menumpuknya secara anonim di dalam deklarasi elemen. Tipe bernama dapat dipakai ulang di beberapa deklarasi elemen, mengurangi pengulangan dan memudahkan perubahan skema - perbarui definisi tipe sekali dan semua elemen yang memakainya mewarisi perubahan itu.

Utamakan xs:sequence daripada xs:all untuk kontrak ketat

`xs:all` membolehkan elemen muncul dalam urutan apa pun, yang tampak murah hati tetapi menimbulkan ambiguitas bagi produsen dan konsumen. `xs:sequence` lebih eksplisit dan cocok dengan urutan baca alami kebanyakan format XML. Pakai `xs:all` hanya ketika urutan elemen benar-benar tidak penting dan Anda menulis skema untuk sistem yang Anda kendalikan sendiri; utamakan `xs:sequence` untuk skema apa pun yang melintasi batas organisasi.

Versikan skema Anda dengan namespace

Gunakan URI target namespace yang memuat indikator versi, seperti `targetNamespace="urn:example:invoice:v2"`. Ini membuat perubahan skema yang memutus kompatibilitas menjadi eksplisit - konsumen di v1 akan melihat ketidakcocokan namespace alih-alih diam-diam memvalidasi terhadap versi skema yang salah. Simpan skema lama tetap tersedia untuk deployment yang kompatibel mundur selama jendela migrasi.

  • Deklarasikan targetNamespace: menghindari tabrakan nama elemen ketika skema digabung via xs:import.
  • Gunakan xs:documentation: tambahkan deskripsi yang mudah dibaca di dalam blok xs:annotation agar konsumen skema memahami setiap field.
  • Tetapkan minOccurs/maxOccurs eksplisit: jangan pernah andalkan bawaan - nyatakan kardinalitas secara eksplisit untuk menyampaikan niat.
  • Gunakan xs:restriction untuk string terkendala: field kode pos seharusnya memakai xs:pattern, bukan xs:string - validasi menangkap kesalahan format di batas sistem.
  • Pecah skema besar: gunakan xs:include untuk membagi skema 500 baris menjadi file per domain (addresses.xsd, line-items.xsd) agar lebih mudah dirawat.

Tip

Setelah mengedit XSD, selalu validasi ulang dokumen uji Anda yang ada terhadap skema yang diperbarui. Perubahan skema yang mempertegas sebuah batasan bisa diam-diam membuat tidak valid dokumen yang sebelumnya valid. Gunakan [XML Validator](/tools/data/validators/xml-validator) untuk menjalankan pemeriksaan regresi cepat pada fixture uji kanonik Anda sebelum menerbitkan skema yang diperbarui.

Note

Jika Anda bekerja dengan data XML yang perlu dikonsumsi REST API atau aplikasi JavaScript, [Konverter XML ke JSON](/tools/data/converters/xml-json-converter) mengonversi dokumen XML tervalidasi ke format JSON sambil mempertahankan hierarki elemen dan nilai atribut.

Key takeaways

  • Validasi XSD memeriksa dokumen XML terhadap kontrak skema - tipe elemen, field wajib, rentang nilai, dan pengurutan - melampaui well-formedness dasar.
  • Selalu konfirmasi well-formedness dengan Pemeriksa Well-Formedness XML sebelum menjalankan validasi XSD untuk menghindari keluaran kesalahan yang menyesatkan.
  • Kesalahan XSD paling umum adalah ketidakcocokan tipe, elemen wajib yang hilang, elemen tak terduga, dan pelanggaran urutan xs:sequence.
  • Gunakan `xmllint --schema schema.xsd document.xml --noout` di baris perintah untuk validasi lokal yang cepat dan integrasi CI/CD.
  • Tambahkan langkah validasi XSD ke workflow GitHub Actions Anda untuk memblokir dokumen XML tidak valid dari ter-merge ke branch utama.
  • Rancang skema XSD dengan tipe bernama, kardinalitas eksplisit, target namespace, dan facet xs:restriction untuk membuat skema yang ketat sekaligus mudah dirawat.
  • Gunakan Pencari dan Penguji XPath untuk menemukan nilai tertentu di dokumen XML besar sebelum dan sesudah validasi.

Pertanyaan yang sering diajukan

XSD validation is the process of checking an XML document against an XML Schema Definition (XSD) file to confirm it meets all defined structural and data constraints. It goes beyond well-formedness checks - which only verify that the XML is syntactically correct - by enforcing element order, data types, value ranges, string patterns, and which elements are required or optional. A document that is well-formed but fails XSD validation is called invalid.

A well-formed XML document follows the basic XML syntax rules: every opening tag has a matching closing tag, tags are properly nested, attribute values are quoted, and there is exactly one root element. A valid XML document is well-formed AND conforms to a specific schema (DTD, XSD, or Relax NG) that defines the allowed elements, attributes, types, and constraints. Well-formedness is checked by any XML parser; validity requires the schema file to be present during the check.

The quickest approach is to use the Aback Tools XML Validator, which runs entirely in your browser. Paste your XML document into the first panel and your XSD schema into the second, then click Validate. The tool reports each constraint violation with the element path and line number. No file is uploaded to a server - all processing happens locally, which makes it safe for schemas that contain proprietary data structures or sensitive field names.

Run the command: xmllint --schema yourschema.xsd yourdocument.xml --noout. The --noout flag suppresses the document echo, leaving only validation errors in the output. A clean exit with no output means the document is valid. xmllint is part of the libxml2 package, available on Linux via apt-get install libxml2-utils and on macOS via Homebrew with brew install libxml2. For Windows, it is included with many XML toolkits.

The most frequent XSD errors are: missing required elements (an element declared with minOccurs='1' is absent), type mismatches (a string in a field declared as xs:integer), pattern violations (a value that does not match an xs:pattern restriction), unexpected element order (elements declared in a specific sequence appearing out of order), and attribute violations (a required attribute is missing or an undeclared attribute is present). Most validators report these with the element path and constraint name.

Yes. Large XML schemas are often split across multiple XSD files using xs:import and xs:include directives. The root XSD imports the sub-schemas, and a validating parser resolves them either from the file system or from namespace URIs. When validating locally with xmllint or a Java-based validator (Xerces, Saxon), you pass the root XSD and the parser follows the import chain automatically, provided all referenced schema files are accessible.

xs:include pulls in a schema file that belongs to the same target namespace as the current schema. xs:import pulls in a schema file that belongs to a different namespace. Use xs:include to split a large schema into manageable files that all share one namespace. Use xs:import when you need to reference elements or types from an external namespace, such as the SOAP envelope namespace or a shared enterprise data model namespace.

For new projects using REST APIs and JSON payloads, JSON Schema is the practical choice - it has better tooling integration with OpenAPI, a lighter syntax, and broader library support in modern languages. XSD remains the right choice when working with SOAP web services, EDI formats like UBL and EDIFACT, government and healthcare data exchange (HL7 CDA, FHIR XML), or any legacy system that is already XML-based. If the ecosystem you are integrating with uses XML, XSD is the validation standard.

ShareXLinkedIn