如何将XML文件中的允许属性值载入RELAX NG语法文件?
关于RELAX NG从普通XML加载属性值的问题
我有一份RELAX NG语法文件,想从普通XML文件里载入允许的属性值,请问能不能直接加载,还是必须先用XSLT把XML转成RELAX NG文件?我觉得后者不太合理。
相关代码示例:
<element name="language"> <externalRef href="language.rng"/> </element>
不需要先用XSLT把普通XML转成RELAX NG文件,RELAX NG支持直接从普通XML中提取允许的属性值,不过得借助支持XPath扩展的处理器(比如Jing)来实现:
如果你的普通XML是属性值的枚举列表(比如
language.xml里存了所有允许的语言代码),可以用RELAX NG的<data>元素配合XPath直接读取这些值:
假设language.xml内容如下:<allowedLanguages> <lang>en</lang> <lang>zh</lang> <lang>fr</lang> </allowedLanguages>对应的RELAX NG语法可以写成:
<element name="language"> <data type="string"> <param name="pattern"> <xpath>document('language.xml')/allowedLanguages/lang/text()</xpath> </param> </data> </element>你当前用
<externalRef>指向language.rng的写法,是引用RELAX NG语法片段的标准方式,但如果要关联普通XML里的属性值,就需要改用上述XPath扩展的方式,不用提前转换XML文件。
内容的提问来源于stack exchange,提问作者Stefan Jung
相关产品推荐
相关产品推荐

