webentwicklung-frage-antwort-db.com.de

XSD: Was ist der Unterschied zwischen xs: integer und xs: int?

Ich habe angefangen, XSD zu erstellen und in einigen Beispielen für xs:integer Und xs:int Gefunden.

Was ist der Unterschied zwischen xs:integer Und xs:int? Wann sollte ich xs:integer Verwenden? Wann sollte ich xs:int Verwenden?

105
Michael

Der Unterschied ist der folgende: xs:int ist eine vorzeichenbehaftete 32-Bit-Ganzzahl. xs:integer ist ein ganzzahliger unbegrenzter Wert. Weitere Informationen finden Sie unter https://web.archive.org/web/20151117073716/http://www.w3schools.com/schema/schema_dtypes_numeric.asp XJC (Java) generiert beispielsweise Integer für xs:int und BigInteger für xs:integer.

Fazit: benutze xs:int Wenn Sie plattformübergreifend arbeiten möchten und sicher sein möchten, dass Ihre Nummern problemlos weitergegeben werden. Wenn Sie größere Zahlen möchten, verwenden Sie xs:long anstatt xs:integer (es wird zu Long generiert).

102
Michael

Der Typ xs: integer ist eine Einschränkung von xs: decimal, wobei die fractionalDigits-Facette auf Null gesetzt ist und ein lexikalischer Raum den Dezimalpunkt verbietet und Nullen nachgestellt werden, was sonst zulässig wäre. Es gibt keinen Minimal- oder Maximalwert, obwohl Implementierungen, die auf Maschinen endlicher Größe ausgeführt werden, keine willkürlich großen oder kleinen Werte akzeptieren müssen. (Sie müssen Werte mit 16 Dezimalstellen unterstützen.)

Der Typ xs: int ist eine Einschränkung von xs: long, wobei die Facette maxInclusive auf 2147483647 und die Facette minInclusive auf -2147483648 festgelegt ist. (Wie Sie sehen, passt es bequem in ein 32-Bit-Ganzzahlfeld mit Vorzeichen, das sich aus zwei Elementen zusammensetzt. Xs: long passt in ein 64-Bit-Ganzzahlfeld mit Vorzeichen.)

Die übliche Regel lautet: Verwenden Sie diejenige, die mit dem übereinstimmt, was Sie sagen möchten. Wenn die Einschränkung für ein Element oder Attribut lautet, dass sein Wert eine Ganzzahl sein muss, sagt xs: integer dies genau. Wenn die Einschränkung lautet, dass der Wert eine Ganzzahl sein muss, die mit höchstens 32 Bits in Zweierkomplementdarstellung ausgedrückt werden kann, verwenden Sie xs: int. (Eine untergeordnete, aber manchmal wichtige Frage ist, ob Ihre Werkzeugkette besser mit der einen als mit der anderen zusammenarbeitet. Bei Daten, die länger als Ihre Werkzeugkette gültig sind, ist es ratsam, zuerst auf die Daten zu hören; Kette, und was nicht von Interesse sein wird, wenn Sie Ihre Werkzeugkette ändern, gibt es keinen Grund, nicht auf die Werkzeugkette zu hören.)

Ich möchte nur eine Anmerkung zur Pedanterie hinzufügen, die für manche Leute wichtig sein kann: Es ist nicht richtig zu sagen, dass xs: int eine vorzeichenbehaftete 32-Bit-Ganzzahl ist. Diese Form von Wörtern impliziert eine Implementierung im Speicher (oder in Registern usw.) eines binären Digitalcomputers. XML ist zeichenbasiert und würde den maximalen vorzeichenbehafteten 32-Bit-Wert als "2147483647" implementieren (meine Anführungszeichen natürlich), was viel mehr als 32 Bit ist! Was IS true ist, ist, dass xs: int (indirekt) eine Einschränkung von xs: integer ist, bei der die maximal und minimal zulässigen Werte mit den entsprechenden durch die Implementierung auferlegten Grenzwerten einer 32-Bit-Variable übereinstimmen. Bit ganze Zahl mit einem Vorzeichenbit.

6
PeteCahill