gpt4 book ai didi

ruby - XInclude 包含元素的命名空间

转载 作者:数据小太阳 更新时间:2023-10-29 08:50:11 26 4
gpt4 key购买 nike

考虑这两个 XML 文档:

a.xml

<a xmlns="foo" xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="b.xml" parse="xml" />
</a>

b.xml

<b>Hi Mom!</b>

<b> 应该是什么命名空间?元素在包含之后foo还是没有命名空间?


使用 Nokogiri使用 XInclude 处理加载第一个文档会产生一个文本表示,这意味着 <b>在父 namespace 中,但检查元素声称 <b>没有命名空间:

require 'nokogiri'

d = Nokogiri.XML(IO.read('a.xml'),&:xinclude)
puts d
#=> <?xml version="1.0"?>
#=> <a xmlns="foo" xmlns:xi="http://www.w3.org/2001/XInclude">
#=> <b>Hi Mom!</b>
#=> </a>

p d.root.namespace
#=> #<Nokogiri::XML::Namespace:0x3fd40c517de8 href="foo">

p d.root.elements.first.namespace
#=> nil

最佳答案

What namespace should the <b> element be in after inclusion, foo or no namespace?

没有命名空间。 XInclude 在信息集级别运行并保留包含内容的信息集属性。 infoset specification明确指出

An information set corresponding to a real document will necessarily be consistent in various ways; for example the [in-scope namespaces] property of an element will be consistent with the [namespace attributes] properties of the element and its ancestors. This may not be true of an information set constructed by other means; in such a case there will be no XML document corresponding to the information set, and to serialize it will require resolution of the inconsistencies (for example, by outputting namespace declarations that correspond to the namespaces in scope).

(我的粗体)- <b>元素不在 namespace 中,但其范围内 namespace 信息集属性不再与解析 XInclude 产生的“虚拟”文档中的 namespace 声明一致。

关于ruby - XInclude 包含元素的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14542030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com