将包含对另一个 relax ng 文件的引用的 relaxng 文件转换为 xsd

convert relaxng file that include reference to another relax ng file to xsd

我要将 relaxng 压缩文件转换为 xsd。 所以这里给用户的命令是:

java -jar tang.jar test.rng newtest.xsd 

我的问题如下: 我有几个 rnc 文件,其中一些引用了另一个 rnc 文件。例如我有 test1.rnc 如下:

start= test
test = 
  element test {
  (element ref {xsd:anyURL}?,
   element links {
     element link {
         attribute handle {text},
         attribute id {text}
      }*
   }?,
   element name { text }?,
   external "util/phone.rnc"?
}

在 util 文件夹中我有 phone.rnc 是这样的:

start = phone
phone = 
   element phone {
     element number {
       element phonenumber {text }' 
       element type { text }?
    },
  }

所以我的问题是如何以正确的方式将它们转换为 xsd? 我尝试了 trang 但得到了 test.rnc:29:6: error: sorry, externalRef is not yet supported

首先 运行 使用 -s 选项在架构上生成“简化”版本:

java -jar jing.jar -s -c test.rnc > test-simplified.rnc

然后将该简化模式作为 trang 的输入:

java -jar trang.jar test-simplified.rnc newtest.xsd

如果您的 jing 版本没有提供 -s 选项,那么您需要找到并安装一个新版本,或者直接从源构建一个新版本:

git clone https://github.com/relaxng/jing-trang.git
cd jing-trang
./ant
java -jar build/jing.jar

最后一个命令应该发出如下内容:

Jing version 20151127
usage: java com.thaiopensource.relaxng.util.Driver [-i] [-c] [-s] [-t] [-C catalogFile] [-e encoding] RNGFile XMLFile...
RELAX NG is a schema language for XML
See http://relaxng.org/ for more information.