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

时间:2011-06-17 11:04:17

标签: xml oracle xsd oracle11g redefine

这是我previous question的延续问题。

我有几个不同的第三方提供的XML文件和XML Schema。出于某些神秘原因,Oracle要求Oracle specific annotation能够正确验证xs:dateTime时区信息。

经过与Google的长时间辩论后,我发现我可以使用XML Schema redefine非侵入性地添加Oracle所需的注释(即不修改原始的XML Schema)。

第三方提供的XML Schema概念性地如下:

<?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 documentation,redefine是Oracle XML数据库不支持的唯一XML Schema功能:

  

XML架构支持

     

[...] Oracle XML DB支持XML Schema Recommendation定义的所有构造,除了redefines

(我的实验支持这一陈述。)

如果有任何选项,我必须添加所需的xdb:SQLType注释而不修改原始XML架构吗?

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

1 个答案:

答案 0 :(得分:1)

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