-
Regular expression in Relax NG Compact syntax
ถ้าอยากกำหนดรูปแบบข้อมูลที่จะอนุญาตให้ใส่ใน XML ของเรา ลงไปใน schema language เพื่อที่จะได้ตรวจได้โดย XML validator ใน Relax NG นี่ เราไปยืม pattern จาก W3C XML Schema datatypes มาใช้ได้ โดยตัว pattern นี่ มันก็คือ regular expression น่ะแหละ ใช้งี้: xsd:string { pattern = “regular_expression_here” } เช่น ถ้าเราเขียน: # ยืม datatypes ของ W3C XML Schema มาใช้ datatypes xsd = “http://www.w3.org/2001/XMLSchema-datatypes” # กำหนดรูปแบบข้อมูลเอง Percent.data = ( xsd:string{…
-
Co-Occurrence Constraints in RELAX NG
วิธีกำหนดเงื่อนไข &ldquoปรากฏร่วม” ใน RELAX NG: ถ้าค่าของโหนดนี้ เป็นแบบนี้ ตัวข้อมูลที่เหลือจะต้องเป็นแบบนี้ … เช่น ในอิลิเมนต์ person ถ้าเกิดแอตทริบิวต์ type มีค่าเป็น “author” ตัวอิลิเมนต์ person จะต้องมีอิลิเมนต์ลูก ชื่อ dead ด้วยนะ; แต่ถ้าแอตทริบิวต์ type มีค่าเป็น “character” ตัวอิลิเมนต์ลูกที่ต้องมี ก็จะเปลี่ยนไป เงื่อนไขลักษณะนี้ ทำด้วย DTD ไม่ได้เลย. ส่วน W3C XML Schema นี่ พอทำได้บ้าง แต่ยุ่งยาก คำถามก็คือ แล้วทำไมไม่สร้างอิลิเมนต์แยกกันไปเลยล่ะ ? -_-” อย่างในตัวอย่างข้างบน ก็ทำเป็นสองอิลิเมนต์ไปเลย ก็น่าจะได้รึเปล่า ? หรือว่าทำแบบนี้แล้ว มันทำให้ดูทั่ว ๆ ไป (generic) มากขึ้น ? อันนี้ก็ต้องแล้วแต่คนออกแบบ…