我可以创建一个 XSD 架构来为所有复杂类型放置一个属性吗?

2023-12-06

我想创建一个 XSD 来定义一个属性,该属性可以放置在其他架构中的元素或不属于任何架构中的元素上。例如,架构看起来像这样:

<xs:schema id="MySchema"
    targetNamespace="http://tempuri.org/MySchema"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/MySchema"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:attribute name="myAttribute" />
</xs:schema>

该文档可能如下所示:

<someElement xmlns="http://tempuri.org/OtherSchema" xmlns:m="http://tempuri.org/MySchema">
  <someOtherElement someAttribute="value" m:myAttribute="value2" />
</someElement>

此示例的“OtherSchema”如下所示:

<xs:schema id="OtherSchema"
    targetNamespace="http://tempuri.org/OtherSchema"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/OtherSchema"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:element name="someElement">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" name="someOtherElement">
          <xs:complexType>
            <xs:attribute name="someAttribute" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

可以从以下位置下载完整的示例,包括执行验证的 C# 控制台应用程序http://dl.getdropbox.com/u/407740/SchemaTest.zip。我的目标是在无需修改“OtherSchema”的情况下进行验证。这可能吗?


我必须添加一个包装器,将两个不同的模式导入到一个中(因为 xmllint 只接受单个 xml 模式):

<xs:schema id="Wrapper" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import schemaLocation="MySchema.xsd" namespace="http://tempuri.org/MySchema"/>
  <xs:import schemaLocation="OtherSchema.xsd" namespace="http://tempuri.org/OtherSchema"/>
</xs:schema>

我可以获得类似问题的唯一方法是编辑 OtherSchema,xsd (问题不允许),因此附加一个属性通配符(在现有通配符之后):

 <xs:attribute name="someAttribute" />
 <xs:anyAttribute namespace="##other"/>

我不是 XML Schema 的专家,所以不能说“这是不可能的”,但对我来说这似乎是不可能的。

您的提案的一个问题是您没有具体说明where新属性应该出现。通常,如果您声明一个属性(或一个复杂元素、模型组等),您可以自由地引用或不引用它。如果您不明确引用它,则它没有任何作用。因此,我认为您的提案将被视为已声明但未引用的属性。

你真正想要的是一种说法“将此属性添加到every现有的复杂类型” - 但你没有这么说。而且,不幸的是,似乎没有办法说这个。(甚至没有办法说“将此属性添加到这个特定的现有复杂类型” -您必须将其包含在原始定义中,或者根本不包含。)

一种方法是partly这样做是为了<redefine>输入另一个模式 - 我将在第二个答案中添加它。

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

我可以创建一个 XSD 架构来为所有复杂类型放置一个属性吗? 的相关文章

随机推荐

  • Celery / Django 单个任务运行多次

    我面临一个问题 我将任务放入队列中并且它正在运行多次 从 celery 日志中我可以看到同一个工作人员正在运行该任务 2014 06 06 15 12 20 731 INFO MainProcess Received task input
  • 使用spring进行Java注解扫描

    我有几个类需要用名称进行注释 因此我将注释定义为 Retention RetentionPolicy RUNTIME Target ElementType TYPE public interface JsonUnmarshallable p
  • Ruby ** 双星运算符

    Ruby 中的 运算符是什么 代码片段 1 5 gt 1 43 67 gt 2769405330765659902380925787724104201956901039505346829415349981622358603023818638
  • IE 对 HTML5 文档类型属性选择器的支持

    w3school 关于属性选择器的章节指出 仅当指定 DOCTYPE 时 IE7 和 IE8 才支持属性选择器 IE7 和 IE8 无法识别 HTML5 文档类型 对吗 那么 这是否意味着如果我使用 HTML5 文档类型 IE7 和 IE8
  • Selenium 与 Python-unittest - 测试返回进程已完成,退出代码为 0,并且不执行任何操作

    有人可以帮助我理解为什么执行以下代码 但没有执行任何操作吗 返回代码为 0 但浏览器未打开或未执行任何操作 值得一提的是 setUp 方法已在其他模块中以相同的方式配置 并且工作正常 请查看最后的回复 import unittest fro
  • 如何翻译 Blazor 组件和 App.razor 中的字符串?

    我想本地化共享组件的字符串 例如 NavMenu razor 或 App razor 页面 我成功地按照中所述翻译了我的页面中的内容 NET Core 通用指令还有更多特定 Blazor 文档 创建具有正确名称的资源文件 例如 PageNa
  • 如何在 thymeleaf 中包含 message.properties

    I am using spring boot with thymeleaf This is my project structure 这是我的应用程序开始课程 EnableAutoConfiguration Configuration Co
  • 查询 documentdb 中的子字段

    例如 我有以下用于收集 交付的文档 doc docid 15 deliverynum 123 text txxxxxx date 2019 07 18T12 37 58Z docid 16 deliverynum 456 text txxx
  • 如何在sqlite中使用填充连接字符串

    我的 sqlite 表中有三列 Column1 Column2 Column3 A 1 1 A 1 2 A 12 2 C 13 2 B 11 2 我需要选择Column1 Column2 Column3 e g A 01 0001 我想用一
  • 在 C 中按值传递结构而不是传递指针有什么缺点吗?

    在 C 中按值传递结构而不是传递指针有什么缺点吗 如果结构体很大 显然会存在复制大量数据的性能问题 但对于较小的结构体 它基本上应该与将多个值传递给函数相同 当用作返回值时 它可能会更有趣 C 函数只有单个返回值 但您通常需要多个返回值 因
  • 如何在不重新加载页面的情况下从数据库获取数据?

    当用户提出任何显示在分区顶部的问题时 我想制作一个常见问题解答面板 而无需重新加载页面 因为我认为我必须每隔几秒就与数据库建立连接 现在的问题是如何在不重新加载页面的情况下建立连接以及如何显示新问题 您有两个选择 Ajax 它允许您使用 J
  • 如何应用 CSS 进行打印?

    我正在尝试在我的页面之一中打印 div 但打印时无法应用 css 在样式标签内写入 media print 不起作用 我应该怎么办 使用以下
  • Java 泛型和 Groovy 重载

    我使用 Groovy JUnit 和 EasyMock 为 Java 应用程序编写单元测试 EasyMock中有几个重载方法capture 已弃用 并附有注释 由于强制擦除更困难 无法在 Java 7 中编译 这些方法将类型的对象作为参数C
  • data.table 聚合操作中的进度条

    ddply has a progress要在运行时获得进度条 是否有等效的data table in R 是的 您可以使用任何您想要的进度状态 library data table dt data table a 1 4 b c a b d
  • 一页上有两个分析

    如何在一个网站上放置两个 GA 代码 我有这个代码 function i s o g r a m i GoogleAnalyticsObject r i r i r function i r q i r q push arguments i
  • 将 NSDictionary 键排序为 NSDate

    我正在使用最新的 SDK 和 XCode 4 2 开发 iOS 4 应用程序 我有一个NSMutableDictionary where keys are NSDate and values are NSMutableString 当我填满
  • 如何在Android上设置语音识别的语言?

    我一直在android中研究语音识别API 发现当语言设置更改时 语音结果会发生变化 有没有办法以编程方式设置它 或者是否打算在语音语言设置屏幕上午餐 或者还有什么 笔记 我尝试额外使用这个意图 intent putExtra Recogn
  • c++ 如何转发声明一个继承自另一个类的类?

    我创建了一个具有一堆继承类 父类 的类 以便我可以使用多态性 但问题是有两个类相互调用 因此 我需要转发声明它们 并且我可以转发声明一个类 但是当我转发声明继承的类时 编译器表示它无法将指针从一个类更改为另一个类 有没有办法对继承的类进行前
  • 根据表单中的多个列表框过滤查询

    我有一个包含两个表的 Access 数据库 联系人 和 国家 地区 其中每个都包含多个字段 我有一个查询 Filter 它将这两个表组合在一起 我想创建一个表单 其中的列表框数量与查询中的字段数量一样多 用户可以打开表单并从每个列表框中选择
  • 我可以创建一个 XSD 架构来为所有复杂类型放置一个属性吗?

    我想创建一个 XSD 来定义一个属性 该属性可以放置在其他架构中的元素或不属于任何架构中的元素上 例如 架构看起来像这样