假设我有两个这样的规则:
JFalse = element JFalse {
attribute label { xs:string }?,
attribute jump { xs:string }?,
attribute offset { xs:integer }?
}
JGt = element JGt {
attribute label { xs:string }?,
attribute jump { xs:string }?,
attribute offset { xs:integer }?
}
(实际上相当多)
我想做的事情显然是:
JFalseOrJGt = element (JFalse | JGt) {
attribute label { xs:string }?,
attribute jump { xs:string }?,
attribute offset { xs:integer }?
}
(但上述内容无效)。我可以用其他方式来做,这将导致更“压缩”的语法规则吗?
答案 0 :(得分:3)
这是一个选择:
JFalse = element JFalse { jFalseGt }
JGt = element JGt { jFalseGt }
jFalseGt =
attribute label { xs:string }?,
attribute jump { xs:string }?,
attribute offset { xs:integer }?
答案 1 :(得分:0)
语法element (JFalse | JGt)
实际上是用于声明可以具有两个名称之一的元素的正确语法。从紧凑语法转换为XML语法时,trang
会将其转换为:
<element>
<choice>
<name>JFalse</name>
<name>JGt</name>
</choice>
[...]
这正是你所要求的。
您的代码中存在错误,但它与命名元素无关。问题是无法解析所有xs:...
类型。您有两种选择:在文件开头添加datatypes xs = "http://www.w3.org/2001/XMLSchema-datatypes"
以声明xs
前缀,或者编辑每种类型以使用xsd
前缀而不是xs
。默认情况下声明xsd
前缀。