- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从DTD迁移到XSD,由于某种原因,过渡是坎bump的。我了解一旦进入<xs:schema>
根标记后如何定义架构,但是事实证明,越过标题和名称空间声明的内容对我来说尤其令人困惑。
我一直在尝试按照W3S精心安排的教程,但即使该教程似乎也需要很多知识。
我想我正在寻找的是国王的英文解释,其中哪些属性起作用,它们在哪里以及为什么:
xmlns
xmlns:xs
xmlns:xsi
targetNamespace
xsi:schemaLocation
在某些情况下,我看到这些元素/属性的不同变体,例如xsi
似乎有两个不同的符号,例如xsi:schemaLocation="..."
和xs:import schemaLocation="..."
。
我想在所有这些细微变化之间,我似乎无法做出每一个的正面或反面。在此先感谢您为这种混乱带来任何清晰度!
最佳答案
您需要了解的第一件事是XML名称空间。如果您有时间浪费,可以阅读the specification。我发现这是与XML相关的更清晰的规范之一。如果您不理解其中所说的所有内容,这并不重要,这是一个很好的基础。但这是一个简短的总结。
XML元素和属性具有名称。当您看到<test att="hello"/>
时,您将看到一个名为“ test”的元素,其中有一个名为“ att”的属性。但这并不是全部故事...
XML是一种语法,允许您混合来自不同标记语言的内容。例如,当使用XSLT将XML文档转换为XHTML页面时,您至少要处理XML中定义的三种标记语言:输入文档的XSLT和XHTML。如果每个人都保留自己的元素/属性名称,并且不允许发生冲突,那么这种混合将变得非常困难。
输入XML名称空间。 XML名称空间定义了一个“球形”,其中的元素和属性名称具有实际的语义。元素“模板”在XSLT名称空间中具有明确定义的含义。元素“ complexType”在XML Schema名称空间中具有定义明确的含义。如果您希望使用自己的XML标记语言来使用,则可以在其他名称空间中使用。
为了确保名称空间是唯一的,您需要提供一些唯一的标识符。该规范基于URI的使用,通常采用HTTP URL的形式。原因很简单:此类URL往往是良好的唯一标识符。但这也是造成混乱的一个非常普遍的原因,因为人们认为URL确实具有含义,或者将在XML处理期间通过网络进行访问。非常清楚,事实并非如此!不需要URL指向任何现有资源。它不会进行任何转换或解析为网络地址。即使两个URL指向完全相同的事物,但它们之间的差异只有一个字符,因此它们被视为不同的命名空间。名称空间标识符只是一个字符串,在此区分大小写。而已。
随着名称空间的引入,XML元素或属性的名称突然由两部分组成:名称空间和本地名称。 <test/>
中的“测试”仅是本地名称。所谓的“完全限定名称”由名称空间和本地名称的某种不可见组合组成。有时使用符号{namespace URI}local-name
,但这仅是约定。
因此,现在我们需要能够在XML文档中使用名称空间。为了声明名称空间,XML具有硬编码机制。它使用特殊字符串xmlns
允许进行名称空间声明。可以通过以下两种方式之一完成此操作:将名称空间绑定到前缀,或将其声明为默认名称空间。
绑定到前缀时,格式如下:xmlns:prefix="namespace URI"
。这是一个XML文档中的示例:
<foo:root xmlns:foo="http://www.foo.com">
<foo:test />
</foo:root>
http://www.foo.com
绑定到前缀
foo
。无论将此前缀放在元素或属性名称的前面,我们都声明它们是该命名空间的一部分。
<bar:root xmlns:bar="http://www.foo.com">
<bar:test />
</bar:root>
xmlns="namespace URI"
声明默认名称空间。您可以抽象地认为这是将名称空间绑定到空前缀。再次是相同的XML文档,但是这次没有前缀:
<root xmlns="http://www.foo.com">
<test />
</root>
<root xmlns="http://www.foo.com">
<so:test xmlns:so="http://stackoverflow.com" />
</root>
root
元素位于
http://www.foo.com
命名空间中,但是
test
元素位于
http://stackoverflow.com
中,因为我们已经绑定了
so
前缀并在
test
上使用了它。
<root xmlns="http://www.foo.com">
<test />
<so:test xmlns:so="http://www.stackoverflow.com" xmlns="http://www.bar.com">
<test />
</so:test>
</root>
root
在命名空间
http://www.foo.com
中。第一个
test
元素也位于该名称空间中,因为我们没有使用前缀,但位于该默认名称空间的范围内。前缀为
test
的第二个
so
元素位于命名空间
http://www.stackoverflow.com
中,因为这是我们将前缀绑定到的内容。
test
元素。它在哪个命名空间中?它没有前缀,因此必须在默认名称空间中。但是,我们在第二个测试元素中更改了默认名称空间!因此,现在最里面的元素属于
http://www.bar.com
命名空间,而不是
http://www.foo.com
。
http://www.w3.org/2001/XMLSchema
。如果将
S
写为小写,那是错误的。开始了解为什么有些人真的讨厌名称空间吗?
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
</xsd:schema>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
</xs:schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
</schema>
xs
或
xsd
。
http://www.w3.org/2001/XMLSchema-instance
。按照惯例,我们倾向于将此名称空间绑定到前缀
xsi
。但是,这不是强制性的。
schemaLocation
和
noNamespaceSchemaLocation
。看一下这个文件:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.foo.com/schema">
</root>
xsi
绑定到名称空间
http://www.w3.org/2001/XMLSchema-instance
。然后,我们在该命名空间中使用了一个属性:
noNamespaceSchemaLocation
。该属性告诉我们模式的位置,以验证文档中那些不在任何特定名称空间中的部分。以下XML文档在语义上完全相同:
<root xmlns:huh="http://www.w3.org/2001/XMLSchema-instance" huh:noNamespaceSchemaLocation="http://www.test.com/schema">
</root>
noNamespaceSchemaLocation
属性是什么?基本上,它告诉我们可以在哪里找到模式。现在与名称空间URI相反,这绝对是可以用来从网络或本地存储中获取内容的东西。根据文档中声明的模式进行验证的XML处理器可能会尝试获取它。
noNamespaceSchemaLocation
。模式定义“目标名称空间”。这是要声明它定义的元素和属性属于哪个名称空间。但是可以省略目标名称空间。在这种情况下,我们有一个没有名称空间的XML文档架构。这样的模式可以用
noNamespaceSchemaLocation
引用。
http://www.w3.org/2001/XMLSchema-instance
名称空间中的另一个属性:
schemaLocation
。该属性可以包含名称空间URI和架构URI对(以空格分隔)。假设我们有一个位于
http://www.foo.com
的名称空间
http://www.myschemas.com/foo-schema
的架构。然后我们可以声明如下:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.foo.com http://www.myschemas.com/foo-schema">
</root>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.foo.com http://www.myschemas.com/foo-schema http://www.bar.com http://www.randomschemas.com/bar-schema">
</root>
http://www.w3.org/2001/XMLSchema-instance
内容用于作为模式实例的XML文档中。名称空间
http://www.w3.org/2001/XMLSchema
是用于定义模式本身的名称空间。
xs:import
和
xs:include
。请注意,由于我们正在谈论W3C XML Schema,因此在这里如何使用
xs
前缀约定。
xmlns
:用于指定默认名称空间。
xmlns:prefix
:用于将名称空间绑定到
prefix
。
http://www.w3.org/2001/XMLSchema
:XML模式的名称空间。按照惯例,通常绑定到前缀
xs
,但这不是强制性的,也不是自动完成的。
http://www.w3.org/2001/XMLSchema-instance
:定义一堆东西的名称空间,可用于声明XML文档如何成为架构实例的详细信息。按照惯例,通常绑定到前缀
xsi
,但这不是强制性的,也不是自动完成的。
targetNamespace
:可以在XML架构(在根元素上)中使用的属性,用于指定这是哪个命名空间的架构定义。
schemaLocation
:由名称空间
http://www.w3.org/2001/XMLSchema-instance
定义的属性之一,用于指示在何处可以为一个或多个名称空间找到一个或多个模式。
关于xml - XML模式头和命名空间配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8229740/
正如标题中所问,我有两个如下结构的 XML 文件 A.xml //here I want to include B.xml
我有一个 xml 文件。根据我的要求,我需要更新空标签,例如我需要更改 to .是否可以像那样更改标签.. 谢谢... 最佳答案 var xmlString=" "; var properStri
我有这样简单的 XML: Song Playing 09:41:18 Frederic Delius Violin Son
在我的工作中,我们有自己的 XML 类来构建 DOM,但我不确定应该如何处理连续的空格? 例如 Hello World 当它被读入 DOM 时,文本节点应该包含 Hello 和 World
我有以下 2 个 xml 文件,我必须通过比较 wd:Task_Name_ID 和 TaskID 的 XML 文件 2。 例如,Main XML File-1 wd:Task_Name_ID 具有以下
我在 Rails 应用程序中有一个 XML View ,需要从另一个文件插入 XML 以进行测试。 我想说“构建器,只需盲目地填充这个字符串,因为它已经是 xml”,但我在文档中看不到这样做的任何内容
我正在重建一些 XML 提要,因此我正在研究何时使用元素以及何时使用带有 XML 的属性。 一些网站说“数据在元素中,元数据在属性中。” 那么,两者有什么区别呢? 让我们以 W3Schools 为例:
在同一个文档中有两个 XML 声明是否是格式正确的 XML? hello 我相信不是,但是我找不到支持我的消息来源。 来自 Extensible Markup Language
我需要在包装器 XML 文档中嵌入任意(语法上有效的)XML 文档。嵌入式文档被视为纯文本,在解析包装文档时不需要可解析。 我知道“CDATA trick”,但如果内部 XML 文档本身包含 CDAT
XML 解析器和 XML 处理器是两个不同的东西吗?他们是两个不同的工作吗? 最佳答案 XML 解析器和 XML 处理器是一样的。它不适用于其他语言。 XML 是通用数据标记语言。解析 XML 文件已
我使用这个 perl 代码从一个文件中读取 XML,然后写入另一个文件(我的完整脚本有添加属性的代码): #!usr/bin/perl -w use strict; use XML::DOM; use
我正在编写一个我了解有限的历史脚本。 对象 A 的类型为 system.xml.xmlelement,我需要将其转换为类型 system.xml.xmldocument 以与对象 B 进行比较(类型
我有以下两个 XML 文件: 文件1 101 102 103 501 502 503
我有以下两个 XML 文件: 文件1 101 102 103 501 502 503
我有一个案例,其中一个 xml 作为输入,另一个 xml 作为输出:我可以选择使用 XSL 和通过 JAXB 进行 Unmarshalling 编码。性能方面,有什么真正的区别吗? 最佳答案 首先,程
我有包含 XML 的 XML,我想使用 JAXB 解析它 qwqweqwezxcasdasd eee 解析器 public static NotificationRequest parse(Strin
xml: mario de2f15d014d40b93578d255e6221fd60 Mario F 23 maria maria
尝试更新 xml 文件数组时出现以下错误。 代码片段: File dir = new File("c:\\XML"); File[] files = dir.listFiles(new Filenam
我怎样才能完成这样的事情: PS /home/nicholas/powershell> PS /home/nicholas/powershell> $date=(Get-Date | ConvertT
我在从 xml 文件中删除节点时遇到一些困难。我发现很多其他人通过各种方式在 powershell 中执行此操作的示例,下面的代码似乎与我见过的许多其他示例相同,但我没有得到所需的行为。 我的目标是将
我是一名优秀的程序员,十分优秀!