XSD: xs: integer ve xs: int arasındaki fark nedir?


111

Ben XSD oluşturmaya başladı ve verilebilecek örneklerden birkaç bulduk xs:integerve xs:int.

Arasındaki fark nedir xs:integerve xs:int? Ne zaman kullanmalıyım xs:integer? Ne zaman kullanmalıyım xs:int?

Yanıtlar:


110

Aradaki fark şudur: xs:intişaretli bir 32 bit tam sayıdır. xs:integertamsayı sınırsız bir değerdir. Ayrıntılar için bakın https://web.archive.org/web/20151117073716/http://www.w3schools.com/schema/schema_dtypes_numeric.asp Örneğin, XJC (Java) Integerfor xs:intve BigIntegerfor üretir xs:integer.

Sonuç olarak: xs:intplatformlar arası çalışmak istiyorsanız kullanın ve sayılarınızın sorunsuz geçeceğinden emin olun. Daha büyük sayılar istiyorsanız - xs:longyerine kullanın xs:integer(oluşturulacaktır Long).


2
Saxon 9 HE (Home Edition) yalnızca 'xs: integer , but not xs: int` veya xs:long.
Nishi

13
w3cshools yetkili değildir. Neden uygun tanımlara atıfta bulunmuyorsunuz? w3.org/2001/XMLSchema.xsd , örneğin, tamsayının +/- 9223372036854775808'e bağlı olduğunu belirtir. Ayrıca, çapraz platformun (uyumlu) xml ile ilgisi yoktur.
Paul Hargreaves

@Nishi, Saxon 9 HE uygun değil gibi geliyor. Saxon.sourceforge.net sayfasını okurken sadece EE sürümünün uyumlu olduğu görülmektedir.
Paul Hargreaves

2
@PaulHargreaves, Saxon 9 HE (bildiğim kadarıyla) tamamen uyumlu bir XSLT işlemcisidir: xs: int, desteklemesi gereken temel bir XSLT işlemcisinin gerekli olduğu türler kümesinde değildir . Uyumlu bir XSD işlemci olmadığını kastediyorsanız, bu doğrudur ancak yanıltıcıdır: bu bir XSD işlemci değildir.
CM Sperberg-McQueen

8
@PaulHargreaves, +/- 9223372036854775808'in maksimum "xs: tamsayı" olduğu hakkındaki yorumunuz yanlış: XMLSchema.xsd, "xs: long" ifadesinin "xs: tamsayı" ile +/- 9223372036854775808 arasında bir kısıtlama olduğunu tanımlar
metatechbe

30

Xs: tamsayı fractionDigits sıfıra ise yasal olur ondalık noktayı ve arka sıfır yasaklayan bir sözcük alanı ile ayarlanır, bir yüzüyle ondalık: türü xs bir sınırlamadır. Minimum veya maksimum değeri yoktur, ancak sonlu boyutlu makinelerde çalışan uygulamaların keyfi olarak büyük veya küçük değerleri kabul edebilmesi gerekmez. (16 ondalık basamaklı değerleri desteklemeleri gerekir.)

Xs int türü xs bir kısıtlama: uzun, 2147483647 maxInclusive faset seti ve -2147483648 için minInclusive yüz,. (Gördüğünüz gibi, iki tamamlayıcı 32 bitlik işaretli tamsayı alanına uygun şekilde sığacaktır; xs: long, 64 bitlik işaretli tamsayı alanına sığar.)

Genel kural şudur: Söylemek istediklerinize uygun olanı kullanın. Bir öğe veya öznitelik üzerindeki kısıtlama, değerinin bir tam sayı olması gerektiğiyse, xs: integer bunu kısaca söyler. Kısıtlama, değerin iki tamamlayıcı gösterimde en fazla 32 bit ile ifade edilebilecek bir tamsayı olması gerektiği yönündeyse, xs: int kullanın. (İkincil ancak bazen önemli bir endişe, alet zincirinizin biriyle diğerinden daha iyi çalışıp çalışmadığıdır. Alet zincirinizden daha uzun ömürlü olan veriler için, önce verileri dinlemek akıllıca olacaktır; yalnızca aracı beslemek için var olan veriler için zincir ve alet zincirinizi değiştirirseniz ilginizi çekmeyecek, alet zincirini dinlememek için hiçbir neden yoktur.)


Siz: Sonlu boyuttaki makinelerde çalışan uygulamalar, [...] için gerekli değildir . Standardın, sonsuz makinelerde çalışan uygulamaların (Turing makineleri ve malzemeleri gibi) tüm aralığı kabul etmesi ve düzgün şekilde temsil etmesi gerekliliği var mı? :-) Bu harika olurdu, çünkü şu anda bilindiği şekliyle fizik yasalarına sahip olan evren bu tür makineleri kabul etmiyor.
Jeppe Stig Nielsen

Hayır, belirtimin sonsuz makinelerde çalışan uygulamalar için özel kuralları yoktur; tüm uygulamaların, sonsuz veri türlerinin kısmi uygulamasını yöneten kurallardan yararlanmasına izin verilir.
CM Sperberg-McQueen

6

Bazı insanlar için önemli olabilecek bir bilgiçlik notu ekleyeceğim: xs: int'in 32 bitlik imzalı bir tamsayı olduğunu söylemek doğru değil. Bu tür sözcükler, ikili bir dijital bilgisayar içinde bellekte (veya kayıtlarda, vb.) Bir uygulamayı ima eder. XML karakter tabanlıdır ve maksimum 32 bitlik işaretli değeri "2147483647" (elbette benim tırnak işaretleri) olarak uygular, bu da 32 bitten çok daha fazladır! Doğru olan şey, xs: int'in (dolaylı olarak) bir xs: tamsayı kısıtlamasıdır ve izin verilen maksimum ve minimum değerleri, bir işaret biti olan 32 bitlik bir tamsayının karşılık gelen uygulama tarafından empoze edilen sınırlarıyla aynı olacak şekilde ayarlar.


XSD ile doğrulanan kaynak bilgi kümesinin bir dizi karakter biçiminde geldiği garanti edilemez; şema XSLT veya XQuery aracılığıyla oluşturulmuş bir belge örneğini doğrulamak için kullanılıyorsa, 32 bitlik tamsayılar için geleneksel gösterimi kullanarak bir xs: int değerinin bellekte gösterilebilmesi olasılığı vardır.
CM Sperberg-McQueen

@ CMSperberg-McQueen, ne demek istediğini anladığımdan emin değilim. xs: int, aralığı olan bir türdür, nasıl depolandığı XSD ile ilgisizdir ve bellekte 32 bitlik işaretli bir tamsayı olarak "int" olarak kodlayan herhangi bir şey, örneğin, farklı bir XSD seçilirse, int w3c XSD'de tanımlanan aralıktan farklı bir aralığa sahiptir.
Paul Hargreaves

1
@PaulHargreaves, biraz bilgiçlik taslayan bir nokta (cevabın ruhunda). Cevap doğrudur ki, xs: int işaretli bir 32-bit iki tamsayıdır demek doğru değildir . Ancak yanıt, XML karakter tabanlı olduğundan, xs: int'in maksimum değerinin "2147483647" karakter dizisidir ; bu son parça ille de öyle değil. XSD türleri birçok sistem tarafından kullanılır, örneğin XQuery veritabanları, burada bir xs: int değerinin Unicode karakter dizisinden çok 32 bitlik iki tamamlayıcı bir alanda gösterilmesi daha olasıdır.
CM Sperberg-McQueen

"eşittir" yerine "temsil eder" kullanın
Chris Walsh
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.