Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 任意顺序的任意/两个元素的松弛压缩模式_Xml_Relaxng - Fatal编程技术网

Xml 任意顺序的任意/两个元素的松弛压缩模式

Xml 任意顺序的任意/两个元素的松弛压缩模式,xml,relaxng,Xml,Relaxng,我正在为XML文件编写一个RelaxNG Compact模式,元素的内容必须正好是以下内容之一: 在英语中,或允许一次,或两次都允许,但其中一个必须出现 是否有比下面更好(更简洁)的包装定义 grammar { start = element wrap { WrapElement } WrapElement = ( element a {empty}, element b {empty}? )|( element a

我正在为XML文件编写一个RelaxNG Compact模式,
元素的内容必须正好是以下内容之一:


在英语中,
允许一次,或两次都允许,但其中一个必须出现

是否有比下面更好(更简洁)的
包装定义

grammar {
  start = 
    element wrap { WrapElement }

  WrapElement =
    (
      element a {empty}, 
      element b {empty}?
    )|(
      element a {empty},
      element b {empty}?
    )
}

以下是接近。它当然更简洁,它匹配所有允许的变化,并且不允许元素多次出现。但是,它也错误地允许空的
元素:

grammar {
  start = 
    element wrap { WrapElement }

  WrapElement =
    element a {empty}?
    & element b {empty}?
}

以下是我的作品:

grammar {
  start = 
    element wrap { (a|b)|(a&b) }

  a = element a {empty}
  b = element b {empty}
}