是否可以使用 xsd:redefine 来扩展而不是限制?

发布于 2024-12-09 04:24:22 字数 961 浏览 0 评论 0原文

我有一个 XML 架构 (XSD),我想用它来验证 XML 数据,但有关 XML 数据的一个非常具体的事情不符合要求。我想生成一个备用 XSD 以用于成功验证 XML。更具体地说,我想扩展类型的定义以允许原始 XSD 不允许的值。修改原来的XSD是不切实际的。

以下是原始 XSD 的原始定义:

<simpleType name="fooType">
  <restriction base="token">
    <pattern value="[a-z]+"/>
    <enumeration value="foo"/>
  </restriction>
</simpleType>

我希望使用此类型定义的实体也允许使用值“123”。所以,我尝试了这个:

<redefine schemaLocation="original.xsd">
  <simpleType name="fooType">
    <extension base="orig:fooType">
      <enumeration value="123"/>
    </extension>
  </simpleType>
</redefine>

我承认我只是即兴发挥,我不知道 XSD。但在阅读标准之前,我想知道这是否可能?我能找到的所有(我的意思是所有)xsd:redefine 示例都是限制可能的值,而不是扩展它们。

如果不使用 xsd:redefine,那么我该怎么做?

编辑:相关但无信息:扩展 XSD 文件

I have an XML Schema (XSD) which I want to use to validate XML data, but one very specific thing about the XML data is not compliant. I want to generate an alternate XSD to use to successfully validate the XML. More specifically, I want to extend the definition of a type to allow a value not allowed by the original XSD. It is not practical to modify the original XSD.

Here's the original definition from the original XSD:

<simpleType name="fooType">
  <restriction base="token">
    <pattern value="[a-z]+"/>
    <enumeration value="foo"/>
  </restriction>
</simpleType>

I want to allow the value "123" too for the entity which uses this type definition. So, I tried this:

<redefine schemaLocation="original.xsd">
  <simpleType name="fooType">
    <extension base="orig:fooType">
      <enumeration value="123"/>
    </extension>
  </simpleType>
</redefine>

I admit I'm just winging it, I don't know XSD. But before I read the standard, I want to know if this is even possible? All (and I mean all) examples I could find of xsd:redefine have been to restrict the possible values, not extend them.

And if not using xsd:redefine, then how can I do this?

Edit: Related, but uninformative: Extending XSD files

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

简单 2024-12-16 04:24:22

simpleType 的内容只能是限制、列表或联合。由于在重新定义类型时,您必须将要重新定义的类型引用为基类型,因此您会陷入困境;限制是您可以拥有的唯一限制。

为了完整起见,有一种技术允许开放枚举,涉及使用联合内容,但是,由于您无法触及原始模式,因此它在您的情况下不起作用。

还有一个观察:拥有一个模式和一个枚举,有点“无用”;在你的情况下,你可以拥有的唯一值是“foo”。

The content of a simpleType can only be a restriction, list or union. Since when redefining a type you have to reference as a base type the one you're redefining, you are then stuck; restriction is the only one you can have.

For completeness, there is one technique to allow for open enumerations, that involves the use of union content, but, since you cannot touch the original schema, it won't work in your case.

One more observation: Having a pattern and an enumeration, is kind of "useless"; in your case the only value you can have is "foo".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文