Validasi XML dengan XSD di Visual Studio IDE

96

Saya tahu saya telah melakukan ini sebelumnya, tetapi tidak berhasil hari ini, saya juga tidak dapat menemukan tempat yang menjelaskan bagaimana melakukannya. Bisa jadi saya kurang tidur, tapi saya curiga gremlins.

Saya memiliki dokumen XML dan direktori penuh dengan XSD yang mendefinisikannya. Bagaimana cara mengatur Visual IDE untuk memberi tahu saya tentang kegagalan validasi, dan kemudian memberikan daftar intellisense dari tag dan atribut yang valid dalam konteks tertentu?

Apa yang telah saya coba:

  • Saya telah menambahkan XSD ke proyek dengan dokumen XML.
  • Saya telah menambahkan XSD ke daftar Skema XML (di bawah item menu XML / Skema ...)
  • Saya bahkan telah menyertakan atribut schemaLocation dan noNamespaceSchemaLocation ke dokumen XML.

Visual Studio masih belum memberikan informasi debugging atau pengeditan yang berguna. Saya mencoba 2010 dan 2008 (saya pernah melakukannya sebelumnya di 2008 saya pikir)

Pembaruan: Saya meminta pengembang lain mencoba ini dan itu gagal juga untuknya. Dia tahu dia telah melakukannya dengan dokumen XML lain dan berhasil. Saya kemudian mengunduh editor XML Oxygen dan itu berfungsi dengan baik pada file XML dan XSD yang sama, sehingga file tersebut tampaknya baik-baik saja (atau Oxygen lebih pemaaf / fleksibel..)

Jim McKeeth
sumber

Jawaban:

138

Anda harus mengaitkan dokumen XML di Visual Studio dengan file XSD yang Anda miliki.

  1. Anda akan melihat sesuatu seperti ini di jendela Properties Anda pada dokumen XML:

    Properti XML> Skema

  2. Di editor kumpulan skema XML (terbuka saat Anda mengklik elipsis (...) di kotak teks "Skema" di jendela Properti Anda), Anda perlu memastikan bahwa skema Anda ada. Juga, pastikan Usekolom untuk skema itu diaktifkan - jika tidak, klik di atasnya - Anda akan mendapatkan daftar opsi drop-down, pilih Usesalah satu dengan tanda centang hijau:

    Pemilih Skema XML

  3. Pastikan jendela Daftar Kesalahan Visual Studio terlihat (menu View> Error List). Ini akan menunjukkan semua inkonsistensi antara definisi skema XML dan XSD.

  4. Setelah semua itu ada, editor Visual Studio XML akan menyoroti masalah dengan XML Anda di editor menggunakan coretan biru:

    Contoh Error

marc_s
sumber
Terima kasih, itu penjelasan rinci yang bagus, tapi penjelasan saya masih belum berfungsi. Saya tidak tahu Anda bisa masuk ke daftar skema dari properti seperti itu.
Jim McKeeth
@ Jim McKeeth: bagaimana jika Anda memodifikasi XML dan menyimpannya lagi? Kadang-kadang validasi XML membutuhkan pemicu untuk memulai ...
marc_s
Saya telah menerima jawaban Anda meskipun itu tidak berhasil untuk saya. Saya menduga sistem saya baru saja disemprot, tetapi saya telah pindah ke komputer baru dan semuanya berfungsi dengan baik sekarang.
Jim McKeeth
38
@jim Tidak yakin apakah Anda memiliki masalah yang sama, tetapi saya menghabiskan banyak waktu sebelum saya menyadari bahwa file XML harus dibuka di editor dan fokus harus ada di editor ketika Anda memanggil jendela Properties. Baru setelah itu Anda mendapatkan properti "Dokumen XML" di mana Anda dapat menetapkan skema. Jika fokus ada di Solution Explorer, jendela Properties hanya menampilkan properti file, yaitu tidak ada penetapan skema yang dimungkinkan di sana.
herzbube
2
Saya pikir Anda harus menambahkan temuan @ herzbube di jawaban itu sendiri.
ashish
35

Anda tidak perlu mengaitkan file secara manual di Visual Studio - ini akan secara otomatis mencocokkan file XML dengan file XSD jika Anda membukanya, dan namespace Anda ditentukan dengan benar.

Untuk menentukan namespace:

Di elemen root file XML:

<Data xmlns='http://yourdomain.com/yourschema.xsd'>
    ...
</Data>

Di elemen skema file XSD:

<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://yourdomain.com/yourschema.xsd"
    xmlns:this="http://yourdomain.com/yourschema.xsd"
    elementFormDefault="qualified">
    ...
</xs:schema>

Catatan tentang penggunaan Jenis dalam skema Anda saat Anda memiliki targetNamespace

Karena Anda menetapkan a targetNamespacedalam skema Anda, referensi apa pun ke tipe yang ditentukan dalam skema harus diawali dengan namespace (itulah sebabnya kami menambahkan xmlns:thisatribut di <xs:schema />elemen di atas ).

<!-- Define the type as normal -->
<xs:complexType name="Row">
    <xs:sequence>
        <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" />
        <xs:element name="Value" type="xs:float" minOccurs="1" maxOccurs="1" />
    </xs:sequence>
</xs:complexType>
<!-- Use the type (note the "this:" prefix) -->
<xs:element name="Row" type="this:Row" minOccurs="0" maxOccurs="unbounded" />
Ross McNab
sumber
3

Titik lain kegagalan di sini adalah Windows 7 "memblokir" file skema ... klik kanan pada file xsd pada disk, Properties> General dan jika diblokir, Anda akan memiliki tombol "Buka blokir". Ini menyebabkan validasi XML saya gagal di VS2012.

EJA
sumber
1

Apakah xsd Anda berisi atribut "targetNamespace" /schema/@targetNamespaceyang mirip dengan namespace yang Anda rujuk di xml?

Contoh:

XSD :

<xs:schema .... targetNamespace="Datafile.xsd" ... >

XML :

<data xmlns="Datafile.xsd" >...</data>

Lihat juga: XML / XSD intellisense tidak bekerja di Visual Studio 2010

k3b
sumber
0

Saya memiliki masalah yang sama, tetapi VS telah mereferensikan skema saya dengan benar. Ternyata file yang saya coba validasi tidak memiliki ekstensi file 'xml'. Menambahkan .xml di akhir nama file saya, dan validasi mulai berfungsi.

John Livermore
sumber