2011-11-19 10 views
15

हम एक नई एक्सएसडी स्कीमा लिख ​​रहे हैं जो एक और स्कीमा पर आधारित होगा और यह जीपीएसएक्स नामक जीपीएस डेटा के लिए एक वास्तविक डी मानक है)। हमारी स्कीमा का उपयोग हमारे ग्राहकों द्वारा उत्पन्न दस्तावेजों को सत्यापित करने और परीक्षण में करने के लिए किया जाएगा। मुझे बेहतर समझने की जरूरत है कि हमारी नई स्कीमा से बेस स्कीमा को कैसे संदर्भित किया जाए, विशेष रूप से यह देखते हुए कि हमारे सिस्टम से इंटरनेट कनेक्शन होने की उम्मीद नहीं की जा सकती है।किसी अन्य स्कीमा से एक xsd स्कीमा को संदर्भित करने की मूल बातें

मेरी समझ यह है कि किसी अन्य सर्वर पर xsd दस्तावेज़ों के संदर्भ आमतौर पर वहां होते हैं ताकि डेवलपर विकास के दौरान दस्तावेज़ पुनर्प्राप्त कर सके लेकिन सिस्टम रन-टाइम सत्यापन के दौरान एक स्कीमा की स्थानीय प्रतिलिपि रखना बुद्धिमान होगा उत्पादन को लटका देने के लिए बुद्धिमान नहीं होगा क्योंकि रिमोट सर्वर पहुंच योग्य नहीं था। क्या ये सही है?

तो फिर यदि ऐसा है, XSD मुझे दोनों के लिए संदर्भ दूरस्थ आधार XSD स्कीमा उम्मीद करता है, लेकिन यह भी नाम और स्कीमा के कुछ स्थानीय प्रतिलिपि के स्थान? या ऐसी नई संदर्भ मेरी नई स्कीमा फ़ाइल में आवश्यक नहीं है? उम्मीद है कि समझ में आता है। धन्यवाद।

उत्तर

27

किसी अन्य स्कीमा को संदर्भित करने के लिए यह एक ऐसा सम्मेलन है जो उस स्कीमा को "मुख्य" स्कीमा में स्थानीय रूप से संदर्भित करता है जिसे आप संदर्भित कर रहे हैं।

<xs:import namespace="http://CommonTypesNamespace/CommonTypes" 
      schemaLocation="CommonTypes.xsd"/> 

यह मूलतः कह रहा है एक स्कीमा CommonTypes.xsd बुलाया अपने मुख्य स्कीमा रूप में एक ही निर्देशिका में पाया जाएगा जो मौजूद है: उदाहरण के लिए, एक स्कीमा जो कुछ फिर से प्रयोग करने योग्य प्रकार परिभाषित करता है आयात करने के लिए। schemaLocation विशेषता मेरे संदर्भ स्कीमा से वास्तविक स्कीमा फ़ाइल के सापेक्ष पथ के रूप में उपयोग की जाती है (नोट: यह भी पूरी तरह से वैकल्पिक है - इस उत्तर के नीचे मेरा नोट देखें)।

CommonTypes.xsd अंदर प्रकार का उपयोग करने के लिए, मैं पहली बार अपने मुख्य स्कीमा घोषणा में आम प्रकार नाम स्थान जोड़ें:

<xs:schema targetNamespace="http://MyNamespace/MyTypes" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified" 
      xmlns:common="http://CommonTypesNamespace/CommonTypes"> 

यह कह रहा है कि मैं अपने आम स्कीमा में उपलब्ध से प्रकार बनाना चाहते मेरी नेमस्पेस उपसर्ग "सामान्य" का उपयोग कर मुख्य स्कीमा।

<xs:element name="DeliveryAddress" type="common:AddressType" /> 

यह कहता है कि मेरी वितरण पता प्रकार वास्तव में AddressType आम प्रकार स्कीमा में परिभाषित के रूप में एक ही प्रकार है:

फिर, उदाहरण के लिए, एक "पता" आम प्रकार संदर्भ के लिए।

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

+1

दरअसल, 'स्कीमालोकेशन' उस नामस्थान के साथ स्कीमा के स्थान के रूप में वैकल्पिक संकेत से अधिक कुछ नहीं है। प्रोसेसर इसे अनदेखा करने के लिए स्वतंत्र है क्योंकि यह फिट दिखाई देता है। – skaffman

+0

तो यह सख्त परिभाषा के बजाय सम्मेलन पर आधारित है? मैंने इसे कई बार पहले देखा है, और मैंने इसे स्वयं किया है। –

+0

कुछ कार्यान्वयन दूसरों की तुलना में कठोर हो सकते हैं, लेकिन एक्सएमएल स्कीमा स्पेक का कहना है कि यह बहुत ही वैकल्पिक है। – skaffman

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