Xs: NCName türü nedir ve ne zaman kullanılmalıdır?


97

Xml dosyalarımdan birini bir şema oluşturucu aracılığıyla çalıştırdım ve oluşturulan her şey, bir düğüm haricinde beklenen şeydi:

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

Tam olarak nedir xs:NCName? Ve neden onu kullanmak yerine xs:string?

Yanıtlar:


92

NCName , kolonize olmayan addır, örneğin "ad". Nitelikli ad olan NitelAd ile karşılaştırıldığında, örneğin "ns: ad". Adlarınızın farklı ad alanlarına göre nitelendirilmemesi gerekiyorsa, bunlar NCNamesidir.

xs: string, adlarınıza hiçbir kısıtlama getirmez, ancak xs: NCName temelde ":" dizesinde görünmesine izin vermez.


1
boş dizeye de izin verilmiyorxs:NCName
WeizhongTu

108

@skyl bu cevabı yazmak için beni pratik olarak kışkırttı, bu yüzden lütfen fazlalığa dikkat edin.

NCName"kolonize olmayan ad" anlamına gelir. NCName, bir XML Şeması düzenli ifadesi olarak tanımlanabilir[\i-[:]][\c-[:]]*

... ve bu normal ifade ne anlama geliyor?

\ive \cXML Şeması tanımında tanımlanan çok karakterli çıkışlardır.
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i , ilk XML adı karakterleri kümesi için çıkış yolu ve XML adı karakterleri \ckümesidir. iki nokta üst üste karakterinden oluşan bir kümenin dışında [\i-[:]]kalan kümeden oluşan bir küme anlamına gelir . Yani düz İngilizce'de "herhangi bir başlangıç ​​karakteri, ancak değil " anlamına gelir . Normal ifadenin tamamı "Bir başlangıç ​​XML adı karakteri, ancak iki nokta üst üste değil, ardından sıfır veya daha fazla XML ad karakteri, ancak iki nokta üst üste değil" şeklinde okunur.\i::

Bir NCName'in pratik kısıtlamaları

Dizgeciğin pratik sınırlamalar bunun gibi birçok sembol karakterleri içeremez o vardır :, @, $, %, &, /, +, ,, ;, boşluk karakterleri veya farklı parantez. Ayrıca, bir NCName daha sonra bir NCName'de görünebilmesine rağmen bir sayı, nokta veya eksi karakterle başlayamaz.

NCNames nerede gereklidir?

Ad alanına uyumlu XML belgelerinde tüm adlar ya nitelikli adlar ya da NCNames olmalıdır. Aşağıdaki değerler NCNames olmalıdır (nitelikli adlar değil):

  • ad alanı önekleri
  • bir kimliği temsil eden değerler
  • IDREF'i temsil eden değerler
  • bir NOTASYONU temsil eden değerler
  • işleme talimatı hedefleri
  • varlık adları

3
'Ayrıca bir NCName bir sayı ile başlayamaz' satırı, bir sayının 'xs: ID' olamayacağını anlamama yardımcı oldu
Sean Murphy

Bu ifadeyi Java veya JS gibi bir programlama diline nasıl dönüştürebilirim?
calbertts


Normal bir CName olup olmadığını şu normal ifadeyle kontrol edebilirsiniz: "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ _] [\\ w \\. \\ - \\ d] *". Bunun anlamı. değer bir harf veya alt çizgi ile başlamalı ve ardından kelimeler, noktalar, kısa çizgiler, alt çizgiler, rakamlar içermelidir. Bunu şu adreste deneyebilirsiniz: regexr.com
Naxos84

Yukarıda verilen normal ifadem yalnızca latin harflerini işler. Eğer şartnamesine uygun NCNames tam kontrol istiyorsanız w3.org/TR/1999/REC-xml-names-19990114/#NT-NCName Eğer bu sınıfı kullanmalısınız: java2s.com/Code/Java/XML/...
Naxos84

29

Pratik olarak konuşmak...

İzin verilen karakterler: - , ., 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

Ayrıca, -ve .değerin ilk karakteri olarak kullanılamaz.

İzin verilmeyen karakterler: , !, ", #, $, %, &, ', (, ), *, +, ,, /, :, ;, <, =, >, ?, @, [, \, ], ^, `, {, |, },~


2
Sanırım bunda, örneğin é veya ø gibi izin verilen birçok karakter eksik.
Eric Bloch

Bu ascii olmayan vakaları kapsamak için, karakter setinin bir parçası olarak \ p {L} +
içermelidir

11
Rakamlar da ilk karakter olarak kullanılamaz.
Thilo

5

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

Boşluk veya iki nokta yok. "_" Ve "-" ye izin verir.

Dize yerine bunu kullanırsınız, böylece değerin izin verilenlerle sınırlı olduğunu doğrulayabilirsiniz. Örneğin, django'nun "sümüklü böcek" kavramı gibi ad / tanımlayıcı için belirli kurallarla iyi bir şekilde eşleşir.

[\i-[:]][\c-[:]]*Bizim için İngilizceye çeviren kişiye oy veriyorum .


11
[\i-[:]][\c-[:]]*İngilizce'ye çevrilen bir cevap ekledim . Söz verdiğin gibi, Devam edin ve upvote;)
Jasso
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.