The `trang` in P5/Utilities/lib/trang.jar is version 20030619. The
`trang` I use on my desktop is version 20131210. The former
incorrectly converts [1] into [2]; the latter correctly converts it
into [3]. (Notice that [2] has "*?", whereas [3] puts in a layer of
parens, so you correctly get "*)?", which is silly but at least
valid.)
Now, I realize that [1] has problems (Why is there an <optional>
child of <zeroOrMore>? Why is there a <choice> of only one value?),
and we may want to address those, too. But in the meantime, is there
any reason not to switch our trang to a newer version?
[1], snippet of RNG
---- ------- -- ---
<attribute name="otherLangs">
(other languages) one or more codes identifying any other languages used in the bibliographic work.
<list>
<zeroOrMore>
<optional>
<choice>
<data type="language"/>
<choice>
<value/>
</choice>
</choice>
</optional>
</zeroOrMore>
</list>
</attribute>
[2], RNG converted to RNC by P5/Utilities/lib/trang.jar (whitespace tweaked)
---- --- --------- -- --- -- -------------------------- ----------- --------
## (other languages) one or more codes identifying any other languages used in the bibliographic work.
attribute otherLangs {
list {
(
xsd:language
|
(##
"")
)?*
}
}
[3], RNG converted to RNG by `trang` on my desktop (whitespace tweaked)
---- --- --------- -- --- -- ------- -- -- ------- ----------- --------
## (other languages) one or more codes identifying any other languages used in the bibliographic work.
attribute otherLangs {
list {
(
(
xsd:language
| (
(##
"")
)?
)*
}
}