จะตรวจสอบ XML กับ XSD ที่ซ้อนกันใน Powershell ได้อย่างไร

ปัญหา

การตรวจสอบ XML กับ XSD ผ่าน Test-Xml จะล้มเหลวหาก XSD ซ้อนกัน (รวมถึง XSD อื่นๆ ด้วย)

Test-Xml "C:\XML\Onix3sample_refnames.xml" -SchemaPath "C:\XML\ONIX_BookProduct_3.0_reference.xsd"

ส่งผลให้เกิดข้อผิดพลาด:

Test-Xml : Type 'http://ns.editeur.org/onix/3.0/reference:SourceTypeCode' is not declared, or is not a simple type.

เหตุผลที่เป็นไปได้

ONIX_BookProduct_3.0_reference.xsd รวมไฟล์ XSD อีกสองไฟล์

    <xs:include schemaLocation="ONIX_BookProduct_CodeLists.xsd"/>
    <xs:include schemaLocation="ONIX_XHTML_Subset.xsd"/>

ความคิดเห็นใน ข้อผิดพลาดในการตรวจสอบ XML โดยใช้สกีมา XSD ที่ซ้อนกัน - ประเภท ไม่ได้ประกาศ แสดงว่า XmlReader ไม่ทราบตำแหน่งของอินพุตของ Stream ที่สำคัญ จึงไม่สามารถโหลด XSD ลูกของ include ได้ ฉันเดา: Test-Xml ใช้ XmlReader

ผู้ใช้รายอื่นมีปัญหาเดียวกันใน ASP.Net Core

ไฟล์ทดสอบ

สามารถดูได้ที่ https://www.editeur.org/93/Release-3.0-Downloads/

ไฟล์ตัวอย่าง XML: https://www.editeur.org/files/ONIX%203/ONIX_Books_3.0_sample_6.zip

ไฟล์สคีมา XSD: https://www.editeur.org/files/ONIX%203/ONIX_BookProduct_XSD_schema+codes_Issue_52.zip

คำถาม

เนื่องจากความรู้ .NET ของฉันค่อนข้างจำกัด ฉันจะรู้สึกขอบคุณเป็นอย่างยิ่งสำหรับโซลูชัน Powershell ในการตรวจสอบไฟล์ ONIX XML กับ XSD Schema ที่ซ้อนกัน โดยควรไม่ต้องเปลี่ยน XSD (เนื่องจากมีการอัปเดตบ่อยครั้ง)

PS: การตรวจสอบความถูกต้องของไฟล์เหล่านี้ใน Notepad++/XML Tools หรือ XML Notepad ทำงานได้ดี


person Beeblebrox    schedule 29.04.2021    source แหล่งที่มา