如何在不重新定义的情况下重新定义XML Schema类型?

发布于 2024-11-15 22:20:15 字数 1882 浏览 3 评论 0原文

这是我的上一个问题的延续问题。

我有几个不同的第三方提供的 XML 文件和 XML 架构。由于一些神秘的原因,Oracle 需要 Oracle 特定注释 能够正确验证 xs:dateTime 与时区信息。

经过与 Google 的长时间辩论后,我发现我可以非侵入性地添加 Oracle 所需的注释(即无需修改原始 XML 架构)通过使用 XML 架构重新定义

第三方提供的 XML 模式在概念上是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:simpleType name="ISODateTime">
    <xs:restriction base="xs:dateTime"/>
  </xs:simpleType>

</xs:schema>

我可以通过重新定义的方式引入注释:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:xdb="http://xmlns.oracle.com/xdb">

  <xs:redefine schemaLocation="standard-schema.xsd">

    <xs:simpleType name="ISODateTime">
      <xs:restriction base="xs:dateTime" xdb:SQLType="TIMESTAMP WITH TIME ZONE"/>
    </xs:simpleType>

  </xs:redefine>

</xs:schema>

不幸的是,根据 Oracle 文档 重新定义是唯一的 XML 架构Oracle XML 数据库不支持的功能:

XML 架构支持

[...]Oracle XML DB 支持 XML 模式建议定义的所有构造,除了重新定义

(我的实验支持这个说法。)

我必须在不修改原始 XML 架构的情况下添加所需的 xdb:SQLType 注释,有哪些选项(如果有)?

我正在运行 Oracle Database 11g 版本 11.2.0.4.0。

This is a continuation question to my previous question.

I have XML files and XML Schema provided by several different third parties. For some mysterious reasons Oracle requires an Oracle specific annotation to be able to validate xs:dateTime with timezone information correctly.

After lengthy debates with Google I've found out that I could add Oracle required annotation non-intrusively (i.e without modifying the original XML Schema) by using XML Schema redefine.

XML Schema provided by third party is conseptually like this:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:simpleType name="ISODateTime">
    <xs:restriction base="xs:dateTime"/>
  </xs:simpleType>

</xs:schema>

And I could bring in the annotation this way with redefine:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:xdb="http://xmlns.oracle.com/xdb">

  <xs:redefine schemaLocation="standard-schema.xsd">

    <xs:simpleType name="ISODateTime">
      <xs:restriction base="xs:dateTime" xdb:SQLType="TIMESTAMP WITH TIME ZONE"/>
    </xs:simpleType>

  </xs:redefine>

</xs:schema>

Unfortunately according to Oracle documentation redefine is the single only XML Schema feature not supported by Oracle XML Database:

XML Schema Support

[...] Oracle XML DB supports all of the constructs defined by the XML Schema Recommendation, except for redefines.

(And my experiments support this statement.)

What options, if any, do I have to add the required xdb:SQLType annotation without modifying the original XML Schema ?

I'm running Oracle Database 11g Release 11.2.0.4.0.

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

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

发布评论

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

评论(1

请持续率性 2024-11-22 22:20:15

定义一个添加注释的简单 XSLT 转换,并在需要从第三方模式生成 Oracle 模式时运行它。

Define a simple XSLT transformation that adds the annotation, and run it whenever you need to generate the Oracle schema from the third-party schema.

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