jjzjj

java - Spring Framework XML 配置元数据和命名空间

coder 2024-06-27 原文

我一直在研究使用 Spring 的元数据信息的配置,我意识到我需要深入研究 XML。我对 XML 文件中的引用方案有疑问。到目前为止,我所知道的(我猜...)如下:

  1. 我读到 namespace 的使用对于分离很有用 标记 XML 文档中的元素,从而避免在 标记 ( source )。
  2. 使用 URI 命名命名空间被视为一种标准,而不是 意味着将在网址中搜索文件,例如 示例(source - 在“命名空间名称指向什么?”中)。
  3. 命名空间的声明是使用保留的 属性,“xmlns”。
  4. 命名空间使用前缀(也称为别名),但使用 标记各种子元素不需要前缀(source - 在“美化”中)。

当我遇到以下标记时,事情开始变得困惑:

<element xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/1999/XSL/Transform
                             http://www.w3.org/1999/XSL/Transform.xsd
                             http://www.w3.org/1999/xhtml
                             http://www.w3.org/1999/xhtml.xsd">
</element>

根据许多来源(包括 this ),引用 XSD 模式是使用(在我看来)命名空间,如前所述,不指向任何东西,没有文件或任何东西。

据说在session 2.6命名空间识别和使用词汇表,让我明白名称“schemaLocation”是一个保留字,并与所选前缀“xsi”一起使用。我想知道一些与此处呈现的事实有关的事情:

  • “schemaLocation”的名称是什么,放在前缀之后 用过的?那叫“属性”吗?如果是这样,它是什么的属性?
  • Spring 以不同的方式识别某些命名空间,执行它的 在它上面有自己的逻辑,或者命名空间是否真的有可能 指向地址中的物理文件?
  • “xsi: schemaLocation”的使用无需声明 使用前缀为“xsi”的命名空间?

例如:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:util="http://www.springframework.org/schema/util"
   xsi:schemaLocation="..... http://www.springframework.org/schema/util 
   http://www.springframework.org/schema/util/spring-util-4.0.xsd">

这段代码摘自《Spring Framework 入门 - 第二版》,第 3 章,第 112 页。

  • 会不会是作者遗漏了声明“xmlns: xsi ...”?如果他没有遗漏,那么这段代码就错了?或者是这个 没必要写?

编辑

我希望我的问题得到答复,其中包括以下内容的定义、差异和适用性:

  • QNames。
  • 扩展名称。
  • 全局属性。

谢谢。

最佳答案

1) 给“schemaLocation”的名称是什么,放在使用的前缀之后?那叫“属性”吗?如果是这样,它是什么的属性? See here

In an instance document, the attribute xsi:schemaLocation provides hints from the author to a processor regarding the location of schema documents.

The schemaLocation attribute value consists of one or more pairs of URI references, separated by white space. The first member of each pair is a namespace name, and the second member of the pair is a hint describing where to find an appropriate schema document for that namespace. The presence of these hints does not require the processor to obtain or use the cited schema documents, and the processor is free to use other schemas obtained by any suitable means, or to use no schema at all.

2) Spring 以不同方式识别某些命名空间,在其之上执行自己的逻辑,或者命名空间是否真的指向地址中的物理文件?

Spring 使用

META-INF/spring.schemas

  1. 将 schemalocation 重新映射 (*) 到库中的 xsd
  2. (摘要)这个库只支持重新映射的版本
  3. 名为“spring.schemas”的属性文件包含 XML 模式位置的映射

META-INF/spring.handlers

  1. 为特定命名空间提供命名空间处理程序类
  2. 命名空间处理程序类提供解析器逻辑来解析 spring-batch bean,如作业、步骤等。

3) “xsi: schemaLocation”的使用可以在没有声明使用前缀为“xsi”的命名空间的情况下完成吗?

前缀是强制性的(XML标准)

关于java - Spring Framework XML 配置元数据和命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25368805/

有关java - Spring Framework XML 配置元数据和命名空间的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  3. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  4. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  5. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  6. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  7. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  8. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  9. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  10. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

随机推荐