เครื่องมือตรวจสอบ XML Schema (XSD) หรือไม่ [ปิด]


266

ที่สำนักงานเรากำลังเขียนแอปพลิเคชันที่จะสร้างไฟล์ XML กับสคีมาที่เราได้รับ เรามีสคีมาในไฟล์. XSD

มีเครื่องมือหรือไลบรารีที่เราสามารถใช้สำหรับการทดสอบอัตโนมัติเพื่อตรวจสอบว่า XML ที่สร้างขึ้นตรงกับสคีมาหรือไม่

เราต้องการเครื่องมือฟรีที่เหมาะสมสำหรับการใช้งานเชิงพาณิชย์แม้ว่าเราจะไม่รวมตัวตรวจสอบ schema ดังนั้นจึงจำเป็นต้องใช้ devs เท่านั้นในระหว่างการพัฒนา

ภาษาสำหรับการพัฒนาของเราคือ C ++ หากสร้างความแตกต่างใด ๆ แม้ว่าฉันไม่คิดว่ามันควรจะเป็นเพราะเราสามารถสร้างไฟล์ xml แล้วทำการตรวจสอบโดยการเรียกโปรแกรมแยกต่างหากในการทดสอบ


132
ฉันชอบคำถาม "ไม่สร้างสรรค์" จำนวนนี้เป็นผลการค้นหายอดนิยมของ Google ในสิ่งที่ฉันค้นหาและคำตอบนั้นมีประโยชน์
matt freake

1
ฉันเข้าใจว่ามาจากไหนกับคนที่ไม่สร้างสรรค์ สุจริตแม้ว่านี่เป็นคำถามที่ดีและการอภิปราย / ข้อโต้แย้งบางครั้งก็จบลงด้วยการได้คำตอบที่ยอดเยี่ยม
Matt

22
นี่เป็นกรณีที่ผู้ดูแลระบบกำลังต่อต้านประสิทธิผล
anon58192932

มันอาจคุ้มค่าที่จะดูคำถามที่คล้ายกันในบริบทของเครื่องมือสร้างMaven
Alberto

คำตอบ:


239

หลังจากการวิจัยบางอย่างฉันคิดว่าคำตอบที่ดีที่สุดคือXercesซึ่งใช้ XSD ทั้งหมดนั้นเป็นแบบข้ามแพลตฟอร์มและใช้กันอย่างแพร่หลาย ฉันได้สร้างโครงการ Java ขนาดเล็กบน githubเพื่อตรวจสอบความถูกต้องจากบรรทัดคำสั่งโดยใช้ตัวแยกวิเคราะห์ JRE เริ่มต้นซึ่งโดยปกติคือ Xerces สามารถใช้กับ Windows / Mac / Linux

นอกจากนี้ยังมีXerces รุ่น C ++หากคุณต้องการใช้ ยูทิลิตี้ StdInParseสามารถนำมาใช้จะเรียกมันว่าจากบรรทัดคำสั่ง นอกจากนี้ผู้แสดงความคิดเห็นด้านล่างชี้ไปที่อรรถประโยชน์ของ wrapper ที่สมบูรณ์กว่านี้

นอกจากนี้คุณยังสามารถใช้ xmllint ซึ่งเป็นส่วนหนึ่งของlibxml คุณอาจติดตั้งไว้แล้ว ตัวอย่างการใช้งาน:

xmllint --noout --schema XSD_FILE XML_FILE

ปัญหาหนึ่งคือ libxml ไม่ได้ใช้ข้อกำหนดทั้งหมดดังนั้นคุณอาจพบปัญหา :(

หรือถ้าคุณอยู่ใน Windows คุณสามารถใช้MSXMLแต่คุณจะต้องเรียงลำดับของเสื้อคลุมบางที่จะเรียกมันเช่นหนึ่ง GUI ที่อธิบายไว้ในนี้บทความ DDJ แต่ดูเหมือนว่าคนส่วนใหญ่บน Windows ใช้ XML Editor เช่น Notepad ++ (ตามที่อธิบายไว้ในเนทคำตอบ ) หรือXML Notepad 2007เป็นที่แนะนำโดย SteveC (ยังมีบรรณาธิการหลายพาณิชย์ซึ่งผมจะไม่พูดถึงที่นี่)

ท้ายสุดคุณจะพบว่าโปรแกรมต่าง ๆ จะให้ผลลัพธ์ที่แตกต่างกันไป นี่เป็นสาเหตุหลักมาจากความซับซ้อนของสเปค XSD คุณอาจต้องการทดสอบสคีมาของคุณด้วยเครื่องมือหลายอย่าง

UPDATE : ฉันได้ขยายเกี่ยวกับเรื่องนี้ในบล็อกโพสต์


1
ฉันพบว่ามีประโยชน์ดังต่อไปนี้: jmvanel.free.fr/xsd/README.html
Matthew Hegarty

ตัวอย่างการใช้งาน StdinParse (บน linux) จะมีประโยชน์: StdInParse -n -s -f -v = เสมอ <XML_FILE XML_FILE ควรมีที่ตั้งสคีมา สำหรับฉันมันให้ผลลัพธ์ที่สมบูรณ์มากกว่า xmllint
helcim

3
มีวิธีขอให้โปรแกรมใช้ xsi: schemaLocation แทนที่จะให้ XSD ทั้งหมดด้วยตนเองหรือไม่?
Gabor Garami

@GaborGarami ไม่ใช่ตอนนี้ แต่เป็นคำขอคุณลักษณะ: github.com/amouat/xsd-validator/issues/5
Adrian Mouat

1
xmllintไม่สอดคล้องกับ XML regex แต่น่าเสียดายที่ดังนั้น XML regexes ที่ถูกต้องบางอย่างจะไม่ผ่านมันไปได้เลย
Sergey Bushmanov

112

มีปลั๊กอินสำหรับNotepad ++ ที่เรียกว่าเครื่องมือ XMLซึ่งมีการตรวจสอบ XML และการตรวจสอบกับ XSD

คุณสามารถดูวิธีการใช้งานที่นี่


5
-1 ปลั๊กอินนี้เป็นความเจ็บปวดในการติดตั้ง
jcollum

2
ฉันทดสอบด้วย npp 5.8.6, XMLTools 2.3.1 unicode beta2 r805 ก็ใช้งานได้ดี
Palani

5
ปลั๊กอินที่ยอดเยี่ยม ดูNotepad ++ XmlTools ไม่ได้ติดตั้งสำหรับความช่วยเหลือในการติดตั้ง
ภาระ

16
และด้วยเวอร์ชั่น 5.8.7 ตัวจัดการปลั๊กอินของ Notepad ++ ("ตัวจัดการปลั๊กอิน / ปลั๊กอิน") ทำให้กระบวนการติดตั้งเป็นไปโดยอัตโนมัติ
เติมเชื้อเพลิง

1
@FranzEbner ฉันมีปัญหาเดียวกันนี้ หากXMLตัวเองอ้างอิงXSDไฟล์ตัวอย่างเช่นxsi:noNamespaceSchemaLocation="file.xsd"เครื่องมือ XML จะพยายามใช้แทนการให้กล่องโต้ตอบ "set"
theblang

22

xmlstarletเป็นเครื่องมือบรรทัดคำสั่งซึ่งจะทำสิ่งนี้และอื่น ๆ :

$ xmlstarlet val - ช่วย
ชุดเครื่องมือ XMLStarlet: ตรวจสอบความถูกต้องของเอกสาร XML
การใช้งาน: xmlstarlet val <options> [<xml-file-or-uri> ... ]]
โดยที่ <options>
  -w หรือ - ดีขึ้น - ตรวจสอบรูปแบบที่ดีเท่านั้น (ค่าเริ่มต้น)
  -d หรือ --dtd <dtd-file> - ตรวจสอบกับ DTD
  -s หรือ --xsd <xsd-file> - ตรวจสอบกับ XSD schema
  -E or --embed - ตรวจสอบความถูกต้องของการใช้ DTD
  -r หรือ --relaxng <rng-file> - ตรวจสอบกับ Relax-NG schema
  -e หรือ --err - พิมพ์ข้อความแสดงข้อผิดพลาด verbose บน stderr
  -b หรือ --list-bad - แสดงรายการเฉพาะไฟล์ที่ไม่ผ่านการตรวจสอบ
  -g หรือ - รายการที่ดี - แสดงรายการไฟล์เท่านั้นที่ตรวจสอบได้
  -q หรือ --quiet - ไม่แสดงรายการไฟล์ (รหัสผลลัพธ์ส่งคืนเท่านั้น)

หมายเหตุ: XML Schemas ยังไม่รองรับอย่างสมบูรณ์เนื่องจากยังไม่สมบูรณ์
      การสนับสนุนใน libxml2 (ดู http://xmlsoft.org)

XMLStarlet เป็นชุดเครื่องมือบรรทัดคำสั่งเพื่อสอบถาม / แก้ไข / ตรวจสอบ / แปลง
เอกสาร XML (สำหรับข้อมูลเพิ่มเติมดู http://xmlstar.sourceforge.net/)

การใช้งานในกรณีของคุณจะเป็นไปตาม:

xmlstarlet val --xsd your_schema.xsd your_file.xml

3
คุณรู้หรือไม่ว่าคำเตือนอย่างจริงจังเกี่ยวกับการไม่สนับสนุนสกีมา xml อย่างเต็มที่หรือไม่
Jason Dagit

2
ตัดสินโดยคำตอบอื่น ๆ xmlstarlet อ่อนแอเล็กน้อยในการใช้งาน xsd
Jason Dagit

3
เมื่อ xmlstarlet กำหนดให้ใช้ libxml2 ใต้ฝากระโปรงมันอาจจะง่ายกว่าที่จะใช้ xmllint ซึ่งมาพร้อมกับ libxml2 และอธิบายในคำตอบที่ยอมรับ
Adrian Mouat

@ JasonDagit, ... มันอ่อนแอเท่าที่ xmllint เป็น - พวกเขาใช้การใช้งานไลบรารีเดียวกัน
ชาร์ลส์ดัฟฟี่

โมเดลเนื้อหาไม่ได้ถูกกำหนด :-(
Greg

16

สำหรับ Windows จะมีXML Notepad 2007ฟรี คุณสามารถเลือก XSD เพื่อให้ตรวจสอบได้

ปรับปรุง: ยังดีกว่าใช้ Notepad ++ กับปลั๊กอินเครื่องมือ XML


5

Validator Schema XMLออนไลน์จาก DecisionSoft ช่วยให้คุณสามารถตรวจสอบไฟล์ XML กับสคีมาที่กำหนด


1
ไม่สามารถเข้าถึงลิงก์ได้อีกต่อไป ...
ubuntudroid

1
สามารถเข้าถึงได้แล้ว - เปลี่ยนเส้นทางไปที่corefiling.com/opensource/schemaValidate.html
JDonner

3

ฉันใช้ Xerces:

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


1
พวกเขามีบรรทัดคำสั่งที่สามารถใช้จากคอนโซลเพื่อตรวจสอบการตรวจสอบความถูกต้องของไฟล์ XSLT เทียบกับ XSD ของ XSLT 2.0 หรือไม่
Alexis Wilke

ใช่คุณสามารถติดตั้งเครื่องมือ CLI กับและตรวจสอบเอกสารที่มีsudo apt install libxerces-c-samples StdInParse -v=always -n -s < document.xml
jgrocha


2

ฉันแค่เรียนรู้สคีมา ฉันใช้ RELAX NG และใช้ xmllint เพื่อตรวจสอบความถูกต้อง ฉันผิดหวังจากข้อผิดพลาดที่มาจาก xmlllint ฉันหวังว่าพวกเขาจะให้ข้อมูลเพิ่มเติมเล็กน้อย

หากมีแอตทริบิวต์ที่ไม่ถูกต้องใน XML ดังนั้น xmllint จะบอกชื่อของแอตทริบิวต์ที่ไม่ได้รับการสนับสนุน แต่ถ้าคุณไม่มีแอตทริบิวต์ใน XML คุณจะได้รับข้อความแจ้งว่าองค์ประกอบไม่สามารถตรวจสอบได้

ฉันกำลังทำงานกับ XML ที่ซับซ้อนมากด้วยกฎที่ซับซ้อนมากและฉันยังใหม่กับสิ่งนี้ดังนั้นการติดตามว่าแอตทริบิวต์ใดที่ขาดหายไปใช้เวลานาน

อัปเดต: ฉันเพิ่งพบเครื่องมือ java ที่ฉันชอบมาก มันสามารถเรียกใช้จากบรรทัดคำสั่งเช่น xmllint และรองรับ RELAX NG: https://msv.dev.java.net/


2

ฉันพบตัวตรวจสอบออนไลน์นี้จาก 'corefiling' ค่อนข้างมีประโยชน์ -
http://www.corefiling.com/opensource/schemaValidate.html

หลังจากลองใช้เครื่องมือสองสามตัวเพื่อตรวจสอบ xsd ของฉันนี่คือเครื่องมือที่ให้ข้อมูลรายละเอียดข้อผิดพลาดแก่ฉัน - ดังนั้นฉันจึงสามารถแก้ไขข้อผิดพลาดในสคีมาได้


2

เครื่องมือแก้ไข XML สำหรับการตรวจสอบ XML ที่ง่ายและรวดเร็วมีอยู่ที่http://www.xml-buddy.com

คุณเพียงแค่ต้องเรียกใช้ตัวติดตั้งและหลังจากนั้นคุณสามารถตรวจสอบความถูกต้องของไฟล์ XML ด้วยแอปพลิเคชันเดสก์ท็อปหรือบรรทัดคำสั่งที่ใช้งานง่าย นอกจากนี้คุณยังได้รับการสนับสนุนจาก Schematron และ RelaxNG รองรับการตรวจสอบแบทช์ ...

ปรับปรุง 1/13/2012: เครื่องมือบรรทัดคำสั่งมีอิสระในการใช้และใช้ Xerces เป็นตัวแยกวิเคราะห์ XML


1

เครื่องมือภาพที่ยอดเยี่ยมหนึ่งในการตรวจสอบและสร้าง XSD จาก XML คือ IntelliJ IDEA ซึ่งใช้งานง่ายและเรียบง่าย


1

คุณสามารถเชื่อมต่อ XML schema ของคุณกับ Intellisense ของ Microsoft Visual Studio ตัวเลือกนี้ให้ทั้งการตรวจสอบความถูกต้องตามเวลาจริงและการเติมข้อความอัตโนมัติซึ่งยอดเยี่ยมมาก

ฉันมีสถานการณ์ที่แน่นอนนี้ทำงานบน Microsoft Visual C ++ 2010 Express ฟรี



0

ฉันมักจะใช้ xsd จาก Microsoft เพื่อช่วยสร้าง xsd จากไฟล์. NET ฉันยังแยกวิเคราะห์ส่วนของ xml โดยใช้ xmlstarlet เครื่องมือฟรีสุดท้ายที่จะใช้กับคุณเป็น AltovaXML ซึ่งสามารถดูได้ที่ URL นี้: http://www.altova.com/download_components.html

สิ่งนี้ทำให้ฉันสามารถสแกนไฟล์ xml ทั้งหมดที่เก็บได้ซึ่ง xsd ใช้โดยการแยกวิเคราะห์ 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
}

ในการสร้าง xml ฉันใช้: xsd DOTNET.dll / ประเภท: CFGCLASS & เปลี่ยนชื่อ schema0.xsd CFGCLASS.xsd

เพื่อให้ได้ชื่อ xsd ฉันใช้: xmlstarlet sel -t -m / XXX / * -v local-name () $ 1 | sed 's / $ //'

สิ่งนี้ทำให้ฉันสามารถเลือก XSD ที่ถูกต้องโดยใช้แท็กองค์ประกอบภายในไฟล์ xml

ผลลัพธ์สุทธิคือฉันสามารถเรียกใช้ฟังก์ชัน bash เพื่อสแกนไฟล์ XML ทั้งหมดและตรวจสอบได้ แม้ว่าพวกเขาจะอยู่ในหลายไดเรกทอรีย่อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.