gv输入文件如何在linux计算,如何解析来自postgres的XML输出作为Linux中的basex输入...

设置

数据来源:http://www.wien.gv.at/statistik/ogd/vie_101.csv 研究问题(RQ): RQ1:有多少人在每次人口普查总住在维也纳? RQ2:每个人口普查在维也纳各区居住多少人?

制备

为了回答该RQ DB被选择了postgre。坚持俗语说:“哪里有一个shell,哪里有一个方法”,这段代码展示了BASH(CLI Debian/Ubuntu flavored)的整洁解决方案。另外,在创建需要进一步处理的文件 时,从BASH与postgre进行交互要容易得多。关于安装过程,请咨询: https://tecadmin.net/install-postgresql-server-on-ubuntu/

首先下载使用wget的文件:

cd /path/to/directory/ ;

wget -O ./vie_101.csv http://www.wien.gv.at/statistik/ogd/vie_101.csv ;

然后看看您最喜爱的电子表格计算程序(自由报办公室计算)的文件。 vie_101应该使用UTF-8编码,并且可能使用半列\;分隔符。打开, 检查,更改,保存。 为了便于在线处理,需要进行一些重新格式化。首先,用适当的列名创建头文件 。其次,下载的文件是“斩首”(前两行是 删除)和“剪切”(到感兴趣的列)。最后,它被附加到头文件。

echo 'DISTRICT,POPULATION,MALE,FEMALE,DATE' > ./vie.csv ;

declare=$(sed -e 's/,/ INT,/g' ./vie.csv)' INT' ;

sed 's/\;/\,/g' ./vie_101.csv | sed 's/\.//g' | tail -n+3 | cut -d ','

-f4,6-9 >> ./vie.csv ;

Postgre

为了将数据加载到postgres的架构需要先创建: 回声 “创建表争夺($申报);” | sudo -u postgres psql; 为了实际将数据加载到postgres中,需要将以前创建并格式化的文件(vie.csv) 复制到超级用户可通过postgres访问的文件夹中。只有这样才能执行复制 命令将数据加载到postgres中。需要注意的是,此操作需要root权限 (sudo)。

sudo cp ./vie.csv /var/lib/postgresql/ ;

echo "\copy vie from '/var/lib/postgresql/vie.csv' delimiter ',' csv

header ;" | sudo -u postgres psql ;

XML模式

之前我们创建XML文档,我们来设计我们的文件的结构。我们决定 创建一个XML模式(schema.xsd)而不是DTD。 我们的模式定义了一个根元素,它的子元素是复杂的元素。元素可以以任意数量出现。元素的子元素是 ,和。这5个元素(同胞)是简单的 元素,并且定义的值类型始终是一个整数。

与Postgre

创建XML既然最终目标是通过一个XQuery需要一个XML文件来回答RQ。此文件 (xml.xml)需要正确格式化并且格式正确。至于下一步query_to_xml 命令管道输送到Postgres的-Aqt用于:

-A [aligned mode disable, remove header and + at end of line]

-q [quiet output]

-t [tuples only, removes footer]

echo "select query_to_xml('select * from vie order by date asc', true,

false, 'vie') ;" | sudo -u postgres psql -Aqt > ./vie_data.xml ;

现在,表中的模式导出与table_to_xmlschema是很重要的()。

echo "select table_to_xmlschema('vie', true, false, '') ;" | sudo -u

postgres psql -Aqt > ./vie_schema.xsd ;

这就结束了postgre和BASH中的所有任务。随着最后的命令basex可以启动。

basexgui

的Xquery

使用basex XML文件可以很容易地针对该架构与验证通过: 验证:XSD( 'vie_data.xml', 'vie_schema.xsd') XML文件可通过单击imporet:

数据库 - >新建

常规 - >浏览选择XML文件。

解析如果未启用,请打开“启用名称空间”。

OK

RQ1只能通过一个for循环的“日期”分组的数据来回答。结果通过保存 :

file:write('path/to/directory/file_name').

file:write('/path/to/directory/population_year_total.xml',

for $row in //table/row

group by $date := $row/date

order by $date ascending

return

population="{sum($row/population)}">

)

RQ2由for循环嵌套2 answerd。外部循环按DATE进行分组,并返回给定的每个DATE的总人口数 。内部循环由DISTRICT分组,因此,它返回一个 总和的人口。

file:write('/path/to/directory/district_year_subtotal.xml',

for $row in //table/row

group by $date:= $row/date

order by $date ascending

return

population="{sum($row/population)}">{

for $sub_item in $row

group by $district := $sub_item/district

order by $district ascending

return

population="{sum($sub_item/population)}"/>

}

)

完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值