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

时间:2017-03-28 15:27:15

标签: xml xsd relaxng relaxng-compact

我要将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

1 个答案:

答案 0 :(得分:0)

首先使用-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.