2011-11-28 9 views
6

के लिए 2 XSD स्कीमा फ़ाइलें तुलना करने के लिए मैं तुलना करने के लिए 2 XSD स्कीमा ए और बी निर्धारित करने के लिए कि सभी उदाहरण दस्तावेज स्कीमा एक के लिए मान्य भी स्कीमा बी को मान्य होगा मैं इस का उपयोग करने साबित होता है कि आशा है कि चाहते हैं भले ही स्कीमा ए और बी "अलग" हैं, वे प्रभावी रूप से वही हैं। मतभेदों के उदाहरण यह ट्रिगर नहीं करेंगे स्कीमा ए उपयोग प्रकार और स्कीमा बी इसके सभी तत्वों को इनलाइन घोषित करता है।कैसे बराबर कार्यक्षमता

मैं "स्मार्ट" diff प्रकार उपकरण लेकिन इन दोनों फ़ाइलों दावा बारे में बात कर बहुत से लोग मिल गया है विभिन्न क्योंकि वे विभिन्न पाठ है, लेकिन जिसके परिणामस्वरूप संरचना ही है कर रहे हैं। मुझे एक्सएसओएम के कुछ संदर्भ मिले लेकिन मुझे यकीन नहीं है कि इससे मदद मिलेगी या नहीं।

आगे बढ़ने के तरीके पर कोई विचार?

उत्तर

3

मेरा दृष्टिकोण एक्सएमएल स्कीमा के प्रतिनिधित्व को कैननिकलाइज़ करना था।

दुर्भाग्यवश, मैं आपको यह भी बता सकता हूं कि, XML दस्तावेज़ों के कैननिकलाइजेशन के विपरीत (एक उदाहरण के रूप में, डिजिटल हस्ताक्षर की गणना करने के लिए), यह इतना आसान या मानकीकृत नहीं है। जो कुछ भी उपकरण आपको बनाने या उपयोग का मानना ​​है कि रूप है, और फिर तुलना करते हैं -

तो मूल रूप से, आप एक "विहित प्रपत्र" करने के लिए दोनों XML स्कीमा को बदलने के लिए है।

मेरा दृष्टिकोण प्रत्येक रूट तत्व के लिए एक एक्सएमएल स्कीमा सेट (यदि आपके पास अधिक नामस्थान हैं तो एक से अधिक फ़ाइल हो सकती है) बनाने के लिए था, क्योंकि मुझे रूसी गुड़िया शैली का उपयोग करके लिखे गए एक्सएसडी की तुलना करना आसान लगता है, पीएसवीआई मॉडल।

मैं तो इस तरह के ऑटो मिलान प्रतिस्थापन समूह एक विकल्प के साथ प्रतिस्थापन समूहों के प्रतिस्थापन के साथ मिलकर सदस्यों के रूप में विकल्प का इस्तेमाल किया; "अनावश्यक" एक्सएमएल स्कीमा अनुक्रमों को हटाने, एकल विकल्प विकल्पों को बंद करने या एकल आइटम कंपोजिटर्स के लिए लगभग मिनीऑकर्स/मैक्सऑकर्स को स्थानांतरित करने के लिए

आपके एक्सएसडी-जागरूक तुलना टूल की विशेषताएं क्या हैं, या आप निर्माण करने के लिए व्यवस्थित हैं, इस पर निर्भर करते हुए, आप xsd: पसंद या xsd जैसे सभी कंपोजिटर्स के तहत कणों को पुनर्व्यवस्थित करना पड़ सकता है: सभी; इत्यादि

वैसे भी, मैंने जो कुछ भी सीखा, उसके बाद यह एक उपकरण बनाने के लिए बेहद मुश्किल है जो सभी "शांत" एक्सएसडी सुविधाओं के लिए अच्छा काम करेगा ... एक टेस्ट केस मुझे याद है कि सौभाग्य से सौदा करना था विभिन्न xsd के साथ: कोई भी सामग्री।

मुझे आश्चर्य है, हालांकि अगर चीजें के बाद से बदल गया है ...

+0

डर्न मुझे मेरी आशा थी कि कुछ "सरल" तरीका था कि मैं अभी गायब था। जिस पोस्ट को मैं नहीं ढूंढ पा रहा हूं और मेरे सिर में फंस गया है, एक्सएसओएम की एक्सएसडी की वैचारिकरण होने के साथ-साथ तुलना की जा सकती है। क्या एक्सएसडी जागरूक उपकरण का उपयोग कर रहे थे? –

+0

एक्सएसओएम एक्सएसडी का एक कैनोलिकलाइजेशन नहीं है, निश्चित रूप से; हो सकता है कि वे पीएसवीआई "व्यू" का जिक्र कर रहे थे कि XSOM आपके लिए संकलित करता है। लेकिन इसका उपयोग केवल कुछ, बहुत ही बुनियादी परिदृश्यों के लिए किया जा सकता है। यदि आप बाह्य उपकरणों को तुलना करने के लिए चाहते हैं तो आपको अभी भी नए एक्सएसडी उत्पन्न करने के लिए अपने कस्टम ट्रांसफॉर्म लागू करना होगा।मुझे किसी भी एक्सएसओएम के बारे में पता नहीं है (या अभी तक सीखा है) जो पीएसवीआई व्यू को एक्सएसडी फाइल में वापस भेज देगा ... मैंने खुद को एक संपूर्ण टूल लिखना समाप्त कर दिया, और अंत में इसे एक्सएमएल स्कीमा रिफैक्टरिंग के रूप में ब्रांडेड किया; एक रूसी गुड़िया में रूपांतरण संस्करण 1.0 जीवित नहीं रहा था ... –

4

Membrane SOA Model - Java API for WSDL and XML Schema

package sample.schema; 

import java.util.List; 
import com.predic8.schema.Schema; 
import com.predic8.schema.SchemaParser; 
import com.predic8.schema.diff.SchemaDiffGenerator; 
import com.predic8.soamodel.Difference; 

public class CompareSchema { 

    public static void main(String[] args) { 
    compare(); 
    } 

    private static void compare(){ 
    SchemaParser parser = new SchemaParser(); 

    Schema schema1 = parser.parse("resources/diff/1/common.xsd"); 

    Schema schema2 = parser.parse("resources/diff/2/common.xsd"); 

    SchemaDiffGenerator diffGen = new SchemaDiffGenerator(schema1, schema2); 
    List<Difference> lst = diffGen.compare(); 
    for (Difference diff : lst) { 
     dumpDiff(diff, ""); 
    } 
    } 

    private static void dumpDiff(Difference diff, String level) { 
    System.out.println(level + diff.getDescription()); 
    for (Difference localDiff : diff.getDiffs()){ 
     dumpDiff(localDiff, level + " "); 
    } 
    } 
} 

After executing you get the output shown in listing 2. It is a List of differences between the two Schema documents.

ComplexType PersonType has changed: Sequence has changed: 
    Element id has changed: 
     The type of element id has changed from xsd:string to tns:IdentifierType. 

http://www.service-repository.com/ एक ऑनलाइन XML Schema Version Comparator उपकरण है जो दो XSD के बीच मतभेद की एक रिपोर्ट दिखाता है प्रदान करता है ऐसा लगता है कि झिल्ली एसओए मॉडल से उत्पादित किया जाता है।

+0

संस्करण जो डाउनलोड के लिए उपलब्ध है काम नहीं कर रहा है। उनके अंदर पुस्तकालयों में से एक में एक .class फ़ाइल गुम है: थ्रेड "अपवाद" में अपवाद java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/BytecodeInterface8। LE: स्पष्ट रूप से यह काम करता है यदि आप मैन्युअल रूप से groovy 1.8.6 डाउनलोड करते हैं और इसे बिल्ड पथ में जोड़ते हैं। – Buffalo

+0

हाय..मैंने आपके उदाहरण की कोशिश की है लेकिन यह मेरे लिए काम नहीं कर रहा है। मैं दो स्कीमा फ़ाइल की तुलना करने की कोशिश कर रहा हूं, एक पूरी तरह से संरचित है और दूसरा इनलाइन है (वास्तविक स्कीमा आयात का उपयोग करके आयात किया जाता है)। क्या आप कृपया मेरी मदद करें ? –

+0

धन्यवाद। यह वही था जो मैंने कुछ समय के लिए फंस लिया था। कोई विचार कैसे मतभेदों को फ़िल्टर कर सकता है और केवल एलिमेंट को अंतर को हटा सकता है? – mattymanme

संबंधित मुद्दे