XML 模式导入 -vs- 绑定到前缀的命名空间

2024-06-25

我是 XML 模式的新手,并且遇到了将许多前缀绑定到中的各种名称空间的模式文档。xsd:schema根元素并导入a subset这样的模式。在 XML 模式文档的其余部分中,他们愉快地使用了绑定在xsd:schema元素(无论是否导入)。

那么什么是import命名空间的含义是“仅”将该命名空间绑定到前缀吗?

来自明确的 XML 模式 https://rads.stackoverflow.com/amzn/click/com/0132886723我读过的书(第 66 页):

导入用于告诉处理器您将引用其他命名空间的组件

根据我的理解,这也是绑定的作用,那么有什么区别呢?

具体例子

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:vr="http://www.ivoa.net/xml/VOResource/v1.0"
           xmlns:ssap="http://www.ivoa.net/xml/SSA/v1.0"
           xmlns:vm="http://www.ivoa.net/xml/VOMetadata/v0.1"
           targetNamespace="http://www.ivoa.net/xml/SSA/v1.0"
           elementFormDefault="unqualified" 
           attributeFormDefault="unqualified"
           version="1.0pr2">


   <xs:import namespace="http://www.ivoa.net/xml/VOResource/v1.0"
         schemaLocation="http://www.ivoa.net/xml/VOResource/v1.0"/>

   <!--  ... rest of the schema document follows -->

命名空间http://www.ivoa.net/xml/VOResource/v1.0在上面的模式文档中都绑定到vr前缀并导入。其他命名空间仅绑定到某些前缀并且不被导入。文档的其余部分使用了来自两者的组件vr(装订和进口)和ssa(绑定但未导入)前缀。有什么不同?


嗯,您需要了解 XML 基础知识才能理解所有这些内容......

真实的 XML 名称(即元素或属性的名称...或某些 XSD 组件的名称, 像complexType或group)实际上不是您在特定XML文件(或XML模式)中看到的。你会看到这样的东西:

xs:schema

您认为这是 元素的名称。 但实际上,该元素(XML 解析器/处理器使用它进行操作)的真实名称是这样的:

{http://www.w3.org/2001/XMLSchema}schema

大括号里的东西表示名称空间,这是全名的有效部分。

需要命名空间是因为,例如,这里提到的 元素是 W3C 提供和维护的 XSD 语言的一部分。但是假设其他人也有某种模式(例如某个大型组织的工作模式),并且想要用自己的 元素来描述这些模式。更重要的是,他们最终可能会在同一个 XML 文件中同时拥有两个 元素(即他们自己的元素和 W3C 元素)。 XML 解析器如何区分它们?

在这里,命名空间会有所帮助。它们允许用其他东西扩展本地 XML 名称(在 XML 中使用),一些足够长的额外字符串以确保它们在地球上的任何 XML 文件中始终相同。那些长串被称为命名空间 URI这就是您在上面的大括号中看到的内容。

但是您是否乐意让您的 XML 文件填充如下名称:

{http://www.w3.org/2001/XMLSchema}schema

你将无法在那里阅读任何内容,对吗?

XML 提供了一种解决该问题的方法。 您无需将整个名称空间 URI 与每个 XML 名称一起编写,只需为其声明一些快捷方式即可。那个快捷方式叫做命名空间前缀并且使用特殊的绑定属性来声明它xmlns:... e.g.:

xmlns:xs="http://www.w3.org/2001/XMLSchema"

Here xs是该前缀(代表名称空间)。现在,你可以在任何地方简单地写:

xs:schema

名称空间前缀本身是本地事物(对于 XML 文件而言是本地的)。 您同样可以使用任何其他字符串,例如'xsd':

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

然后写

xsd:schema

根 XML 元素通常包含给定 XML 中使用的所有名称空间绑定的声明(但这不是必需的;绑定对于声明它的 XML 元素的内容有效)。

当然,某些 XML 文件(和 XSD)可能包含以后从未使用过的命名空间绑定。这不是一个错误。但这是一种不整洁的工作(与程序中未使用的变量相同)。


现在,什么是import元素为?它只是将一些外部 XML 模式导入到您的模式中。导入意味着现在您可以在自己的声明中使用该导入模式中定义的任何全局组件。

但请记住,您始终使用完整的 XML 名称(即本地名称 + 命名空间 URI),因为模式处理器会这样做。导入的外部模式描述了一些不同名称空间中的元素(组件)。如果要引用这些组件,则需要告诉 XML 处理器它们的命名空间,这是通过绑定到 XML 中导入的命名空间 URI 的某个命名空间前缀来完成的。

The import元素有两个属性:

<xs:import namespace="http://www.ivoa.net/xml/VOResource/v1.0"
           schemaLocation="http://www.ivoa.net/xml/VOResource/v1.0"/>

The namespace属性指定您导入的内容的命名空间 URI。这importelement 实际上应该只导入不同的命名空间(不是您用架构描述的命名空间的一部分;为此还有另一个 XSD 元素:include)。那么,你用import叫做导入命名空间.

The schemaLocation属性告诉模式解析器导入的模式 (XSD) 文件的物理位置。这是可选属性。某些 XML 模式软件可能保存描述某些重要名称空间(特别是由 W3C 维护的名称空间)的 XML 模式的本地副本。因此,仅命名空间 URI 可能就足以暗示他们应该在何处获取相应的 XSD 文件本身。


简而言之:

  • 命名空间绑定意味着什么?它允许您为命名空间 URI(这是一个长字符串)引入一个短(命名空间前缀)。通过将名称空间前缀添加到本地名称,您可以告诉 XML 处理器该 XML 名称属于哪个名称空间。这里的“命名空间”是一个抽象概念。它只是扩展任何 XML 名称,使它们绝对唯一。但是,命名空间绑定并不假设存在任何模式以及为该命名空间定义的任何组件!

  • XSD 是什么import元呢?它导入在某个命名空间(在某个 XML 模式中)定义的所有全局组件,并使它们在您的模式中可用。这与特定前缀与 URI 的绑定无关!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XML 模式导入 -vs- 绑定到前缀的命名空间 的相关文章

随机推荐

  • 如何自动调整下拉内容的宽度以匹配

    元素的宽度?

    基本上我有两个 p 元素 当您将鼠标悬停在其中一个上时 p p 元素 出现下拉内容 问题是 我想要下拉菜单content 下拉菜单本身 的宽度match的宽度 p p 元素 这些图片可能应该描述我在说什么 https i stack img
  • 如何创建一个没有清单文件和主类的jar?

    我有大约 40 到 50 个类文件 但没有一个有 main 方法或清单文件 现在我必须创建一个JAR从这些文件中提取文件 我该怎么做呢 jar cf myjarfile jar class 将创建一个 jar 文件 其清单包含有关 jar
  • Python 中的列表是否有等效的 str.split ?

    如果我有一个字符串 我可以用空格将其分割str split method hello world split returns hello world 如果我有一个像这样的列表 hey 1 None 2 0 string another st
  • ASP.net Identity 2.1 获取所有具有角色的用户

    如何获取用户列表 包括每个用户的角色名称 我的应用程序具有 MVC 项目的默认表 我可以使用 Identity 2 1 检索所有用户 如下所示 Model public class GetVendorViewModel public ILi
  • 例如,为什么有人应该在 C/C++ 中使用三重指针?

    我正在寻找示例或解释为什么有人应该 或不应该 在 C C 中使用三重指针 有没有出现三重指针的例子 我特别寻找使用三重指针的源代码 我想到的最好的例子是稀疏的多层表 例如 实现 Unicode 字符属性的一种方法可能是 prop type
  • 从终端以调试模式运行 jar

    我正在使用 intellij idea IDE 并且尝试在调试模式下从终端运行我的 jar 文件 并在代码中的几个位置设置断点 我正在使用的命令是 java jar myTestApp jar file myfile txt users m
  • 如何检测我的应用程序是否在虚拟机中运行?

    如何检测 NET 或 Win32 我的应用程序是否在虚拟机中运行 这就是我使用的 using var searcher new System Management ManagementObjectSearcher Select from W
  • 在 React 应用程序中导入 CSS

    In the 创建反应应用程序 https github com facebook create react app文档显示 App css 已导入到 App js 中 还有一种方法可以从组件加载编译后的 css 文件吗 我的视图组件 im
  • Zend Framework 2:Composer\Autoload\includeFile 很慢

    根据 New Relic 交易追踪器 有时Composer Autoload includeFile加载我的项目大约需要 318 毫秒 我已经从作曲家那里转储了一个类映射 但仍然没有什么区别 composer json需要满足以下条件 re
  • 找不到 PySide SVG 图像格式?

    我正在使用 Eclipse 的 PyDev 插件与 Qt 集成 我安装了 PySide 但在使用 SVG 图像格式时遇到问题 我知道当我运行我的应用程序时 格式位于C Python27 Lib site packages PySide pl
  • File::Find 是否有更干净的方法来返回所需文件的列表?

    我找到了背后的设计选择File Find find https metacpan org module File 3a 3aFind有点令人惊讶 我遇到过的例子都表明find用在 void 上下文中 The 文档 https metacpa
  • Airflow 不会将日志写入 s3

    我尝试了不同的方法来配置 Airflow 1 9 以将日志写入 s3 但它只是忽略它 我发现很多人在这样做后阅读日志时遇到问题 但我的问题是日志仍然是本地的 我可以毫无问题地读取它们 但它们不在指定的 s3 存储桶中 我尝试的是首先写入ai
  • Firebug 显示应用到我的标签的类两次

    When I m trying to check my CSS applied to I see a class is applied twice from a same class like the picture what s wron
  • 如何使用 Dart 从浏览器发送多部分 HTTP 请求

    我必须将图像从浏览器上传到我的 RESTful Web API 使用 Python Eve 实现 从文档来看 它需要发送多部分 数据表单请求 http python eve org features html file storage ht
  • Wireshark:在 GUI 中按多播过滤

    使用 Wireshark GUI 中的 Wireshark 过滤器 字段 我想过滤捕获结果 以便仅显示多播数据包 我见过这个帖子 https stackoverflow com questions 9728285 sending multi
  • 如何在 C# 中从 MySQL 检索tinyint 数据类型?

    因此 在 C 中 每当我从 MSSQL 数据库检索 tinyint 时 我都会使用以下转换 int byte reader MyField 然而 这种转换似乎在 MySQL 中不起作用 我尝试过的 byte reader MyField 并
  • SSIS在脚本任务中显示变量值

    我正在做一些测试 将完整的结果集从执行 SQL 任务输出到 Foreach 循环中 如下所示 我只想将变量值输出到消息框 但它似乎不起作用 public void Main try TODO Add your code here strin
  • 如何在 Oz 中创建列表?

    我正在尝试创建一个列表Oz http en wikipedia org wiki Oz programming language使用以下代码 local Loop10 Xs in proc Loop10 I Xs List append X
  • php简单登录脚本白页

    你好 我正在尝试将 PDO 植入我的登录脚本中 以使其更安全地免受 sql 注入的影响 但我得到一个白页 我认为这是因为我试图计算行数以查看用户是否是真实的 Here we inculde the function page include
  • XML 模式导入 -vs- 绑定到前缀的命名空间

    我是 XML 模式的新手 并且遇到了将许多前缀绑定到中的各种名称空间的模式文档 xsd schema根元素并导入a subset这样的模式 在 XML 模式文档的其余部分中 他们愉快地使用了绑定在xsd schema元素 无论是否导入 那么