L2/08-094 Date/Time: Fri Feb 1 11:30:59 CST 2008 Name: John Cowan Report Type: Feedback on UAX #42 I suggest the following improvements to the RELAX NG in UAX #42 (draft 2): 1) In 4.4.5, it is possible to specify that the mirrored property is false and that the bmg property has a non-null value. The following schema fragment exploits the inter-attribute dependency capabilities of RNG to make that impossible: mirrored-yes = attribute Bidi_M { "yes" } mirrored-no = attribute Bidi_M { "no" } bmg-maybe = attribute bmg {"" | single-code-point } bmg-no = attribute bmg {""} code-point-properties &= (mirrored-yes | bmg-maybe | (mirrored-yes & bmg-maybe) | mirrored-no | (mirrored-no & bmg-no))? 2) In 4.4.7, a similar treatment expresses the interdependency of the nt and nv properties: nt-yes = attribute nt { "De" | "Di" | "Nu" } nt-no = attribute nt { "None" } nv-maybe = attribute nv ("" | xsd:string { pattern = "-?[0-9]+(/[0-9]+)?" }} nv-no = attribute nv { "" } code-point-properties &= (nt-yes | nv-maybe | (nt-yes & nv-maybe) | nt-no | (nt-no & nv-no))? 3) In 4.4.8, same story for jt and jg: jt-yes = attribute jt { "D" | "L" | "R" } jt-no = attribute jt { "U" | "C" | "T" } jg-maybe = attribute jg { # fill this in } jg-no = attribute jg { "No_Joining_Group" } code-point-properties &= (jt-yes | jg-maybe | (jt-yes & jg-maybe) | jt-no | (jt-no & jg-no))? 4) In 4.4.12, the possible scripts are enumerated. I believe this to be a mistake, as new scripts are constantly being added. Instead, the definition should simply require ISO 19542 conformance: code-point-properties &= attribute sc { xs:string { pattern = "[A-Z][a-z]{3}"}} 5) In 4.4.13, both iso and isc are used as attribute names. Pick one.