Memvalidasi XML dengan Tugas XML
Berlaku untuk: SQL Server SSIS Integration Runtime di Azure Data Factory
Validasi dokumen XML dan dapatkan output kesalahan kaya dengan mengaktifkan properti ValidationDetails dari Tugas XML.
Cuplikan layar berikut menunjukkan Editor Tugas XML dengan pengaturan yang diperlukan untuk validasi XML dengan output kesalahan yang kaya.
Sebelum properti ValidationDetails tersedia, validasi XML oleh Tugas XML hanya mengembalikan hasil benar atau salah, tanpa informasi tentang kesalahan atau lokasinya. Sekarang, ketika Anda mengatur ValidationDetails ke True, file output berisi informasi terperinci tentang setiap kesalahan termasuk nomor baris dan posisi. Anda dapat menggunakan informasi ini untuk memahami, menemukan, dan memperbaiki kesalahan dalam dokumen XML.
Fungsionalitas validasi XML menskalakan dengan mudah untuk dokumen XML besar dan sejumlah besar kesalahan. Karena file output itu sendiri dalam format XML, Anda dapat mengkueri dan menganalisis output. Misalnya, jika output berisi sejumlah besar kesalahan, Anda dapat mengelompokkan kesalahan dengan menggunakan kueri Transact-SQL, seperti yang dijelaskan dalam topik ini.
Catatan
SQL Server Integration Services (SSIS) memperkenalkan properti ValidationDetails di Paket Layanan SQL Server 2012 (11.x) 2. Properti ini juga tersedia di SQL Server 2014 (12.x) dan di SQL Server 2016 (13.x).
Contoh output untuk XML yang valid
Berikut adalah contoh file output dengan hasil validasi untuk file XML yang valid.
<root xmlns:ns="https://schemas.microsoft.com/xmltools/2002/xmlvalidation">
<metadata>
<result>true</result>
<errors>0</errors>
<warnings>0</warnings>
<startTime>2015-05-28T10:27:22.087</startTime>
<endTime>2015-05-28T10:29:07.007</endTime>
<xmlFile>d:\Temp\TestData.xml</xmlFile>
<xsdFile>d:\Temp\TestSchema.xsd</xsdFile>
</metadata>
<messages />
</root>
Sampel output untuk XML yang tidak valid
Berikut adalah contoh file output dengan hasil validasi untuk file XML yang berisi sejumlah kecil kesalahan. Teks <elemen kesalahan> telah dibungkus untuk keterbacaan.
<root xmlns:ns="https://schemas.microsoft.com/xmltools/2002/xmlvalidation">
<metadata>
<result>false</result>
<errors>2</errors>
<warnings>0</warnings>
<startTime>2015-05-28T10:45:09.538</startTime>
<endTime>2015-05-28T10:45:09.558</endTime>
<xmlFile>C:\Temp\TestData.xml</xmlFile>
<xsdFile>C:\Temp\TestSchema.xsd</xsdFile>
</metadata>
<messages>
<error line="5" position="26">The 'ApplicantRole' element is invalid - The value 'wer3' is invalid
according to its datatype 'ApplicantRoleType' - The Enumeration constraint failed.</error>
<error line="16" position="28">The 'Phone' element is invalid - The value 'we3056666666' is invalid
according to its datatype 'phone' - The Pattern constraint failed.</error>
</messages>
</root>
Menganalisis output validasi XML dengan kueri Transact-SQL
Jika output validasi XML berisi sejumlah besar kesalahan, Anda dapat menggunakan kueri Transact-SQL untuk memuat output di SQL Server Management Studio. Kemudian Anda dapat menganalisis daftar kesalahan dengan semua kemampuan bahasa T-SQL termasuk WHERE, GROUP BY, ORDER BY, JOIN, dan sebagainya.
DECLARE @xml XML;
SELECT @xml = XmlDoc
FROM OPENROWSET (BULK N'C:\Temp\XMLValidation_2016-02-212T10-41-00.xml', SINGLE_BLOB) AS Tab(XmlDoc);
-- Query # 1, flat list of errors
-- convert to relational/rectangular
;WITH XMLNAMESPACES ('https://schemas.microsoft.com/xmltools/2002/xmlvalidation' AS ns), rs AS
(
SELECT col.value('@line','INT') AS line
, col.value('@position','INT') AS position
, col.value('.','VARCHAR(1024)') AS error
FROM @XML.nodes('/root/messages/error') AS tab(col)
)
SELECT * FROM rs;
-- WHERE error LIKE '%whatever_string%'
-- Query # 2, count of errors grouped by the error message
-- convert to relational/rectangular
;WITH XMLNAMESPACES ('https://schemas.microsoft.com/xmltools/2002/xmlvalidation' AS ns), rs AS
(
SELECT col.value('@line','INT') AS line
, col.value('@position','INT') AS position
, col.value('.','VARCHAR(1024)') AS error
FROM @XML.nodes('/root/messages/error') AS tab(col)
)
SELECT COALESCE(error,'Total # of errors:') AS [error], COUNT(*) AS [counter]
FROM rs
GROUP BY GROUPING SETS ((error), ())
ORDER BY 2 DESC, COALESCE(error, 'Z');
Berikut adalah hasilnya di Management Studio dari kueri sampel kedua yang ditampilkan dalam teks sebelumnya.