XML 작업을 사용하여 XML 유효성 검사
적용 대상: Azure Data Factory의 SQL Server SSIS Integration Runtime
XML 작업의 ValidationDetails 속성을 사용하도록 설정하여 XML 문서의 유효성을 검사하고 풍부한 오류 출력을 가져올 수 있습니다.
다음 스크린샷은 풍부한 오류 출력이 있는 XML 유효성 검사에 필요한 설정이 있는 XML 작업 편집기를 보여줍니다.
ValidationDetails 속성을 사용할 수 있기 전에 XML 작업의 XML 유효성 검사는 오류 또는 해당 위치에 대한 정보 없이 true 또는 false 결과만 반환했습니다. 이제 ValidationDetails를 True로 설정하면 출력 파일에 줄 번호와 위치를 비롯한 모든 오류에 대한 자세한 정보가 포함됩니다. 이 정보를 사용하여 XML 문서의 오류를 이해하고 찾고 수정할 수 있습니다.
XML 유효성 검사 기능은 큰 XML 문서 및 많은 수의 오류에 대해 쉽게 확장됩니다. 출력 파일 자체는 XML 형식이므로 출력을 쿼리하고 분석할 수 있습니다. 예를 들어 출력에 오류가 많이 포함되어 있으면 이 항목에서 설명하는 대로 Transact-SQL 쿼리를 사용하여 오류를 그룹화할 수 있습니다.
참고 항목
SSIS(SQL Server 통합 서비스)는 SQL Server 2012(11.x) 서비스 팩 2에서 ValidationDetails 속성을 도입했습니다. 속성 또한 SQL Server 2014(12.x) 및 SQL Server 2016(13.x)에서 사용할 수 있습니다.
유효한 XML에 대한 샘플 출력
유효한 XML 파일에 대한 유효성 검사 결과가 있는 샘플 출력 파일은 다음과 같습니다.
<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>
유효하지 않은 XML에 대한 샘플 출력
다음은 적은 수의 오류가 포함된 XML 파일에 대한 유효성 검사 결과가 포함된 샘플 출력 파일입니다. 코드를 쉽게 확인할 수 있도록 <error> 요소의 텍스트에 줄 바꿈이 적용되었습니다.
<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>
Transact-SQL 쿼리를 사용하여 XML 유효성 검사 출력 분석
XML 유효성 검사의 출력에 오류가 많이 포함되어 있으면 Transact-SQL 쿼리를 사용하여 SQL Server Management Studio에서 출력을 로드할 수 있습니다. 그런 다음 WHERE, GROUP BY, ORDER BY, JOIN 등을 비롯한 T-SQL 언어의 모든 기능을 사용하여 오류 목록을 분석할 수 있습니다.
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');
다음은 이전 텍스트에 표시된 두 번째 샘플 쿼리의 Management Studio 결과입니다.