ฉันได้เริ่มต้นในการสร้าง XSD และพบว่าในสองสามตัวอย่างสำหรับและxs:integer
xs:int
อะไรคือความแตกต่างระหว่างxs:integer
และxs:int
? เมื่อฉันควรใช้xs:integer
? เมื่อฉันควรใช้xs:int
?
ฉันได้เริ่มต้นในการสร้าง XSD และพบว่าในสองสามตัวอย่างสำหรับและxs:integer
xs:int
อะไรคือความแตกต่างระหว่างxs:integer
และxs:int
? เมื่อฉันควรใช้xs:integer
? เมื่อฉันควรใช้xs:int
?
คำตอบ:
ความแตกต่างมีดังต่อไปนี้:
xs:int
เป็นจำนวนเต็ม 32 บิตที่ลงนาม
xs:integer
คือค่าที่ไม่ถูกผูกมัดจำนวนเต็ม ดูรายละเอียดhttps://web.archive.org/web/20151117073716/http://www.w3schools.com/schema/schema_dtypes_numeric.asp
ตัวอย่างเช่น XJC (Java) สร้างInteger
สำหรับxs:int
และสำหรับBigInteger
xs:integer
บรรทัดล่าง: ใช้xs:int
หากคุณต้องการทำงานข้ามแพลตฟอร์มและต้องแน่ใจว่าตัวเลขของคุณจะผ่านไปโดยไม่มีปัญหา หากคุณต้องการตัวเลขที่ใหญ่กว่าให้ใช้xs:long
แทนxs:integer
(มันจะถูกสร้างให้Long
)
ประเภทxs: จำนวนเต็มเป็นข้อ จำกัด ของ xs: decimal โดยที่ส่วนหน้าเศษส่วนจะตั้งค่าเป็นศูนย์และมีช่องว่างคำศัพท์ซึ่งห้ามไม่ให้จุดทศนิยมและศูนย์ต่อท้ายซึ่งจะถูกกฎหมาย ไม่มีค่าต่ำสุดหรือสูงสุดแม้ว่าการนำไปใช้งานที่ทำงานในเครื่องที่มีขนาด จำกัด ไม่จำเป็นต้องสามารถยอมรับค่าขนาดใหญ่หรือน้อยได้ตามอำเภอใจ (จำเป็นต้องรองรับค่าที่มีทศนิยม 16 หลัก)
ประเภทxs: intเป็นข้อ จำกัด ของ xs: long โดยตั้งค่า maxInclusive facet เป็น 2147483647 และ minInclusive facet เป็น -2147483648 (อย่างที่คุณเห็นมันจะพอดีกับฟิลด์จำนวนเต็มลายเซ็น 32 บิตสองส่วนที่เติมเต็มได้อย่างสะดวก xs: ยาวพอดีกับฟิลด์จำนวนเต็มที่ลงชื่อ 64 บิต)
กฎปกติคือใช้ข้อที่ตรงกับสิ่งที่คุณต้องการพูด หากข้อ จำกัด ขององค์ประกอบหรือแอตทริบิวต์คือค่าของมันต้องเป็นจำนวนเต็ม xs: integer จะบอกว่าอย่างรวบรัด หากข้อ จำกัด คือค่าต้องเป็นจำนวนเต็มที่สามารถแสดงได้สูงสุด 32 บิตในการแทนค่าสองส่วนให้ใช้ xs: int (ข้อกังวลรอง แต่บางครั้งก็สำคัญคือห่วงโซ่เครื่องมือของคุณทำงานได้ดีกว่าโซ่เครื่องมืออื่นหรือไม่สำหรับข้อมูลที่จะอยู่ได้นานกว่าห่วงโซ่เครื่องมือของคุณคุณควรฟังข้อมูลก่อนสำหรับข้อมูลที่มีอยู่เพื่อป้อนเครื่องมือเท่านั้น โซ่และจะไม่สนใจหากคุณเปลี่ยนโซ่เครื่องมือก็ไม่มีเหตุผลที่จะไม่ฟังห่วงโซ่เครื่องมือ)
ฉันแค่จะเพิ่มหมายเหตุเกี่ยวกับความอวดรู้ที่อาจมีความสำคัญสำหรับบางคน: การบอกว่า xs: int "เป็น" จำนวนเต็ม 32 บิตที่ลงชื่อนั้นไม่ถูกต้อง คำในรูปแบบนั้นแสดงถึงการนำไปใช้ในหน่วยความจำ (หรือรีจิสเตอร์ ฯลฯ ) ภายในคอมพิวเตอร์ดิจิทัลแบบไบนารี XML เป็นแบบอักขระและจะใช้ค่าสูงสุด 32 บิตที่ลงชื่อเป็น "2147483647" (คำพูดของฉันแน่นอน) ซึ่งมากกว่า 32 บิต! สิ่งที่เป็นจริงคือ xs: int คือ (ทางอ้อม) ข้อ จำกัด ของ xs: จำนวนเต็มซึ่งกำหนดค่าสูงสุดและต่ำสุดที่อนุญาตให้เหมือนกับขีด จำกัด ที่กำหนดในการนำไปใช้งานที่สอดคล้องกันของจำนวนเต็ม 32 บิตพร้อมบิตเครื่องหมาย
, but not
xs: int` หรือxs:long
.