【问题标题】:How to add DOCTYPE via XQuery如何通过 XQuery 添加 DOCTYPE
【发布时间】:2016-09-09 08:48:20
【问题描述】:

我想用 XQuery 3.1 生成以下 DOCTYPE:

<!DOCTYPE rdf:RDF [
    <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
    <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
    <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>

这是一个特殊的元素,对吧?所以我不能用普通的元素构造函数添加它们。

【问题讨论】:

  • 它根本不是一个元素,据我所知,XQuery 标准处理器不必明确支持它。它们必须出现在 XML 声明之后和根元素之前,因此您可能必须显式创建一个文档节点,并将 DOCTYPE 声明作为根元素之前的文本节点。
  • @chrisis 为什么不与我们分享您的游历?文本节点一
  • 什么是 XQuery 引擎?
  • @har07 最新的 BaseX

标签: xquery


【解决方案1】:

没有办法在 XDM 树模型中表示 DOCTYPE 声明,所以这很棘手。也没有等效的 XSLT 解决方法,例如禁用输出转义或字符映射,它们提供了调整树序列化方式的方法,以防止 &amp;lt; 正常转义为 &amp;lt;

我认为我首选的方法是对查询的序列化输出进行后处理。例如,您可以生成包含«» 代替&amp;lt;&gt; 的DOCTYPE 声明(作为字符串),然后在后处理阶段使用文本将人字形转换为尖括号基于 sed 的工具。

【讨论】:

    【解决方案2】:

    这样的事情可能会奏效。

        '<!DOCTYPE rdf:RDF [
        <{!ENTITY owl "http://www.w3.org/2002/07/owl#" >
        <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
        <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
        <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
    ]>',
    <rootnode>{let $fred := <bert></bert> return $fred}</rootnode>
    

    是的,这是有效的 XQuery,它给出了

     <!DOCTYPE rdf:RDF [
        <{!ENTITY owl "http://www.w3.org/2002/07/owl#" >
        <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
        <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
        <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
    ]>
    <rootnode>
      <bert/>
    </rootnode>
    

    我自己没有使用这种方法,我喜欢我的 RDF 作为 Turtle :)。 很可能有一种不那么丑陋的方式。

    【讨论】:

    • 该查询的结果很可能通过转义尖括号来序列化,例如&amp;lt;DOCTYPE rdf:RDF [ &amp;lt;!ENTITY ....
    • 很可能会被序列化,会被序列化,这个不行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2011-06-11
    • 1970-01-01
    • 2011-02-26
    • 2019-03-23
    相关资源
    最近更新 更多