xsi का उपयोग क्या है: स्कीमा लोकेशन?


131

मैं देख रहा हूं कि हमारे पास इस विशेषता के कई यूआरएल हैं जैसे वसंत में:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

इसकी आवश्यकता क्यों है और इसका उपयोग किस लिए किया जाता है? क्या स्प्रिंग यूआरएल पर जाता है और मान्य होता है? xmlns और xsi में अंतर क्या है: स्कीमालेशन?

जवाबों:


87

schemaLocationएक्सएमएल फ़ाइल को मान्य करने के लिए जावा एक्सएमएल पार्सर जो वसंत का उपयोग करता है, मूल्यों को पढ़ेगा और इंटरनेट से लोड करने की कोशिश करेगा । वसंत, बदले में, उन लोड अनुरोधों को स्वीकार करता है और अपनी स्वयं की JAR फ़ाइलों के अंदर से संस्करणों की सेवा करता है।

यदि आप इसे छोड़ देते हैं schemaLocation, तो XML पार्सर को यह पता नहीं चलेगा कि कॉन्फ़िगरेशन को मान्य करने के लिए स्कीमा कहां से प्राप्त करें।


क्या XML पार्सर वर्ग पथ की खोज नहीं करेगा?
14

1
@skaffman, क्या इसका मतलब यह है कि जब मैं स्प्रिंग-आधारित प्रोजैक्ट के साथ-साथ (ऑफ़लाइन) ध्वज का निर्माण करता हूं तो फ्लैग बिल्ड इस तथ्य के बावजूद विफल हो जाएगा कि सभी निर्भरताएं मेरे स्थानीय भंडार में उपलब्ध हैं?
एविएड

@HDave लेकिन क्या XML पार्सर तलाश कर रहा होगा, स्कीमा किसी भी नाम हो सकता था
करज़िस्तोफ Krasoń

तकनीकी रूप से, XML पार्सर सबसे पहले स्कीमा को इंटरनेट से लोड करने की कोशिश करेगा, अगर नहीं मिला या इंटरनेट का उपयोग उपलब्ध नहीं है, तो यह स्थानीय स्तर पर * .xsd फ़ाइल को स्थानीय रूप से खोजेगा, अगर अभी भी नहीं मिला, तो इसे छोड़ दिया जाएगा।
फ्रैंक झांग

स्प्रिंग अवरोधन परत के बारे में अधिक जानकारी के लिए, stackoverflow.com/a/10768972/32453
rogerdpack

68

एक xmlnsदस्तावेज़ के भीतर एक अद्वितीय पहचानकर्ता है - यह स्कीमा के लिए एक यूआरआइ होने की जरूरत नहीं है:

एक्सएमएल नामस्थान, एलआरआई संदर्भ द्वारा पहचाने गए नामस्थान के साथ जोड़कर एक्स्टेंसिबल मार्कअप लैंग्वेज डॉक्यूमेंट में उपयोग किए जाने वाले एलिमेंट एलिमेंट और एट्रिब्यूट नामों के लिए एक सरल विधि प्रदान करते हैं।

xsi:schemaLocation वास्तविक स्कीमा स्थान के अनुसार संकेत देना चाहिए:

एक दस्तावेज में इस्तेमाल किया जा सकता है जो स्कीमा दस्तावेजों के भौतिक स्थान के रूप में संकेत प्रदान करें जो मूल्यांकन के लिए उपयोग किया जा सकता है।


22

स्कीमों का पता लगाने की युक्ति के अनुसार

नामस्थान नाम के माध्यम से एक स्कीमा पुनर्प्राप्त करने योग्य हो सकता है या नहीं भी हो सकता है ... उपयोगकर्ता समुदाय और / या उपभोक्ता / प्रदाता समझौते उन परिस्थितियों को स्थापित कर सकते हैं जिनमें [नामस्थान यूआरएल से xsd प्राप्त करने का प्रयास करना] एक समझदार डिफ़ॉल्ट रणनीति है

(स्पष्ट होने के लिए धन्यवाद, कल्पना!)

तथा

यदि कोई दस्तावेज़ लेखक (मानव या नहीं) ने किसी विशेष स्कीमा को ध्यान में रखते हुए एक दस्तावेज़ बनाया है, और वारंट है कि दस्तावेज़ के कुछ या सभी उस स्कीमा के अनुरूप हैं, तो स्कीमाक्लाटेशन और noNamespaceSchemaLocation [विशेषताएँ] प्रदान की जाती हैं।

तो मूल रूप से सिर्फ एक नाम स्थान निर्दिष्ट करने के साथ, आपके XML "उस स्थान पर एक xsd के खिलाफ मान्य होने का प्रयास किया जा सकता है (भले ही उसमें एक schemaLocationविशेषता की कमी हो ), आपके" समुदाय पर निर्भर करता है। " यदि आप एक विशिष्ट निर्दिष्ट करते हैं schemaLocation, तो यह मूल रूप से यह कह रहा है कि xml दस्तावेज़ "उक्त xsd के अनुरूप होना चाहिए, इसलिए" कृपया इसे मान्य करें "(जैसा कि मैंने इसे पढ़ा)। मेरा अनुमान है कि यदि आप एक schemaLocationया ऐसा नहीं करते हैं तो noNamespaceSchemaLocationयह "मान्य नहीं है" अधिकांश समय (अन्य उत्तरों के आधार पर, प्रतीत होता है कि जावा इस तरह से होता है)।

यहाँ एक और शिकन यह है कि आम तौर पर जावा पुस्तकालयों में xsd सत्यापन के साथ [पूर्व: स्प्रिंग कॉन्फिग xml फाइलें], यदि आपकी XML फाइलें schemaLocationकिसी XML फ़ाइल में किसी विशेष xsd url को निर्दिष्ट करती हैं , जैसे xsi:schemaLocation="http://somewhere http://somewhere/something.xsd"आम तौर पर आपके किसी एक निर्भरता क्षेत्र में एक कॉपी होगी । वह xsd फ़ाइल, उसके संसाधन अनुभाग में, और स्प्रिंग में "मैपिंग" क्षमता होती है जो उस xsd फ़ाइल को मानने के लिए कहती है जैसे कि वह url के लिए मैप करती है http://somewhere/something.xsd(इसलिए आप कभी भी वेब पर जाकर फ़ाइल डाउनलोड नहीं करते हैं, यह सिर्फ स्थानीय रूप से मौजूद है)। अधिक जानकारी के लिए https://stackoverflow.com/a/41225329/32453 भी देखें ।


0

यदि आप उन स्थानों में से किसी में जाते हैं, तो आप पाएंगे कि उन स्कीमा में क्या परिभाषित किया गया है। उदाहरण के लिए, यह आपको बताता है कि ini-method कुंजी शब्दों के डेटा प्रकार क्या है।

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