XML默认命名空间问题

5

假设我有以下XML模式文件和以下XML文档文件。我有两个问题:

  1. 由于XML模式文件中没有指定目标命名空间,Information元素位于哪个命名空间中?

  2. 在XML文档文件中使用Information时,它属于哪个命名空间?请注意,在这种情况下,我不从XML文档文件引用XML模式文件。

XML模式文件:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="Information" type="xs:string"/>
</xs:schema>

XML文档文件:

<?xml version="1.0" encoding="utf-8"?>
<Information>Hello XML</Information>

thanks in advance, George

2个回答

10

信息元素将不包含在任何命名空间中。若要将其放入默认命名空间中,您必须在标记中指定该命名空间。

<Information xmlns="http://www.mydefaultnamespace.com">

从一篇Oracle文章中得知:

无命名空间

当没有默认命名空间时,就不存在命名空间。默认命名空间是通过使用xmlns显式声明的命名空间。如果根本没有使用xmlns显式声明{default namespace},则说元素在{default namespace}中是不正确的。在这种情况下,我们称元素在{no namespace}中。当已经声明的{default namespace}被取消声明时,也适用于{no namespace}。

这里有一个相当全面的命名空间资源:

XML Namespaces FAQ


@dommer,我认为在我的情况下,XML模式文件中的信息元素未定义在任何命名空间中。另一个问题是,我们如何在XML文档文件中引用这样的元素(不在任何命名空间中)? - George2
我不确定你是否可以明确地引用它。你要引用什么?没有命名空间。我认为你必须分配一个默认的命名空间才能明确地引用任何东西 - 但我愿意接受证明我错误的事实。 - dommer
@null,我非常感兴趣如何在XML模式和XML文档文件中定义默认命名空间。你能展示一些简单的样例吗? - George2
@dommer,你能帮我解决这个问题吗:http://stackoverflow.com/questions/26699855/why-web-xml-does-not-work-when-i-do-not-use-a-global-namespace?虽然它说的是Java,但我认为对于任何XML文件都是有效的。 - Koray Tugay

1

你为什么要为没有目标定义模式?这没有意义。


@leppie,1. 你的意思是如果模式文件中没有定义目标命名空间,那么在XML文档中就无法引用这些已定义的模式元素吗?2. 如果我们在XML模式文件中不指定目标命名空间,那么定义的元素将在默认命名空间或无命名空间中定义? - George2
嗨乔治 :) 1. 是的。2. 没什么,只是在冗长的括号中的无意义文本。这取决于你用什么来读取XML。XML没有模式是无用的。但是,你可以预定义给定XML验证阅读器中的默认模式,这样就不需要定义默认命名空间了。不指定命名空间在词法上几乎就像C#中的匿名类一样。 - leppie
酷回答,leppie!我对以下内容很感兴趣--“你可以在给定的XML验证读取器中预定义默认模式,这样就不需要使用xmlns在XML文档本身中定义默认命名空间。”你是指在验证读取器中除了在XML文档本身中使用xmlns之外,还有其他方法来定义默认模式吗?如果是的话,能否请你给我展示一个例子?2. “不指定命名空间几乎就像C#中的匿名类”--你是指不指定目标命名空间(继续) - George2
你是指在XML文档中不定义命名空间,还是指XML模式文件中没有定义命名空间? - George2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接