Co-Occurrence Constraints in RELAX NG


วิธีกำหนดเงื่อนไข &ldquoปรากฏร่วม” ใน RELAX NG: ถ้าค่าของโหนดนี้ เป็นแบบนี้ ตัวข้อมูลที่เหลือจะต้องเป็นแบบนี้ … เช่น ในอิลิเมนต์ person ถ้าเกิดแอตทริบิวต์ type มีค่าเป็น “author” ตัวอิลิเมนต์ person จะต้องมีอิลิเมนต์ลูก ชื่อ dead ด้วยนะ; แต่ถ้าแอตทริบิวต์ type มีค่าเป็น “character” ตัวอิลิเมนต์ลูกที่ต้องมี ก็จะเปลี่ยนไป

เงื่อนไขลักษณะนี้ ทำด้วย DTD ไม่ได้เลย. ส่วน W3C XML Schema นี่ พอทำได้บ้าง แต่ยุ่งยาก

คำถามก็คือ แล้วทำไมไม่สร้างอิลิเมนต์แยกกันไปเลยล่ะ ? -_-” อย่างในตัวอย่างข้างบน ก็ทำเป็นสองอิลิเมนต์ไปเลย ก็น่าจะได้รึเปล่า ? หรือว่าทำแบบนี้แล้ว มันทำให้ดูทั่ว ๆ ไป (generic) มากขึ้น ?

อันนี้ก็ต้องแล้วแต่คนออกแบบ schema แล้วล่ะ ว่าจะเอาไง. ตัว schema language (อย่าง Relax NG) นั้น เปิดช่องให้ทำได้, แต่จะทำไม่ทำก็แล้วแต่.


Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.