xsd - 在 XML Schema 中为不同的命名空间声明一个属性

标签 xsd xml-namespaces

我一直在使用混合不同现有格式和一些自定义元素和属性的 XML 格式,我认为我应该为这些自定义位编写一个模式。

我做的一件事是在现有格式的元素上使用自定义属性,如下所示:

<ns1:something attA="b" attB="a" ns2:extraAtt="c"/>

我知道这样做是允许的,但我想不出如何在 XML Schema 中声明我的“extraAtt”,或者更糟的是,在 DTD 中。

我试过阅读 specification ,但就我而言,它也可以用中文写成。大多数教程只讨论“名称”、“类型”和“使用”,例如this onethat one .

最佳答案

每个模式文档为一个命名空间定义组件(模式的一部分)。所以要定义你的属性 ns2:extraAtt你想要一个像这样的架构文档:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://example.com/my-ns2">
  <xs:attribute name="extraAtt" type="xs:anySimpleType"/>
</xs:schema>

元素 ns1:something 的声明需要以某种方式允许此属性,或者使用属性引用( <xs:attribute ref="ns2:extraAtt"/> )或使用属性通配符( <xs:anyAttribute namespace="http://example.com/my-ns2"/> 或类似的)。

对规范的易读性感到抱歉;这是一个很长的故事,但本质上,工作组的一些成员并不认为像你这样的人存在(“除了实现者,没有人会阅读规范,只要他们不提示它就足够可读”——至少,这就是他们在一些实现者确实提示之前说,大声而痛苦地;然后他们只是转移了话题)。

关于xsd - 在 XML Schema 中为不同的命名空间声明一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18598558/

相关文章:

java - 没有时区信息的 XMLBeans 日期

xml - 从 XSD 生成 XML

c# WPF AlternateContent 在命名空间中不存在 [...]

java - Dom4j selectNodes(arg) 不给出节点列表

include - 部分模式包含在多个子模式中

c++ - 在 xerces C++ 中使用内存模式验证 xml 文件

java - 需要 XSD 基本帮助——模式中的命名空间?

xslt - 我想使用 xslt 在 xml 文件中添加 "xmlns"属性

php - 如何找出 PHP DOM 中元素的 namespace ?

c# - 如何将 xmlns 属性添加到现有的 xml 文档