XML स्कीमा (XSD) सत्यापन उपकरण? [बन्द है]


266

कार्यालय में हम वर्तमान में एक एप्लिकेशन लिख रहे हैं जो एक स्कीमा के खिलाफ XML फाइलें उत्पन्न करेगा जो हमें दिया गया था। हमारे पास .XSD फ़ाइल में स्कीमा है।

क्या ऐसे उपकरण या पुस्तकालय हैं जिनका उपयोग हम स्वचालित परीक्षण के लिए कर सकते हैं ताकि यह पता चले कि उत्पन्न XML स्कीमा से मेल खाता है?

हम मुफ्त साधनों को पसंद करेंगे जो वाणिज्यिक उपयोग के लिए उपयुक्त हैं, हालांकि हम स्कीमा चेकर को बंडल नहीं करेंगे, इसलिए इसे केवल विकास के दौरान देवताओं द्वारा उपयोग करने की आवश्यकता है।

हमारी विकास भाषा C ++ है, अगर इससे कोई फर्क पड़ता है, हालांकि मुझे नहीं लगता कि यह हमें xml फ़ाइल जेनरेट करना चाहिए और फिर परीक्षण में एक अलग प्रोग्राम को कॉल करके सत्यापन करना चाहिए।


132
मुझे यह पसंद है कि इनमें से कितने "रचनात्मक नहीं" प्रश्न हैं, जिन चीजों की मैं खोज करता हूं और उनके जवाब के लिए Google के शीर्ष खोज परिणाम उपयोगी हैं
मैट फ्रेडे

1
मैं समझता हूं कि जहां रचनात्मक नहीं है, वहां से आ रहा है। ईमानदारी से, हालांकि यह एक महान सवाल है और बहस / तर्क कभी-कभी महान उत्तरों में व्युत्पन्न होते हैं
मैट

22
यह सटीक मामला है जहां प्रवेश काउंटर उत्पादक हैं
anon58192932

शायद यह मावेन निर्माण उपकरण के संदर्भ में एक समान प्रश्न पर ध्यान देने योग्य है ।
अल्बर्टो

जवाबों:


239

कुछ शोध के बाद, मुझे लगता है कि सबसे अच्छा जवाब Xerces है , क्योंकि यह सभी XSD को लागू करता है, क्रॉस-प्लेटफ़ॉर्म है और व्यापक रूप से उपयोग किया जाता है। मैंने डिफ़ॉल्ट JRE पार्सर का उपयोग करके कमांड लाइन से मान्य करने के लिए एक छोटा जावा प्रोजेक्ट बनाया है , जो सामान्य रूप से Xerces है। यह विंडोज / मैक / लिनक्स पर इस्तेमाल किया जा सकता है।

यदि आप इसका उपयोग करना चाहते हैं, तो एक C ++ संस्करण भी उपलब्ध है। StdInParse उपयोगिता यह कमांड लाइन से कॉल करने के लिए इस्तेमाल किया जा सकता। इसके अलावा, एक टिप्पणीकार इस अधिक पूर्ण आवरण उपयोगिता की ओर इशारा करता है

आप xmllint का उपयोग भी कर सकते हैं, जो कि libxml का हिस्सा है । आप अच्छी तरह से पहले से ही इसे स्थापित कर सकते हैं। उदाहरण का उपयोग:

xmllint --noout --schema XSD_FILE XML_FILE

एक समस्या यह है कि libxml विनिर्देश के सभी को लागू नहीं करता है, इसलिए आप मुद्दों में भाग ले सकते हैं :(

वैकल्पिक रूप से, यदि आप विंडोज पर हैं, तो आप msxml का उपयोग कर सकते हैं , लेकिन आपको इसे कॉल करने के लिए किसी प्रकार के आवरण की आवश्यकता होगी, जैसे कि GUI इस DDJ लेख में वर्णित है । हालाँकि, ऐसा लगता है कि विंडोज पर ज्यादातर लोग XML संपादक का उपयोग करते हैं, जैसे कि नोटपैड ++ (जैसा कि नैट के उत्तर में वर्णित है ) या एक्सएमएल नोटपैड 2007 में स्टीवके द्वारा सुझाव दिया गया है (कई वाणिज्यिक संपादक भी हैं जिनका मैं यहां उल्लेख नहीं करूंगा)।

अंत में, आपको विभिन्न कार्यक्रम मिलेंगे, दुर्भाग्य से, अलग परिणाम देंगे। यह काफी हद तक XSD कल्पना की जटिलता के कारण है। आप कई उपकरणों के साथ अपने स्कीमा का परीक्षण करना चाह सकते हैं।

अद्यतन : मैंने इस पर एक ब्लॉग पोस्ट में विस्तार किया है ।


1
मुझे निम्नलिखित मददगार लगे: jmvanel.free.fr/xsd/README.html
मैथ्यू

एक उदाहरण StdinParse उपयोग (linux पर) माइग्रेशन उपयोगी हो: StdInParse -n -s -f -v = हमेशा <XML_FILE। XML_FILE में स्कीमा स्थान शामिल होना चाहिए। मेरे लिए यह xmllint से अधिक पूर्ण परिणाम देता है।
हेलसीम

3
क्या xsi का उपयोग करने के लिए एक कार्यक्रम पूछने का एक तरीका है: सभी XSD को मैन्युअल रूप से खिलाने के बजाय स्कीमालेशन?
गाबेर गार्मी जूल

@GaborGarami इस समय नहीं है, लेकिन यह एक सुविधा अनुरोध है: github.com/amouat/xsd-validator/issues/5
एड्रियन मौट

1
xmllintXML रेगेक्स के अनुरूप नहीं है, दुर्भाग्य से, इसलिए कुछ वैध XML
रेगेक्स

112

नोटपैड ++ के लिए एक प्लगइन है जिसे एक्सएमएल टूल्स कहा जाता है जो एक्सएमएल के खिलाफ एक्सएमएल सत्यापन और सत्यापन प्रदान करता है।

आप देख सकते हैं कि इसका उपयोग कैसे करें


5
-1, इस प्लगइन को स्थापित करने के लिए एक दर्द है
jcollum

2
मैं npp 5.8.6 के साथ परीक्षण किया, XMLTools 2.3.1 यूनिकोड Beta2 r805, यह ठीक काम करता है।
पलानी

5
महान प्लगइन। स्थापना के साथ मदद के लिए Notepad ++ XmlTools नहीं देखें ।
लद्दागे

16
और संस्करण 5.8.7 के साथ, नोटपैड ++ के खुद के प्लगइन प्रबंधक ("प्लगइन्स / प्लगइन प्रबंधक") स्थापना प्रक्रिया को स्वचालित बनाता है।
ईंधन

1
@FranzEbner मुझे भी यही समस्या थी। यदि उदाहरण के लिए XMLस्वयं एक XSDफ़ाइल को संदर्भित करता है xsi:noNamespaceSchemaLocation="file.xsd", तो XML टूल आपको "सेट" संवाद देने के बजाय इसका उपयोग करने का प्रयास करेगा।
दिबांग

22

xmlstarlet एक कमांड-लाइन टूल है जो यह और अधिक करेगा:

$ xmlstarlet वैल-help
XMLStarlet टूलकिट: XML दस्तावेज़ सत्यापित करें
उपयोग: xmlstarlet वैल <विकल्प> [<xml-file-or-uri> ...]
जहाँ <विकल्प>
  -w या -वेल्ड-गठित - केवल अच्छी तरह से गठन को मान्य करें (डिफ़ॉल्ट)
  -d या --dtd <dtd-file> - DTD के विरुद्ध मान्य करें
  -s या - xsd <xsd-file> - XSD स्कीमा के विरुद्ध मान्य करें
  -E या --embed - एम्बेडेड DTD का उपयोग कर मान्य करें
  -r या --relaxng <rng-file> - Relax-NG स्कीमा के विरुद्ध मान्य करें
  -e या --err - stderr पर वर्बोज़ एरर मैसेज प्रिंट करें
  -b या --list-bad - केवल उन्हीं फाइलों को सूचीबद्ध करें, जो मान्य नहीं हैं
  -g या --list-good - केवल उन्हीं फाइलों को सूचीबद्ध करें, जो मान्य हैं
  -q या --quiet - फाइलों को सूचीबद्ध न करें (केवल परिणाम कोड लौटाएं)

नोट: XML स्कीमा इसके अधूरे होने के कारण अभी तक पूरी तरह से समर्थित नहीं हैं
      libxml2 में समर्थन (देखें http://xmlsoft.org)

XMLStarlet एक कमांड लाइन टूलकिट है जिसे क्वेरी / एडिट / चेक / ट्रांसफॉर्म किया जा सकता है
XML दस्तावेज़ (अधिक जानकारी के लिए http://xmlstar.sourceforge.net/ देखें)

आपके मामले में उपयोग निम्न के साथ होगा:

xmlstarlet val --xsd your_schema.xsd your_file.xml

3
क्या आप जानते हैं कि xml स्कीमा का पूरी तरह से समर्थन नहीं करने के बारे में चेतावनी कितनी गंभीर है?
जेसन डगिट

2
अन्य उत्तरों को देखते हुए xmlstarlet अपने xsd कार्यान्वयन पर थोड़ा कमजोर है।
जेसन डगिट

3
यह देखते हुए कि xmlstarlet सिर्फ हुड के नीचे libxml2 का उपयोग करता है, यह शायद सिर्फ xmllint का उपयोग करना आसान है जो libxml2 के साथ बंडल किया गया है और स्वीकृत उत्तर में समझाया गया है।
एड्रियन माउट

@JasonDagit, ... यह बिल्कुल कमजोर है जैसा कि xmllint है - वे एक ही पुस्तकालय कार्यान्वयन का उपयोग करते हैं।
चार्ल्स डफी

सामग्री मॉडल निर्धारक नहीं है। :-(
ग्रेग

16

विंडोज के लिए मुफ्त XML नोटपैड 2007 है । इसके विरुद्ध सत्यापन के लिए आप XSD का चयन कर सकते हैं

अद्यतन: बेहतर अभी तक, XML उपकरण प्लगइन के साथ नोटपैड ++ का उपयोग करें



3

मैं Xerces का उपयोग करता हूं:

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


1
क्या उनके पास एक कमांड लाइन है जिसका उपयोग कंसोल से XSLT 2.0 के XSD के खिलाफ XSLT फाइल की मान्यता की जांच के लिए किया जा सकता है?
एलेक्सिस विल्के

हां, आप एक CLI टूल इंस्टॉल कर सकते हैं sudo apt install libxerces-c-samplesऔर उसके बाद दस्तावेज़ की जांच कर सकते हैं StdInParse -v=always -n -s < document.xml
जगरोचा


2

मैं सिर्फ स्कीमा सीख रहा हूं। मैं RELAX NG का उपयोग कर रहा हूं और मान्य करने के लिए xmllint का उपयोग कर रहा हूं। मैं xmlllint से आने वाली त्रुटियों से निराश हो रहा हूं। काश, वे थोड़े और ज्ञानवर्धक होते।

यदि XML में कोई गलत विशेषता है तो xmllint आपको असमर्थित विशेषता का नाम बताता है। लेकिन अगर आप एक्सएमएल में एक विशेषता याद कर रहे हैं, तो आपको यह कहते हुए एक संदेश मिलेगा कि तत्व को मान्य नहीं किया जा सकता है।

मैं बहुत जटिल नियमों के साथ कुछ बहुत ही जटिल XML पर काम कर रहा हूं, और मैं इसके लिए नया हूं ताकि नीचे दिखाई दे रहा है कि कौन सी विशेषता गायब है।

अपडेट: मुझे सिर्फ एक जावा उपकरण मिला है जिसे मैं बहुत पसंद कर रहा हूं। इसे कमांड लाइन से xmllint की तरह चलाया जा सकता है और यह RELAX NG: https://msv.dev.java.net/ का समर्थन करता है


2

मुझे यह ऑनलाइन सत्यापनकर्ता 'उपयोगी' से काफी उपयोगी लगा -
http://www.corefiling.com/opensource/schemaValidate.html

मेरे xsd को मान्य करने के लिए कुछ उपकरणों की कोशिश करने के बाद, यह वह है जिसने मुझे विस्तृत त्रुटि जानकारी दी है - इसलिए मैं स्कीमा में त्रुटि को ठीक करने में सक्षम था।


2

त्वरित और आसान XML सत्यापन के लिए एक XML संपादक http://www.xml-buddy.com पर उपलब्ध है

आपको बस इंस्टॉलर को चलाने की आवश्यकता है और उसके बाद आप अपनी एक्सएमएल फाइलों को डेस्कटॉप एप्लिकेशन या कमांड-लाइन का उपयोग करने के लिए आसान बना सकते हैं। इसके अलावा आपको स्कैमेट्रॉन और रिलैक्सएनजी का भी समर्थन मिलता है। बैच सत्यापन भी समर्थित है ...

1/13/2012 अपडेट करें: कमांड लाइन टूल Xerces को XML पार्सर के रूप में उपयोग करने और उपयोग करने के लिए स्वतंत्र है।


1

XML से XSD को मान्य और उत्पन्न करने के लिए एक महान दृश्य उपकरण है, IntelliJ IDEA, सहज और सरल।


1

आप अपने XML स्कीमा को Microsoft Visual Studio के Intellisense से जोड़ सकते हैं। यह विकल्प आपको वास्तविक समय सत्यापन और स्वत: पूर्ण दोनों प्रदान करता है, जो कि बस कमाल है।

मेरे पास Microsoft Visual C ++ 2010 एक्सप्रेस की मुफ्त प्रतिलिपि पर चलने वाला यह सटीक परिदृश्य है।



0

मैं .NET फ़ाइल से xsd उत्पन्न करने में मदद करने के लिए Microsoft से xsd का उपयोग करता हूं। मैं xmlstarlet का उपयोग करके xml के अनुभागों को भी पार्स करता हूं। अंतिम मुफ्त उपकरण जो आपके लिए उपयोग किया जाएगा वह अल्टोवैक्स एमएल है, जो इस URL पर उपलब्ध है: http://www.altova.com/download_compenders.html

यह मुझे उन सभी xml फ़ाइलों को स्कैन करने की अनुमति देता है जो xml को पार्स करके उपयोग करने के लिए किस xsd का उपयोग करती हैं।

# 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 & rename schema0.xsd CFGCLASS.xsd

Xsd नाम का उपयोग करने के लिए: xmlstarlet sel -t -m / XXX / * -v local-name (): $ 1 | sed 's / $ //'

यह मुझे xml फ़ाइल के भीतर एक तत्व टैग का उपयोग करके सही XSD लेने की अनुमति देता है।

शुद्ध परिणाम यह है कि मैं सभी XML फ़ाइलों को स्कैन करने और उन्हें सत्यापित करने के लिए एक बश फ़ंक्शन को कॉल कर सकता हूं। भले ही वे कई उपनिर्देशिकाओं में हों।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.