2011-06-17 25 views
1

這是我的previous question的延續問題。如何在不重新定義的情況下重新定義XML模式類型?

我有幾個不同的第三方提供的XML文件和XML模式。由於一些神祕的原因,Oracle要求Oracle specific annotation能夠正確驗證帶有時區信息的xs:dateTime

經過與Google的長時間辯論後,我發現我可以通過使用XML Schema redefine非侵入式添加Oracle所需的註釋(即不需要修改原始XML模式)。由第三方提供

XML Schema是conseptually這樣的:

<?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重新定義僅僅是單Oracle XML數據庫不支持XML Schema功能:

XML模式支持

[...]的Oracle XML DB支持所有XML模式建議書定義的構建體,除了redefines

(和我的實驗支持這一說法。)

什麼選擇,如果有的話,我一定要添加所需xdb:SQLType註釋而不修改原始的XML Schema?

我正在運行Oracle數據庫11g版本11.2.0.4.0。

回答

1

定義一個簡單的XSLT轉換,添加註釋,並在需要從第三方模式生成Oracle模式時運行該轉換。

+0

但當然!爲什麼我沒有意識到自己 - 我是愚蠢的。在過去,我做了很多XSLT(不是用Oracle),所以沒有問題。 – user272735