草庐IT

xml - targetNamespace 和 xmlns

coder 2024-06-28 原文

页面w3schools给 以下是模式声明的一种形式。

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.w3schools.com"
           xmlns="http://www.w3schools.com"
           elementFormDefault="qualified">
...
...
</xs:schema>

在这里,

targetNamespace 定义正在访问的 XML 文档的 namespace defined——哪些标签(元素)和哪些属性可以用在“这个”XSD 中定义的 XML 文档中。

xmlns=http://www.w3schools.com/schema/schema_schema.asp
另一方面,

为 XML 文档中的名称定义默认命名空间 -- 那些没有被定义的名字 因此,在“this”XSD(?) 上,解析器首先查找在 targetNamespace 中声明的命名空间。如果它在那里找不到名称,请继续并尝试下一个 xmlns (?)

如果我在上面的模式声明中跳过 targetNamespace 属性,我到底会错过什么?虽然我有 xmlnstargetNamespace 对我来说是多余的,因为它们指的是同一个命名空间。

什么 我不见了吗?

注意:我见过What does "xmlns" in XML mean?在其他一些讨论中。

最佳答案

要了解 targetNamespacexmlns 之间的区别,只需考虑以下内容。

XSD 是一种描述 XML 模式的语言。 任何计算机语言都必须以某种方式表达,即有一些运算符、关键字等。所有这些都称为语法。

XSD(即 W3C)的作者决定不再发明另一种语法, 但要为此使用 XML 本身。所以,XSD 是用 XML 表示的。 XML 是它的载体

本质上,这是一种巧合。为方便起见,XSD 作者选择了它 (而且这种便利确实存在!)。 但是,这不是必要的要求。例如,还有另一种名为 RELAX NG 的 XML 模式语言,它不基于 XML。

但是一旦 XML 成为所有 XSD 文本的载体,您就必须处理特定于 XML 的事情,而 xmlns 就是其中之一。基本上,它为给定 XML 文件的元素分配默认 namespace 。它与恰好在该文件中描述的 XML 模式无关。它只是该 XML 文件的约定(无论它包含什么)。

targetNamespace,恰恰相反,是XSD语言本身的东西。 它指定模式描述的 XML 元素属于哪个命名空间。

targetNamespacexmlns 确实存在一些冗余。 但是没有办法利用(驾驭)它,从而消灭其中之一。试想一下:

XML 将被 XML 解析器解析并转换为其他内容(例如 XML 信息集)。这样的解析器不需要知道任何关于 XSD 的信息,它的输出也不是 XML。因此,所有 XML 特定的东西都将丢失(即 xmlns、 namespace 前缀等)。

然后,该信息集(或其他东西)被传递到重新启动的 XSD 处理器,并且它必须掌握所有必要的信息。因此,targetNamespace 将是唯一告诉它关于该 XML 模式的目标命名空间的东西!

关于xml - targetNamespace 和 xmlns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18475865/

有关xml - targetNamespace 和 xmlns的更多相关文章

  1. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  2. ruby-on-rails - 如何在 Rails 3 中禁用 XML 解析 - 2

    我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::

  3. ruby - 如何使用 Nokogiri::XML::Builder 生成动态标签? - 2

    我正在遍历数组中的一组标签名称,我想使用构建器打印每个标签名称,而不是求助于“我认为:builder=Nokogiri::XML::Builder.newdo|xml|fortagintagsxml.tag!tag,somevalendend会这样做,但它只是创建名称为“tag”的标签,并将标签变量作为元素的文本值。有人可以帮忙吗?这个看起来应该比较简单,我刚刚在搜索引擎上找不到答案。我可能没有以正确的方式提问。 最佳答案 尝试以下操作。如果我没记错的话,我添加了一个根节点,因为Nokogiri需要一个。builder=Nokogi

  4. ruby - 如何让 Nokogiri 解析并返回 XML 文档? - 2

    这是一些奇怪的例子:#!/usr/bin/rubyrequire'rubygems'require'open-uri'require'nokogiri'print"withoutread:",Nokogiri(open('http://weblog.rubyonrails.org/')).class,"\n"print"withread:",Nokogiri(open('http://weblog.rubyonrails.org/').read).class,"\n"运行此返回:withoutread:Nokogiri::XML::Documentwithread:Nokogiri::

  5. ruby - 模式加载时出现 Nokogiri::XML::Schema SyntaxError - 2

    我正在尝试加载SAML协议(protocol)架构(具体来说:https://www.oasis-open.org/committees/download.php/3407/oasis-sstc-saml-schema-protocol-1.1.xsd),但在执行此操作之后:schema=Nokogiri::XML::Schema(File.read('saml11_schema.xsd'))我得到这个输出:Nokogiri::XML::SyntaxErrorException:Element'{http://www.w3.org/2001/XMLSchema}element',att

  6. ruby-on-rails - 来自 cucumber 的 HTTP POST XML 内容 - 2

    我正在尝试通过POST将XML内容发送到一个简单的Rails项目中的Controller(“解析”)方法(“索引”)。它不是RESTful,因为我的模型名称不同,比如“汽车”。我在有效的功能测试中有以下内容:deftest_index...data_file_path=File.dirname(__FILE__)+'/../../app/views/layouts/index.xml.erb'message=ERB.new(File.read(data_file_path))xml_result=message.result(binding)doc=REXML::Document.ne

  7. ruby - 如何使用 XPath 和 Nokogiri 获取 XML 节点的内容 - 2

    我有这样的代码:@doc=Nokogiri::HTML(open(url)@doc.xpath(query).eachdo|html|putshtml#howgetcontentofanodeend我如何获取节点的内容而不是像这样: 最佳答案 这是READMEfile中的概要示例为Nokogiri展示了一种使用CSS、XPath或混合的方法:require'nokogiri'require'open-uri'#GetaNokogiri::HTML:Documentforthepagewe’reinterestedin...doc=N

  8. ruby - 使用 Ruby 向网络服务器发送 XML 请求 - 2

    恐怕我没有太多通过网络服务器发布文档(例如XML)的经验,所以如果我对HTTP的理解不足,我深表歉意。我在127.0.0.1上的ruby​​应用程序中设置了一个基本的MongrelWeb服务器端口2000.(服务器)。我在同一台计算机上运行一个单独的Ruby应用程序。(客户)。我需要客户端向服务器发送XML文档。我曾尝试使用Net::HTTP来执行此操作,但我找不到一个明确的示例来告诉我应该做什么。我试过了,但遇到了错误。我已将请求分解,使其尽可能基本:http=Net::HTTP.new("127.0.0.1",2000)http.post('file','query=foo')#x

  9. ruby - 如何使用 Sinatra 提供 XML 文档? - 2

    我有一些XML文档,我想从Sinatra服务器获取这些文档。我做了一些搜索,但找不到任何具体的东西。我确实找到了构建器gem,但我不想从头开始构建文档。我试着做这样的事情get'/'xml='Myname90'bodyxmlend但这会在它周围添加HTML标签。这可能是我所缺少的非常基本的东西。你能给我指出正确的方向吗? 最佳答案 这对于Sinatra来说非常简单:get'/'docontent_type'text/xml'"Luis99"end在获取“/”时,响应将是XML"Luis99"使用正确的content_type。

  10. ruby - 尝试使用 nokogiri 获取 xml 文件中 cdata 标签内的内容 - 2

    我已经看到了几件事,但到目前为止似乎没有任何效果。我正在使用nokogirionrails3ruby​​1.9.2通过url解析xml。xml的片段如下所示:我正在尝试解析它以获取与NewsLineText关联的文本r=node.at_xpath('.//newslinetext')ifnode.at_xpath('.//newslinetext')s=node.at_xpath('.//newslinetext').textifnode.at_xpath('.//newslinetext')t=node.at_xpath('.//newslinetext').contentifnod

随机推荐