1

そこで、Java<->DB 通信を処理するために JAXB で使用できる Postgres データベース テーブルの XML 記述を抽出しようとしています。問題は、テーブルのいくつかのフィールドに Postgres の「ボックス」データ型を使用していて、Postgres の table_to_xmlschema がボックスに有効な XML を生成していないように見えることです。

これが私のSSCCEです:

Postgres テーブルの作成:create table BoxTest ( foo Box);

XML スキーマを生成するための Postgres 呼び出し:select * from table_to_xmlschema('BoxTest', true, true, 'SomeName');

結果のスキーマ:

<xsd:schema
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     targetNamespace="SomeName"
     elementFormDefault="qualified">
 <xsd:simpleType name="UDT.User.pg_catalog.box">
 </xsd:simpleType>
 <xsd:complexType name="RowType.User.public.boxtest">
   <xsd:sequence>
     <xsd:element name="foo" type="UDT.User.pg_catalog.box" nillable="true"></xsd:element>
   </xsd:sequence>
 </xsd:complexType>
 <xsd:element name="boxtest" type="RowType.User.public.boxtest"/>
</xsd:schema>

問題は、Postgres の組み込みタイプであるにもかかわらず、'box' タイプの説明が空であることです。(特に、SAX 解析エラーが発生し、メッセージが表示されますorg.xml.sax.SAXParseException: s4s-elt-must-match.2: The content of 'simpleType' must match (annotation?, (restriction | list | union)). Not enough elements were found.) それで、その出力を修正するために渡す/設定する必要があるオプションはありますか? 組み込みオプションがない場合、Postgres 内で table_to_xmlschema の出力を微調整/修正する簡単な方法はありますか? そして、提案されたソリューションでは、結果のスキーマで JAXB を正しく動作させるために何をする必要がありますか?

問題があれば、私は Postgres 9.1 と (おそらく) jaxb-impl 2.1.6 を使用しています。

前もって感謝します!

4

1 に答える 1

0

Craig が指摘しているように、現在のtable_to_xmlschema関数は再帰的な型を再帰的に分解しません。近い将来、これが変更されることはないと思いますし、確かに安定版でもそうではないので、カタログを見て再帰的にスキーマを構築する独自の関数を作成するのが最善の方法です。これはそれほど悪くはないはずですが、少し手間がかかります。XML を仲介として使用していませんが、実際には PostgreSQL とアプリケーションの間の複雑なデータ プレゼンテーションのための同様のプロジェクトに取り組んでいます。これを行うために必要な実際のクエリはそれほど悪くありません。

あなたがする必要があるのは、タイプを検索するための再帰クエリを作成し (pg_attribute と pg_type の WITH RECURSIVE cte)、適切なテキストを生成する関数 (おそらく pl/perl など) を作成することです。

ただし、組み込み関数は機能しません。

于 2013-04-07T07:46:54.990 に答える