Alat validasi XML Schema (XSD)? [Tutup]

266

Di kantor kami sedang menulis aplikasi yang akan menghasilkan file XML terhadap skema yang kami berikan. Kami memiliki skema dalam file .XSD.

Apakah ada alat atau pustaka yang dapat kita gunakan untuk pengujian otomatis untuk memeriksa apakah XML yang dihasilkan cocok dengan skema?

Kami akan lebih memilih alat gratis yang sesuai untuk penggunaan komersial meskipun kami tidak akan menggabungkan checker skema sehingga hanya perlu digunakan oleh pengembang selama pengembangan.

Bahasa pengembangan kami adalah C ++ jika itu membuat perbedaan, meskipun saya pikir itu tidak seharusnya karena kami dapat menghasilkan file xml dan kemudian melakukan validasi dengan memanggil program terpisah dalam pengujian.

Jason Dagit
sumber
132
Saya suka berapa banyak dari pertanyaan "tidak konstruktif" ini yang merupakan hasil pencarian Google teratas dari hal-hal yang saya cari dan jawabannya bermanfaat
matt freake
1
Saya mengerti dari mana datangnya dengan yang tidak konstruktif. Jujur saja, meskipun ini adalah pertanyaan dan debat / argumen yang hebat, terkadang berakhir dengan jawaban yang bagus
Matt
22
ini adalah kasus yang tepat di mana admin menjadi kontra-produktif
anon58192932
Mungkin patut untuk melihat ke pertanyaan serupa dalam konteks alat bangunan Maven .
Alberto

Jawaban:

239

Setelah beberapa penelitian, saya pikir jawaban terbaik adalah Xerces , karena mengimplementasikan semua XSD, adalah cross-platform dan banyak digunakan. Saya telah membuat proyek Java kecil di github untuk memvalidasi dari baris perintah menggunakan parser JRE default, yang biasanya Xerces. Ini dapat digunakan pada Windows / Mac / Linux.

Ada juga versi C ++ Xerces yang tersedia jika Anda lebih suka menggunakannya. The utilitas StdInParse dapat digunakan untuk menyebutnya dari baris perintah. Juga, komentator di bawah ini menunjuk ke utilitas pembungkus yang lebih lengkap ini .

Anda juga bisa menggunakan xmllint, yang merupakan bagian dari libxml . Anda mungkin sudah menginstalnya. Contoh penggunaan:

xmllint --noout --schema XSD_FILE XML_FILE

Satu masalah adalah bahwa libxml tidak mengimplementasikan semua spesifikasi, sehingga Anda dapat mengalami masalah :(

Atau, jika Anda menggunakan Windows, Anda dapat menggunakan msxml , tetapi Anda akan memerlukan semacam pembungkus untuk memanggilnya, seperti GUI yang dijelaskan dalam artikel DDJ ini . Namun, tampaknya kebanyakan orang di Windows menggunakan Editor XML, seperti Notepad ++ (seperti yang dijelaskan dalam jawaban Nate ) atau XML Notepad 2007 seperti yang disarankan oleh SteveC (ada juga beberapa editor komersial yang tidak akan saya sebutkan di sini).

Akhirnya, Anda akan menemukan berbagai program yang akan, sayangnya, memberikan hasil yang berbeda. Ini sebagian besar disebabkan oleh kompleksitas spesifikasi XSD. Anda mungkin ingin menguji skema Anda dengan beberapa alat.

UPDATE : Saya telah memperluas ini di a posting blog .

Adrian Mouat
sumber
1
Saya menemukan yang berikut ini bermanfaat: jmvanel.free.fr/xsd/README.html
Matthew Hegarty
Contoh penggunaan StdinParse (di linux) berguna: StdInParse -n -s -f -v = selalu <XML_FILE. XML_FILE harus menyertakan lokasi skema. Bagi saya itu memberikan hasil yang lebih lengkap daripada xmllint.
helcim
3
Apakah ada cara untuk meminta program untuk menggunakan xsi: schemaLocation alih-alih memberi makan semua XSD secara manual?
Gabor Garami
@GaborGarami Tidak pada saat ini, tetapi ini adalah permintaan fitur: github.com/amouat/xsd-validator/issues/5
Adrian Mouat
1
xmllintsayangnya, tidak memenuhi
persyaratan
112

Ada plugin untuk Notepad ++ yang disebut XML Tools yang menawarkan verifikasi dan validasi XML terhadap XSD.

Anda dapat melihat cara menggunakannya di sini .

Nate
sumber
5
-1, plugin ini sulit dipasang
jcollum
2
Saya diuji dengan npp 5.8.6, XMLTools 2.3.1 unicode beta2 r805, berfungsi dengan baik.
Palani
5
Plugin yang bagus. Lihat Notepad ++ XmlTools Not Installing untuk bantuan pemasangan.
ladenedge
16
Dan dengan versi 5.8.7, Plugin Manager Notepad ++ ("Plugins / Plugin Manager") membuat proses instalasi otomatis.
Dipicu
1
@ FranzEbner Saya punya masalah yang sama. Jika file XMLitu sendiri mereferensikan sebuah XSDfile, misalnya xsi:noNamespaceSchemaLocation="file.xsd", maka XML Tools akan mencoba menggunakannya alih-alih memberi Anda dialog "set".
theblang
22

xmlstarlet adalah alat baris perintah yang akan melakukan ini dan banyak lagi:

$ xmlstarlet val --help
Toolkit XMLStarlet: Validasi dokumen XML
Penggunaan: xmlstarlet val <options> [<xml-file-or-uri> ...]
di mana <options>
  -w atau - well-formed - hanya memvalidasi well-formedness (default)
  -d atau --dtd <dtd-file> - validasi terhadap DTD
  -s atau --xsd <xsd-file> - memvalidasi terhadap skema XSD
  -E atau --embed - memvalidasi menggunakan DTD tertanam
  -r atau --relaxng <rng-file> - validasi terhadap skema Relax-NG
  -e atau --err - mencetak pesan kesalahan verbose di stderr
  -b atau --list-bad - hanya daftar file yang tidak divalidasi
  -g atau --list-good - daftar hanya file yang valid
  -q atau --quiet - jangan daftar file (hanya kembalikan kode hasil)

CATATAN: Skema XML belum sepenuhnya didukung karena tidak lengkap
      dukungan di libxml2 (lihat http://xmlsoft.org)

XMLStarlet adalah toolkit baris perintah untuk query / edit / centang / transformasi
Dokumen XML (untuk informasi lebih lanjut lihat http://xmlstar.sourceforge.net/)

Penggunaan dalam kasus Anda akan sejalan:

xmlstarlet val --xsd your_schema.xsd your_file.xml
Charles Duffy
sumber
3
Apakah Anda tahu seberapa serius peringatan ini tentang tidak sepenuhnya mendukung skema xml?
Jason Dagit
2
Dilihat oleh jawaban lain xmlstarlet agak lemah pada implementasi xsd-nya.
Jason Dagit
3
Mengingat xmlstarlet hanya menggunakan libxml2 di bawah tenda, mungkin lebih mudah menggunakan xmllint yang dibundel dengan libxml2 dan dijelaskan dalam jawaban yang diterima.
Adrian Mouat
@JasonDagit, ... persis sama lemahnya dengan xmllint - mereka menggunakan implementasi perpustakaan yang sama.
Charles Duffy
Model konten tidak determinis. :-(
Greg
16

Untuk Windows ada XML Notepad 2007 gratis . Anda dapat memilih XSD untuk divalidasi

PEMBARUAN: lebih baik lagi, gunakan Notepad ++ dengan plugin XML Tools

SteveC
sumber
3

Saya menggunakan Xerces:

http://xerces.apache.org/xerces-c/

John
sumber
1
Apakah mereka memiliki baris perintah yang dapat digunakan dari konsol untuk memeriksa validasi file XSLT terhadap XSD XSLT 2.0?
Alexis Wilke
Ya, Anda dapat menginstal alat CLI dengan sudo apt install libxerces-c-samplesdan kemudian memeriksa dokumen dengan StdInParse -v=always -n -s < document.xml.
jgrocha
2

Saya baru belajar Skema. Saya menggunakan RELAX NG dan menggunakan xmllint untuk memvalidasi. Saya frustrasi dengan kesalahan yang keluar dari xmlllint. Saya berharap mereka sedikit lebih informatif.

Jika ada atribut yang salah dalam XML maka xmllint memberi tahu Anda nama atribut yang tidak didukung. Tetapi jika Anda kehilangan atribut dalam XML Anda hanya mendapatkan pesan yang mengatakan elemen tidak dapat divalidasi.

Saya sedang mengerjakan beberapa XML yang sangat rumit dengan aturan yang sangat rumit, dan saya baru dalam hal ini sehingga melacak atribut yang hilang membutuhkan waktu yang lama.

Pembaruan: Saya baru saja menemukan alat java yang sangat saya sukai. Itu dapat dijalankan dari baris perintah seperti xmllint dan mendukung RELAX NG: https://msv.dev.java.net/

Pengo
sumber
2

Editor XML untuk validasi XML yang cepat dan mudah tersedia di http://www.xml-buddy.com

Anda hanya perlu menjalankan installer dan setelah itu Anda dapat memvalidasi file XML Anda dengan aplikasi desktop yang mudah digunakan atau baris perintah. Selain itu Anda juga mendapatkan dukungan untuk Schematron dan RelaxNG. Validasi batch juga didukung ...

Pembaruan 1/13/2012: Alat baris perintah gratis untuk digunakan dan menggunakan Xerces sebagai parser XML.

Clemens
sumber
1

satu alat visual hebat untuk memvalidasi dan menghasilkan XSD dari XML adalah IntelliJ IDEA, intuitif dan sederhana.

jacktrade
sumber
1

Anda dapat menghubungkan skema XML Anda ke Intellisense Microsoft Visual Studio. Opsi ini memberi Anda validasi real-time DAN autocomplete, yang mengagumkan.

Saya memiliki skenario yang tepat ini berjalan pada salinan gratis saya dari Microsoft Visual C ++ 2010 Express.

AaronDanielson
sumber
0

Saya cenderung menggunakan xsd dari Microsoft untuk membantu menghasilkan xsd dari file .NET. Saya juga menguraikan bagian dari xml menggunakan xmlstarlet. Alat gratis terakhir yang akan berguna bagi Anda adalah altovaxml, yang tersedia di URL ini: http://www.altova.com/download_components.html .

Ini memungkinkan saya untuk memindai semua file xml mengambil xsd mana yang akan digunakan dengan mem-parsing xml.

# Function:
#    verifyschemas - Will validate all xml files in a configuration directory against the schemas in the passed in directory
# Parameters:
#    The directory where the schema *.xsd files are located.  Must be using dos pathing like: VerifySchemas "c:\\XMLSchemas\\"
# Requirements:
#    Must be in the directory where the configuration files are located
#
verifyschemas()
{
    for FILENAME in $(find . -name '*.xml' -print0 | xargs -0)
    do
        local SchemaFile=$1$(getconfignamefromxml $FILENAME).xsd
        altovaxml /validate $FILENAME /schema $SchemaFile > ~/temp.txt 2> /dev/null
        if [ $? -ne 0 ]; then
            printf "Failed to verify: "
            cat ~/temp.txt | tail -1 | tr -d '\r'
            printf "    - $FILENAME with $SchemaFile\n"
        fi
    done
}

Untuk menghasilkan xml saya menggunakan: xsd DOTNET.dll / type: CFGCLASS & rename schema0.xsd CFGCLASS.xsd

Untuk mendapatkan nama xsd yang saya gunakan: xmlstarlet sel -t -m / XXX / * -v local-name () $ 1 | sed 's / $ //'

Ini memungkinkan saya untuk mengambil XSD yang benar menggunakan elemen tag dalam file xml.

Hasil akhirnya adalah saya bisa memanggil fungsi bash untuk memindai semua file XML dan memverifikasinya. Bahkan jika mereka berada di beberapa subdirektori.

Andrew Stern
sumber