ข้ามไปยังเนื้อหา

<thai-score>

รากของเอกสาร ThaiMusicXML ทุกฉบับ

แอตทริบิวต์ จำเป็น ประเภท คำอธิบาย
version ใช่ สตริง เวอร์ชัน Schema ThaiMusicXML เช่น "1.0"
xmlns ใช่ anyURI เนมสเปซ ThaiMusicXML https://thaimusicxml.anan.ovh/ns/1

ตามลำดับ:

  1. <header> - ข้อมูลเมตาโน้ต
  2. <structure> - โครงสร้างโน้ต
  3. <ensemble> - รายการเครื่องดนตรี
  4. <part-data> - หนึ่งหรือมากกว่า หนึ่งต่อเครื่องดนตรี
  5. องค์ประกอบส่วนขยายเนมสเปซภายนอกศูนย์รายการขึ้นไป - สถานะของเครื่องมือบุคคลที่สาม ดู ส่วนขยาย ด้านล่าง
<?xml version="1.0" encoding="UTF-8"?>
<thai-score xmlns="https://thaimusicxml.anan.ovh/ns/1" version="1.0">
<header>...</header>
<structure>...</structure>
<ensemble>...</ensemble>
<part-data part="P1">...</part-data>
</thai-score>

เอกสาร ThaiMusicXML ทุกฉบับประกาศเนมสเปซ https://thaimusicxml.anan.ovh/ns/1 ที่ราก เครื่องมือจับคู่องค์ประกอบตามเนมสเปซและชื่อ แยก <note> ของ ThaiMusicXML จาก MusicXML และให้โน้ต ThaiMusicXML อยู่ในเอกสาร XML ขนาดใหญ่ได้โดยไม่ชน

URI ระบุคำศัพท์ ไม่มีสิ่งใดบังคับให้ดึง

<thai-score> รับองค์ประกอบเนมสเปซภายนอกได้หลัง <part-data> ตัวสุดท้าย เป็นช่องทางให้เครื่องมือของบุคคลที่สาม เช่น โปรแกรมแก้ไข แนบสถานะของตัวเองไปกับโน้ตได้โดยไม่ต้องแยกฟอร์แมตออกไปเอง แต่ละองค์ประกอบต้องประกาศเนมสเปซของตัวเองทุกระดับความลึก ไม่ใช่แค่ตัวบนสุด ทั้งเนมสเปซของ ThaiMusicXML เองและการไม่มีเนมสเปซเลยถูกกันออกตลอดทั้งส่วนขยาย ไม่มีสิ่งใดภายในปลอมเป็นข้อมูลดั้งเดิมได้ การประกาศเนมสเปซเริ่มต้นเพียงครั้งเดียวที่รากของส่วนขยายครอบคลุมองค์ประกอบที่ไม่มีคำนำหน้าทั้งหมดใต้มัน

<thai-score xmlns="https://thaimusicxml.anan.ovh/ns/1" version="1.0">
<header>...</header>
<structure>...</structure>
<ensemble>...</ensemble>
<part-data part="P1">...</part-data>
<nts:editor xmlns:nts="https://example.com/nts/1" xmlns="https://example.com/nts/1" version="1">
<cursor note="n1"/>
</nts:editor>
</thai-score>

แอตทริบิวต์ id ที่มีใน <line>, <measure>, <note>, <rest>, และ <group> มีไว้เพื่อการนี้: จุดยึดที่แน่นอนให้ส่วนขยายชี้ไปหา เช่น note="n1" ข้างต้น โดย ThaiMusicXML เองไม่จำเป็นต้องรู้ว่าอะไรชี้มาที่มัน ดูส่วนขยายเนมสเปซภายนอกในหน้าการสอดคล้องมาตรฐานสำหรับกฎแบบเต็ม

นามสกุล .txml
ประเภทสื่อ application/vnd.thaimusicxml+xml
การเข้ารหัส UTF-8

UTF-8 สำคัญกว่ารูปแบบอื่นเพราะค่า pitch และชื่อเครื่องดนตรีเขียนด้วยอักษรไทยเป็นประจำ

URI ของเนมสเปซ ไม่ใช่ version

URI ระบุขอบเขตความเข้ากันได้ไม่ใช่รุ่น เปลี่ยนเมื่อเอกสารไม่สามารถอ่านได้ด้วยตัวประมวลผลที่เขียนสำหรับรุ่นก่อน และคงอยู่เมื่อไม่เปลี่ยน URI ที่ตัวประมวลผลรู้จักแล้วจึงเป็นสัญญาว่าอ่านสิ่งที่ตามมาได้

ขอบเขตตกที่ใดตาม semantic versioning ในช่วง 0.x ทุกรุ่นอาจทำลายรุ่นก่อน แต่ละรุ่นจึงมี URI เฉพาะ: https://thaimusicxml.anan.ovh/ns/0.1 แล้ว https://thaimusicxml.anan.ovh/ns/0.2 จาก 1.0 URI มีเฉพาะเลขรุ่นหลัก https://thaimusicxml.anan.ovh/ns/1 ใช้กับ 1.0, 1.1 และ 1.2 เหมือนกัน เฉพาะ 2.0 สร้างใหม่ การเพิ่มองค์ประกอบทางเลือกในรุ่นรองจึงไม่กระทบเครื่องมือที่มีอยู่

version แยกแยะรุ่นภายในขอบเขต ตัวประมวลผลที่เขียนสำหรับ 1.0 ที่พบ version="1.3" รู้ว่าอาจเจอองค์ประกอบทางเลือกที่เพิ่มหลังเขียน จึงแจ้งเตือนและทำงานต่อแทนหยุด ในช่วง 0.x ไม่บอกสิ่งที่เนมสเปซไม่ได้บอกไว้แล้ว เอกสารในเนมสเปซ 0.1 ที่มี version="0.2" จึงอ่านเป็น 0.1 และแจ้งเตือน เนมสเปซเป็นส่วนที่สัญญาว่าจะเปลี่ยน

  • ต้องเป็นรากเดียวของเอกสาร
  • แอตทริบิวต์ version บันทึกว่าเอกสารเขียนตามรุ่น ThaiMusicXML ใด เนมสเปซเป็นสิ่งที่ตัวประมวลผลใช้ตัดสิน
  • <thai-score> ต้องเป็นรากเดียว พร้อม version และเนมสเปซ ThaiMusicXML
  • ตัวประมวลผลต้องปฏิเสธเอกสารที่รากอยู่ในเนมสเปซที่ไม่รองรับ
  • ตัวตรวจสอบควรแจ้งเตือนเมื่อ version ไม่ตรงกับเนมสเปซที่ปรากฏ และต้องไม่ปฏิเสธเพียงเพราะเหตุนั้น
  • องค์ประกอบส่วนขยายเนมสเปซภายนอกหลัง <part-data> ตัวสุดท้ายต้องประกาศเนมสเปซจริง ไม่ใช่ของ ThaiMusicXML เองและไม่ใช่การไม่มีเนมสเปซเลย
  • ตัวประมวลผลต้องรักษาองค์ประกอบส่วนขยายที่ตนไม่รู้จักไว้โดยไม่เปลี่ยนแปลงตลอด round trip และต้องไม่ปล่อยให้ส่วนขยายกระทบวิธีที่เอกสารแสดงผลหรือเล่น