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{ pattern = "(100|[1-9]?[0-9])[%]" } )

Style = element font {
  attribute weight { Percent.data }, # เอามาใช้ตรงนี้
  attribute color { "green" | "greener" }, # ถ้าแค่นี้ ไม่ต้องใช้ pattern ก็ได้
  text
}

ตัวอิลิเมนต์ font ก็จะเอาไปใช้ได้ประมาณนี้:

<font color="greener" weight="80%">bact'</font> read more

Co-Occurrence Constraints in RELAX NG

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