2012-02-06 12 views
9

मेरे पास एक एक्सएमएल स्कीमा है जिसमें कई आयात होते हैं जो बदले में आयात करते हैं। मुझे semantically बराबर स्कीमा उत्पन्न करने की जरूरत है जहां सभी आयात रेखांकित हैं। मैं इन्हें प्रतिस्थापित करना चाहता हूं:एक्सएमएल स्कीमा: इसी स्कीमा के साथ आयात को बदलना

<xs:import namespace="http://some.name/" schemaLocation="./path/to/it.xsd"/> 

संदर्भित स्कीमाटा की सामग्री के साथ। और मुझे एक स्ट्रिंग के रूप में आउटपुट प्राप्त करने की आवश्यकता है, न कि कुछ आंतरिक प्रतिनिधित्व के रूप में।

मैंने Apache Xerces को आजमाया लेकिन स्ट्रिंग में XSModel लिखने का कोई तरीका नहीं मिला। है?

मैंने Apache XmlSchema 2 की कोशिश की लेकिन जब यह एक्सएमएल स्कीमा लिखता है तो यह स्कीमा के साथ आयात घोषणाओं को प्रतिस्थापित नहीं करता है।

क्या कोई पुस्तकालय है जो इसे कर सकता है? कोई सुझाव?

धन्यवाद।

+1

आपको ऐसा करने की आवश्यकता क्यों है? –

+0

यह एक लंबी कहानी है, और यह मेरे पास एक समस्या का एक संभावित समाधान है – Thresh

उत्तर

10

xsd: आमतौर पर इनलाइन किया जा सकता है, लेकिन xsd: आयात नहीं कर सकता है। ऐसा इसलिए है क्योंकि xsd: आयात को एक अलग लक्ष्य नामस्थान के लिए स्कीमा दस्तावेज़ का संदर्भ देने के लिए उपयोग किया जाता है, और आपके पास समान स्कीमा दस्तावेज़ में विभिन्न लक्ष्य नामस्थानों के साथ घटक नहीं हो सकते हैं।

5

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

एक समय या डिज़ाइन समय रिफैक्टरिंग के लिए, जहां आपको आवर्ती तरीके से या गतिशील तरीके से ऐसी चीज़ से प्रोग्राम करने की आवश्यकता नहीं है, तो आप here पर एक नज़र डालने का प्रयास भी कर सकते हैं; हो सकता है कि आपके मामले में समस्या यह नहीं है कि आयात समर्थित नहीं हैं (जो मुझे अजीब लगेगा) बल्कि इसके बजाय शामिल/आयात की जटिलता ग्राफ को आपके टूलिंग के लिए बहुत जटिल बनाती है। जैसा कि बाद के पोस्ट में दिखाया गया है, इसमें शामिल होने से, आवश्यक आयात की संख्या को कम करने के शुद्ध प्रभाव के साथ, समस्या हल हो गई थी।

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

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