xml - Postgres : using table_to_xmlschema on a table with a Box element

标签 xml postgresql jaxb xsd

因此,我正在尝试提取我的 Postgres 数据库表的 XML 描述,我可以将其与 JAXB 一起使用来处理一些 Java<->DB 通信。问题是,我在我的表中的几个字段中使用 Postgres“box”数据类型,而 Postgres table_to_xmlschema 似乎没有为框生成有效的 XML。

这是我的 SSCCE:

Postgres 表创建:create table BoxTest ( foo Box);

Postgres 调用以生成 XML 架构: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>

问题是 'box' 类型的描述是空的,尽管它是 Postgres 的内置类型。 (特别是,我收到 SAX 解析错误,消息 org.xml.sax.SAXParseException: s4s-elt-must-match.2: 'simpleType' 的内容必须匹配(注释?,(限制 | list | union)). 没有找到足够的元素。) 那么 - 我应该传递/设置一些选项来更正输出吗?如果没有内置选项,Postgres 中是否有一种简单的方法来调整/更正 table_to_xmlschema 的输出?对于任何建议的解决方案 - 我必须做些什么才能使 JAXB 正确处理生成的模式?

如果重要的话,我正在使用 Postgres 9.1 和(我认为)jaxb-impl 2.1.6。

提前致谢!

最佳答案

正如 Craig 指出的那样,当前的 table_to_xmlschema 函数不会递归地分解递归类型。我认为这种情况在不久的将来不会发生变化,而且在稳定版本中肯定不会发生变化,因此您最好的选择是编写自己的函数来查看目录,并递归地为您构建模式。这应该不会太糟糕,但它会有点工作。我实际上正在从事类似的项目,用于在 PostgreSQL 和应用程序之间进行复杂的数据表示,但不使用 XML 作为中介。执行此操作所需的实际查询并不算太糟糕。

您需要做的是创建一个递归查询来查找类型(pg_attribute 和 pg_type 上的 WITH RECURSIVE cte),然后是一个函数,可能是 pl/perl 或类似的,它会为您生成适当的文本.

虽然内置函数对您不起作用。

关于xml - Postgres : using table_to_xmlschema on a table with a Box element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12145854/

相关文章:

sql - 如何插入带有子查询的多行作为值之一?

jaxb - MOXy JAXB : how to exclude elements from marshalling

php - XML 提要数据中的无效字符

java - 如何将集合包装在单个父标签中

css - 获取 xslt 中的最后一项

postgresql - 使用 shp2pgsql 在 postgis 上导入 shapefile 时出错(无法打开 shapefile)?

XML 注释和 Delphi XMl 数据绑定(bind)

ruby-on-rails - 在 Mac 上安装 do_postgres

jaxb - 如何在 Jersey(JAX-WS) 上自定义命名空间前缀

java - JAXB Maven 使用多个情节生成类