这个特定的XML文件中的xmlns是什么?

5

我在我的servlet.xml中有一个条目,

xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr

现在,我认为dwr是我们将使用的前缀,就像这样:

<dwr:configuration>
    <dwr:convert type="bean" class="com.abc.bean.MyBean" />
</dwr:configuration>

现在的问题是,如果网站http://www.directwebremoting.org宕机,那么我的应用程序将无法创建bean。
  • 每次beanfactory创建bean时,它是否会访问这个网站?

  • 有没有其他替代方案,可以在不访问他们的网站的情况下使用dwr?


完整标题:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-2.0.xsd 
       http://www.directwebremoting.org/schema/spring-dwr 
       http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd"> 
3个回答

12

这是一个XML命名空间。它用于确保您的XML标识符(标签等)是唯一的 - 您只需将它们包装在命名空间中(就像.NET命名空间一样)。

命名空间只是一个标识符 - 它不是网站上的真实位置!

XML命名空间需要是唯一的 - 这就是为什么许多公司在命名空间中使用他们的*.com域名,因为没有其他人可以(或应该)使用它。

但是你那里的“伪URL”不是物理URL,即使“www.directwebremoting.org”域名关闭或停用,您的代码仍将正常工作!

它只是一个名称 - 除了名称之外没有任何实体 - 在那个“URL”后面没有物理文件存在。

更新: 好的,我们有一个不同的问题:

<beans xmlns="http://www.springframework.org/schema/beans"
       ...........
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-2.0.xsd   
       http://www.directwebremoting.org/schema/spring-dwr 
     ==>  http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd">   <==

这些xsi:schemaLocation条目是罪魁祸首 - 当然,这会导致对该站点的依赖性,因为您通过该站点上的URL直接引用XML模式文件(spring-dwr-2.0.xsd)。您肯定也可以将那些*.xsd文件下载到本地磁盘并从那里使用。XML名称空间本身只是一个名称,但是这个schemaLocation,http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd,显然是一个真正的物理URL,如果该站点关闭,则无法使用。

你的代码仍然可以正常工作,即使 "www.directwebremoting.org" 域名停止或取消。Marc,有一件事情,就在一个小时前,directwebremoting 宕机了,beanfactory 无法创建 bean [尝试了几次],然后网站恢复了,我没有改变我的代码,它开始工作了... 你对此有何看法? - Rakesh Juyal
谢谢!很高兴知道xmlns不是真正的URL,我可以自己编造。干杯! - Chris

8
问题可能与命名空间本身无直接关系,而与此dwr命名空间的模式位置相关。
其中,用作命名空间标识符的URI可以是“任何东西”,并且不被访问以处理该文件(我们使用基于Internet域的命名空间ID作为具有全局唯一命名空间的便捷方式),实际上是访问了模式位置。
为了解决问题,您可以下载模式,在可靠的站点上发布它,并更改引用它的XML文件中的模式位置。
“模式”是DTD,或者更通常地,如此处一样,是XSD文件。在实际操作中,您需要下载以下内容。
  http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd

你可以将spring-dwr-2.0.xsd发布到自己的服务器上(或者如果这些不是在线应用程序,则可以将其放在目录中),并更改XML头中相应的行以读取(其中MyOwnDomain等反映了你实际站点)。
   http://www.directwebremoting.org/schema/spring-dwr 
   http://www.MyOwnDomain.com/SomeDirectory/spring-dwr-2.0.xsd">

以这种方式,即使directwebremoting.org网站不可用,您的XML处理逻辑也不会出现延迟。
注意,有可能涉及到其他模式的XSD,如果是这种情况,您还需要下载这些模式并确保XSD也指向了这些新位置。

谢谢MJV,我将发布完整的代码片段......您所说的Schema是什么意思,是DTD吗? - Rakesh Juyal
哇,谢谢MJV,最后一个问题。 我是否可以将此XSD文件放入我的系统中,并提供路径(例如c:/ blahblah / dwr.xsd)? 如果可能的话,如何实现? - Rakesh Juyal
@Rakesh J:是的,可以使用本地路径而不是基于http的URI,只要应用程序或XML处理器等在运行时能够看到并访问此路径/文件。如果您仅从自己的计算机上运行应用程序,或者如果从具有相同位置的本地驱动器复制了此文件的计算机上运行,则它将特别有效(发布的非在线应用程序的情况)。 - mjv
2
许多库将XSD的副本存储在库jar本身中,并将外部URL映射到jar文件中的文件。因此,您可能不需要下载此XSD文件。(首先进行测试以查看是否发生了这种情况) - wds
1
@wds:没错!(我失去了对XML目的的关注,而是在绝对上做出回应)就XML支持Java库而言,XSD确实经常与jar文件一起分发。 - mjv
@mjv:我忘记了XML的全部目的:D,@wds:我在dwr.jar中有XSD文件,但这是否意味着我不需要指定schemaLocation? - Rakesh Juyal

0

DTD 可以是一种模式(也有 XDR 等)。该模式定义了输入 XML 数据的结构(元素、属性、属性数据类型等)。


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