एक एक्स क्या है: NCName प्रकार और इसका उपयोग कब किया जाना चाहिए?


97

मैंने एक स्कीमा जनरेटर के माध्यम से अपनी एक xml फाइल चलाई और जो कुछ भी उत्पन्न हुआ वह एक नोड के अपवाद के साथ अपेक्षित था:

<xs:element name="office" type="xs:NCName"/>

वास्तव में क्या है xs:NCName? और कोई इसका उपयोग क्यों करेगा, बल्कि xs:string?

जवाबों:


92

NCName गैर-उपनिवेशित नाम है जैसे "नाम"। QName की तुलना में जो योग्य नाम है जैसे "ns: name"। यदि आपके नाम विभिन्न नामस्थानों द्वारा योग्य नहीं हैं, तो वे NCNames हैं।

xs: string आपके नामों पर कोई प्रतिबंध नहीं लगाती है, लेकिन xs: NCName मूल रूप से स्ट्रिंग में प्रदर्शित होने के लिए ":" को अस्वीकार कर देता है।


1
खाली तार को भी बंद कर दिया गया हैxs:NCName
WeizhongTu

108

@skyl ने व्यावहारिक रूप से मुझे यह उत्तर लिखने के लिए उकसाया ताकि कृपया अतिरेक को ध्यान में रखें।

NCName"गैर-उपनिवेशित नाम" के लिए खड़ा है। NCName को XML स्कीमा नियमित अभिव्यक्ति के रूप में परिभाषित किया जा सकता है[\i-[:]][\c-[:]]*

... और उस regex का क्या मतलब है?

\iऔर \cएक्सएमएल स्कीमा परिभाषा में परिभाषित मल्टी-कैरेक्टर एस्केप हैं।
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i प्रारंभिक XML नाम वर्णों के सेट के लिए पलायन है और \cXML नाम वर्णों का समूह है। [\i-[:]]एक सेट का मतलब है कि सेट से मिलकर \iएक सेट जिसमें बृहदान्त्र वर्ण शामिल है :। तो सादे अंग्रेजी में इसका मतलब होगा "कोई भी प्रारंभिक चरित्र, लेकिन नहीं :"। संपूर्ण नियमित अभिव्यक्ति "एक प्रारंभिक XML नाम वर्ण के रूप में पढ़ती है, लेकिन एक बृहदान्त्र नहीं, जिसके बाद शून्य या अधिक XML नाम वर्ण होते हैं, लेकिन एक बृहदान्त्र नहीं।"

एक NCName के व्यावहारिक प्रतिबंध

NCName के व्यावहारिक प्रतिबंध है कि यह जैसे कई प्रतीक वर्ण नहीं हो सकते हैं :, @, $, %, &, /, +, ,, ;, खाली स्थान के वर्ण या अलग कोष्टक। इसके अलावा एक NCName नंबर, डॉट या माइनस कैरेक्टर से शुरू नहीं हो सकता है, हालांकि वे बाद में NCName में दिखाई दे सकते हैं।

जहां NCNames की जरूरत है

नामस्थान के अनुरूप XML दस्तावेजों में सभी नामों के योग्य नाम या NCNames होना चाहिए। निम्नलिखित मान NCNames (योग्य नाम नहीं) होने चाहिए:

  • नामस्थान उपसर्ग
  • एक आईडी का प्रतिनिधित्व करने वाले मूल्य
  • एक IDREF का प्रतिनिधित्व करने वाले मूल्य
  • एक अधिसूचना का प्रतिनिधित्व करने वाले मूल्य
  • प्रसंस्करण निर्देश लक्ष्य
  • संस्था के नाम

3
'इसके अलावा एक NCName एक संख्या के साथ शुरू नहीं हो सकता है' ने मुझे यह समझने में मदद की कि एक संख्या एक 'xs: ID' नहीं हो सकती है
शॉन मर्फी

मैं उस अभिव्यक्ति को जावा या जेएस जैसी प्रोग्रामिंग भाषा में कैसे बदल सकता हूं?
कैलेबर्ट्स


आप जाँघ की जाँच कर सकते हैं यह regex के साथ एक नियमित CName है: "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ _] [\\ w \\। \\ - \\ d] *"। इसका मत। मान को एक अक्षर या अंडरस्कोर से शुरू करना चाहिए और फिर शब्द, डॉट्स, डैश, अंडरस्कोर, अंक शामिल होने चाहिए। आप इसे यहाँ देख सकते हैं: regexr.com
Naxos84

ऊपर दिया गया मेरा रेगेक्स केवल लैटिन अक्षरों को संभालता है। यदि आप विनिर्देशन w3.org/TR/1999/REC-xml-names-19990114/#NT-NCName के अनुसार NCNames पर पूरी जाँच चाहते हैं, तो आपको इस वर्ग का उपयोग करना चाहिए: java2s.com/Code-Java/XML/…
Naxos84

29

व्यावहारिक रूप से बोल रहा हूँ...

स्वीकृत वर्णों: - , ., 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, _, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p,q, r, s, t, u, v, w, x, y,z

इसके अलावा, -और .मूल्य के पहले चरित्र के रूप में इस्तेमाल नहीं किया जा सकता है।

अस्वीकृत वर्ण: , !, ", #, $, %, &, ', (, ), *, +, ,, /, :, ;, <, =, >, ?, @, [, \, ], ^, `, {, |, },~


2
मुझे लगता है कि यह बहुत सारे स्वीकृत पात्रों को याद कर रहा है, उदाहरण के लिए, é या ø।
एरिक बलोच

उन गैर-अस्सी मामलों को कवर करने के लिए, इसमें चरित्र सेट के भाग के रूप में \ p {L} + शामिल होना चाहिए
केनस्टन चोई

11
अंकों को पहले वर्ण के रूप में इस्तेमाल नहीं किया जा सकता है।
थिलो

5

http://books.xmlschemata.org/relaxng/ch19-77215.html

कोई स्थान या कॉलोन नहीं। "_" और "-" की अनुमति देता है।

आप इसे स्ट्रिंग के बजाय इसका उपयोग करेंगे ताकि आप यह पुष्टि कर सकें कि मूल्य सीमित है जो कि अनुमति है। यह उदाहरण के लिए, django की अवधारणा जैसे नाम / पहचानकर्ता के लिए कुछ सम्मेलनों के लिए अच्छी तरह से मैप करता है।

मैं उस व्यक्ति का उत्थान करता हूं जो [\i-[:]][\c-[:]]*हमारे लिए अंग्रेजी में अनुवाद करता है।


11
मैंने एक उत्तर जोड़ा जो [\i-[:]][\c-[:]]*अंग्रेजी में अनुवाद करता है। आगे बढ़ें और आगे बढ़ें, जैसा आपने वादा किया था;)
जस्सो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.