我正在尝试获取以.csv格式保存的生物数据,并将其转换为由Darwin Core标准(Dublin Core的扩展名)设置的特定xml格式。数据设置在观察记录的行中,第一行具有标题。我需要使用基本的XML树/架构用Darwin Core标准XML标签重新打包数据。目的是使数据标准化并使其易于加载到任何类型的数据库程序中。
我是生物学家,所以我在计算机编程和代码方面还很陌生。我想用R或excel编写可以自动执行此重新打包步骤的内容,因此不必手动重新输入数千条记录。
我尝试使用excel 365中的开发人员工具将.csv另存为.xml文件,但是似乎我必须首先在文本编辑器程序中开发xml树或架构。另外,似乎我将使用的xml附加组件不再可用。我已经下载了名为“ Brackets”内部版本1.14的免费文本编辑器,以编写一些简单的xml。我还下载了RStudio版本1.1.419和XML包,可以使用R版本3.4.3编写脚本。我已经阅读了所有《达尔文核心条款》以及基本的XML语法和规则,但是我真的不知道从哪里开始。
这是简单.csv格式的数据示例:
type,institutionCode,collectionCode,catalogNumber,scientificName,individualCount,datasetID
PhysicalObject,ANSP,PH,123,"Cryptantha gypsophila Reveal & C.R. Broome",12,urn:lsid:tim.lsid.tdwg.org:collections:1
PhysicalObject,ANSP,PH,124,"Buxbaumia piperi",2,urn:lsid:tim.lsid.tdwg.org:collections:1
这是最终产品记录的样子:
[<?xml version="1.0"?>
<dwr:SimpleDarwinRecordSet
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://rs.tdwg.org/dwc/xsd/simpledarwincore/ http://rs.tdwg.org/dwc/xsd/tdwg_dwc_simple.xsd"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:dwc="http://rs.tdwg.org/dwc/terms/"
xmlns:dwr="http://rs.tdwg.org/dwc/xsd/simpledarwincore/">
<dwr:SimpleDarwinRecord>
<dcterms:type>PhysicalObject</dcterms:type>
<dwc:institutionCode>ANSP</dwc:institutionCode>
<dwc:collectionCode>PH</dwc:collectionCode>
<dwc:catalogNumber>123</dwc:catalogNumber>
<dwc:scientificName>Cryptantha gypsophila reveal & C.R. Boome</dwc:scientificName>
<dwc:individualCount>12</dwc:individualCount>
<dwc:datasetID>urn:lsid:tim.lsid.tdwg.org:collections:1</dwc:datasetID>
</dwr:SimpleDarwinRecord>
<dwr:SimpleDarwinRecord>
<dcterms:type>PhysicalObject</dcterms:type>
<dwc:institutionCode>ANSP</dwc:institutionCode>
<dwc:collectionCode>PH</dwc:collectionCode>
<dwc:catalogNumber>124</dwc:catalogNumber>
<dwc:scientificName>Buxbaumia piperi</dwc:scientificName>
<dwc:individualCount>2</dwc:individualCount>
<dwc:datasetID>urn:lsid:tim.lsid.tdwg.org:collections:1</dwc:datasetID>
</dwr:SimpleDarwinRecord>
</dwr:SimpleDarwinRecordSet>]
答案 0 :(得分:0)
这可以通过多种方式来完成。在这里,我采用了stringi解决方案,因为它很容易读取输入内容。
下面的代码导入数据,写入XML的第一部分,然后为每一行写入SimpleDarwinRecord
,最后写入文件的最后一部分。 unlink
在将任何内容附加到文件之前需要清理。如果缩进很重要(apparently it doesn't),则可能需要对模板进行一些调整。
这也可以使用Jinja2模板和Python来完成。
library(stringr)
xy <- read.table(text = 'type,institutionCode,collectionCode,catalogNumber,scientificName,individualCount,datasetID
PhysicalObject,ANSP,PH,123,"Cryptantha gypsophila Reveal & C.R. Broome",12,urn:lsid:tim.lsid.tdwg.org:collections:1
PhysicalObject,ANSP,PH,124,"Buxbaumia piperi",2,urn:lsid:tim.lsid.tdwg.org:collections:1', header = TRUE,
sep = ",")
unlink("output.txt")
outfile <- file(description = "output.txt", open = "at")
writeLines('[<?xml version="1.0"?>
<dwr:SimpleDarwinRecordSet
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://rs.tdwg.org/dwc/xsd/simpledarwincore/ http://rs.tdwg.org/dwc/xsd/tdwg_dwc_simple.xsd"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:dwc="http://rs.tdwg.org/dwc/terms/"
xmlns:dwr="http://rs.tdwg.org/dwc/xsd/simpledarwincore/">', con = outfile)
writeLines(str_glue('<dwr:SimpleDarwinRecord>
<dcterms:type>{xy$type}</dcterms:type>
<dwc:institutionCode>{xy$institutionCode}</dwc:institutionCode>
<dwc:collectionCode>{xy$collectionCode}</dwc:collectionCode>
<dwc:catalogNumber>{xy$catalogNumber}</dwc:catalogNumber>
<dwc:scientificName>{xy$scientificName}</dwc:scientificName>
<dwc:individualCount>{xy$individualCount}</dwc:individualCount>
<dwc:datasetID>{xy$datasetID}</dwc:datasetID>
</dwr:SimpleDarwinRecord>'), con = outfile)
writeLines(
'</dwr:SimpleDarwinRecordSet>]',
con = outfile)
close(outfile)
这是结果:
[<?xml version="1.0"?>
<dwr:SimpleDarwinRecordSet
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://rs.tdwg.org/dwc/xsd/simpledarwincore/ http://rs.tdwg.org/dwc/xsd/tdwg_dwc_simple.xsd"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:dwc="http://rs.tdwg.org/dwc/terms/"
xmlns:dwr="http://rs.tdwg.org/dwc/xsd/simpledarwincore/">
<dwr:SimpleDarwinRecord>
<dcterms:type>PhysicalObject</dcterms:type>
<dwc:institutionCode>ANSP</dwc:institutionCode>
<dwc:collectionCode>PH</dwc:collectionCode>
<dwc:catalogNumber>123</dwc:catalogNumber>
<dwc:scientificName>Cryptantha gypsophila Reveal & C.R. Broome</dwc:scientificName>
<dwc:individualCount>12</dwc:individualCount>
<dwc:datasetID>urn:lsid:tim.lsid.tdwg.org:collections:1</dwc:datasetID>
</dwr:SimpleDarwinRecord>
<dwr:SimpleDarwinRecord>
<dcterms:type>PhysicalObject</dcterms:type>
<dwc:institutionCode>ANSP</dwc:institutionCode>
<dwc:collectionCode>PH</dwc:collectionCode>
<dwc:catalogNumber>124</dwc:catalogNumber>
<dwc:scientificName>Buxbaumia piperi</dwc:scientificName>
<dwc:individualCount>2</dwc:individualCount>
<dwc:datasetID>urn:lsid:tim.lsid.tdwg.org:collections:1</dwc:datasetID>
</dwr:SimpleDarwinRecord>
</dwr:SimpleDarwinRecordSet>]