Sql 将映射的XPath表达式转换为包含关系数据的XML 出身背景
使用XML和XSL创建网站。PostgreSQL数据库的结构表示所需的XML文档。PostgreSQL提供了许多与XML相关的函数,如下所示: 这是一个不同于从XML进入数据库的问题,有很多解决方案 更新:澄清一下,这个问题不需要使用给定URL中列出的XML函数。它涉及一个通用解决方案,该解决方案基于将数据库表和连接条件映射到XPath表达式来创建XML文档 更新:为了进一步澄清,XQuery用于搜索XML文档,就像它们是XPath和SQL之间的交叉数据库一样。我有一个数据库,我想生成一个XML文档。XML文档的结构应该以映射到表和列的XPath表达式的形式给出,而不是以XML函数的形式给出 问题 我想解决的问题是使用PostgreSQL将表行中的值映射到XPath值。下面的例子说明了这个问题 实例 XPath映射就是这个问题的核心,它类似于:Sql 将映射的XPath表达式转换为包含关系数据的XML 出身背景,sql,xml,postgresql,xpath,map,Sql,Xml,Postgresql,Xpath,Map,使用XML和XSL创建网站。PostgreSQL数据库的结构表示所需的XML文档。PostgreSQL提供了许多与XML相关的函数,如下所示: 这是一个不同于从XML进入数据库的问题,有很多解决方案 更新:澄清一下,这个问题不需要使用给定URL中列出的XML函数。它涉及一个通用解决方案,该解决方案基于将数据库表和连接条件映射到XPath表达式来创建XML文档 更新:为了进一步澄清,XQuery用于搜索XML文档,就像它们是XPath和SQL之间的交叉数据库一样。我有一个数据库,我想生成一个XML
root > people
person > person
person.first_name -> name/first
person.last_name -> name/last
person.age -> [@age]
account.person_id => person.person_id
account > person/account
account.number -> [@id]
person_id | first_name | last_name | age
123 | Peter | Parker | 18
456 | James | Jameson | 42
account_id | person_id | number
1 | 123 | 123456789
PERSON表可能类似于:
root > people
person > person
person.first_name -> name/first
person.last_name -> name/last
person.age -> [@age]
account.person_id => person.person_id
account > person/account
account.number -> [@id]
person_id | first_name | last_name | age
123 | Peter | Parker | 18
456 | James | Jameson | 42
account_id | person_id | number
1 | 123 | 123456789
账户表可能类似于:
root > people
person > person
person.first_name -> name/first
person.last_name -> name/last
person.age -> [@age]
account.person_id => person.person_id
account > person/account
account.number -> [@id]
person_id | first_name | last_name | age
123 | Peter | Parker | 18
456 | James | Jameson | 42
account_id | person_id | number
1 | 123 | 123456789
使用XPath映射查询数据库将生成以下XML文档:
<people>
<person age="18">
<name>
<first>Peter</first>
<last>Parker</last>
</name>
<account id="123456789" />
</person>
<person age="42">
<name>
<first>James</first>
<last>Jameson</last>
</name>
</person>
</people>
在本例中,jamesjameson没有帐户,因此最终文档中不包括相应的XML元素帐户
这是一个难题,不需要完全解决。一个能够处理80%映射到简单XML元素和属性的简单表的解决方案就足够了
问题
如何创建一个SQL语句或过程,该语句或过程根据数据库表的映射和一些到XPath或类似对象的连接操作返回XML文档以执行数据转换
是否有任何技术或开源实现已经执行了这些任务
谢谢大家!
相关链接
文章和白皮书
商业软件
它应该使用xml生成函数
postgres=# select xmlelement(name "people", xmlagg(xmlelement(name "person", xmlattributes(age), xmlforest(first_name as first, last_name as last)))) from person;
xmlelement
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
<people><person age="18"><first>Peter</first><last>Parker</last></person><person age="42"><first>James</first><last>Jameson</last></person></people>
一排
还有其他使用的可能性
postgres=# select table_to_xml('person', true, false, '');
table_to_xml
────────────────────────────────────────────────────────────────
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">↵
↵
<row> ↵
<first_name>Peter</first_name> ↵
<last_name>Parker</last_name> ↵
<age>18</age> ↵
</row> ↵
↵
<row> ↵
<first_name>James</first_name> ↵
<last_name>Jameson</last_name> ↵
<age>42</age> ↵
</row> ↵
↵
</person> ↵
(1 row)
下一步应该是将xslt转换为您的目标格式——这里将有更好的xslt专家,应该会有所帮助