2012-03-09 8 views
8

मैं जवाब के लिए खोज कर रहे हैं और एक नहीं पा सके:XSD कुंजी/दृश्य स्टूडियो में keyref IntelliSense सत्यापन समर्थन 2010

  • वहाँ एक XSD कुंजी/keyref सत्यापन के माध्यम से दृश्य स्टूडियो में समर्थन Intellisense है 2010?
  • यदि हां, तो इसे कैसे काम करें?
  • यदि नहीं, तो क्या विजुअल स्टूडियो में एक्सएसडी स्कीमा वाले एक्सएमएल में कुंजी/संदर्भ सत्यापन करने के लिए एक (अंतर्निर्मित) तरीका है?

धन्यवाद!

अद्यतन: कृपया ध्यान दें कि प्रश्न एक्सएसडी फ़ाइल वाले एक्सएमएल को वैध करने के तरीके के बारे में नहीं है। मैं विशेष रूप से कुंजी/कीफ्रैफ़ इंटेलिजेंस/जो भी विजुअल स्टूडियो में का समर्थन करता हूं, जो कि बिल्कुल भी प्रतीत नहीं होता है।

+0

संभव डुप्लिकेट [आप बनाम 2010 में एक्सएमएल के खिलाफ XSD मान्य कर सकते हैं?]: //stackoverflow.com/questions/8988593/can-you-validate-xsd-against-xml-in-vs-2010) – DaveShaw

+2

क्या आपको कभी इसका उत्तर मिला? ऐसा लगता है कि एक्सएसडी एक्सएसडी के साथ इसका समर्थन है ... –

+0

अभी तक कोई जवाब नहीं है, मैं सोच रहा हूं कि जितना अधिक से अधिक लोग इसे ऊपर उठाते हैं, वहां कोई जवाब नहीं है। दुर्भाग्य से। –

उत्तर

1

कार्यक्षमता वर्तमान में वीएस -2010 में समर्थित नहीं है, न ही यह वीएस2012 (एमएस तकनीकी सहायता के अनुसार) में है।

शायद वे यह भविष्य के संस्करणों में समर्थन करेंगे ...

2

Visual Studio 2012 अब XML दस्तावेज़ उदाहरणों कि कुंजी/keyref की कमी के रूप में संदर्भित स्कीमा में निर्धारित किए जा सकते हैं के सत्यापन का समर्थन करता है।

हालांकि, विजुअल स्टूडियो स्कीमा दस्तावेज़ के लिए के लिए कोई त्रुटि नहीं देता है, जब वह स्कीमा दस्तावेज़ कुंजी/कीफ गलत तरीके से उपयोग करता है - यह स्वीकार करता है कि कुछ दस्तावेज़ स्कीमा से मिलता है या नहीं।

विशेष रूप से, कुंजी/keyref तत्व के रूप में स्कीमा में निर्धारित नामस्थान चयनकर्ता xpath बयान में, अतः निम्नलिखित पोस्ट के अनुसार का उपयोग करना चाहिए:

https://stackoverflow.com/a/4492004/344638

के शब्दों में:

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

निम्नलिखित SO पोस्ट एक स्कीमा का एक पूर्ण उदाहरण प्रदान करता है जो कुंजी/कीफ्रफ़, एक XML दस्तावेज़ उदाहरण, और मैन्युअल C#-आधारित वैधता का उपयोग करता है। स्कीमा और XML दस्तावेज़ उदाहरण दृश्य स्टूडियो में सही ढंग से मान्य - अगर दस्तावेज़ स्कीमा के प्रमुख/keyref प्रतिबंधों का उल्लंघन करता विजुअल स्टूडियो त्रुटियों उत्पन्न करेगा:

https://stackoverflow.com/a/2866428/344638

0

बस वी.एस. 2013 में की कोशिश की और वी.एस. 2015 उन्होंने ऐसा किया अब कुंजी/रीफकी मान्य करें। हालांकि यह अभिभावक स्तर पर चेतावनियां दिखाता है।

लेकिन जैसा कि @antiduh ने कहा, वे अभी भी xsd फ़ाइल की जांच नहीं करते हैं। तो आपको वास्तव में की आवश्यकता है सुनिश्चित करें कि xsd में कुंजी/रीकी सही है।

यह एक साधारण नमूना जानने के लिए मेरे घंटों का समय लगा। यहां तक ​​कि sample on MSDN काम नहीं करता है। मुझे इसे थोड़ा संशोधित करना पड़ा।

सबसे पहले, सुनिश्चित करें कि आप how to let Visual Studio validate an xml against an xsd of your choice जानते हैं।

फिर कुंजी/रीकी सत्यापन के लिए निम्न नमूना xsd और xml का उपयोग करें। ध्यान दें कि चेतावनी रूट तत्व के समापन पर है, उस तत्व के बजाय जो कुंजी/रेफ नियम का उल्लंघन करती है।

XSD फ़ाइल इस तरह दिखता है:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="namespace1" 
     xmlns:r="namespace1" 
     elementFormDefault="qualified"> 

    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="A" type="r:A" maxOccurs="unbounded"/> 
     <xs:element name="B" type="r:B"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:keyref name="dummy" refer="r:pNumKey"> 
     <xs:selector xpath="r:A/r:part"/> 
     <xs:field xpath="@ref-number"/> 
    </xs:keyref> 
    <xs:key name="pNumKey"> 
     <xs:selector xpath="r:B/r:part"/> 
     <xs:field xpath="@key-number"/> 
    </xs:key> 
    </xs:element> 

    <xs:complexType name="A"> 
    <xs:sequence> 
     <xs:element name="part" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="ref-number" type="xs:integer"/> 
      </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="B"> 
    <xs:sequence> 
     <xs:element name="part" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="key-number" type="xs:integer"/> 
      </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 

</xs:schema> 

और xml फ़ाइल इस तरह दिखता है:

<?xml version="1.0" encoding="utf-8" ?> 
<root xmlns="namespace1"> 
    <A> 
    <!-- if the ref-number is equal to one of the key-number, the validation will pass --> 
    <part ref-number="1"/> 
    </A> 
    <A> 
    <!-- if the ref-number is not equal to one of the key-number, the validation will give error --> 
    <part ref-number="5"/> 
    </A> 
    <B> 
    <part key-number="1"/> 
    <part key-number="2"/> 
    <part key-number="3"/> 
    </B> 
</root><!--you will see warnings here--> 
की (http
संबंधित मुद्दे