2

我想通过从 matlab 中向http://www.crossref.org发送 DOI(数字对象标识符)来检索 bibtex 数据(用于构建参考书目) 。

crossref API 建议如下:

curl -LH "Accept: text/bibliography; style=bibtex" http://dx.doi.org/10.1038/nrd842

基于来源。

此处的另一个示例建议以下内容ruby

open("http://dx.doi.org/10.1038/nrd842","Accept" => "text/bibliography; style=bibtex"){|f| f.each {|line| print line}}

虽然我听说过 ruby​​ rock,但我想在 matlab 中执行此操作,但不知道如何翻译 ruby​​ 消息或解释 crossref 命令。

以下是我到目前为止发送一个 doi 到 crossref 并检索 xml 中的数据(在变量中retdat),但不是 bibtex 格式:

clear
clc

doi = '10.1038/nrd842';

URL_PATTERN = 'http://dx.doi.org/%s';
fetchurl = sprintf(URL_PATTERN,doi);

numinputs = 1;

www = java.net.URL(fetchurl);

is = www.openStream;

%Read stream of data
isr = java.io.InputStreamReader(is);
br = java.io.BufferedReader(isr);

%Parse return data
retdat = [];
next_line = toCharArray(br.readLine)';  %First line contains headings, determine length

%Loop through data

while ischar(next_line)
  retdat = [retdat, 13, next_line];
  tmp = br.readLine;
  try
    next_line = toCharArray(tmp)';
    if strcmp(next_line,'M END')
      next_line = [];
      break
    end
  catch
    break;
  end
end


%Cleanup java objects
br.close; 
isr.close;
is.close;

非常感谢帮助将 ruby​​ 语句翻译成 matlab 可以使用脚本发送的东西,例如发布的用于与 crossref 建立通信的脚本。

编辑:

其他限制包括代码的向后兼容性(至少回到 R14):>(。此外,不使用 ruby​​,因为这解决了问题但不是“matlab”解决方案,请参阅此处了解如何通过 matlab 调用 ruby system('ruby script.rb').

4

2 回答 2

1

您可以根据需要轻松编辑 urlread。由于版权原因,我不会发布我修改后的 urlread 功能代码。

在 urlread 中(我的位于 C:\Program Files\MATLAB\R2012a\toolbox\matlab\iofun\urlread.m),作为最不优雅的解决方案:

就在“% 从连接中读取数据”之前。我补充说:

urlConnection.setRequestProperty('Accept','text/bibliography; style=bibtex');
于 2013-07-30T22:34:35.007 回答
0

user2034006 的回答为解决方案铺平了道路。以下脚本在urlread修改时有效:

URL_PATTERN = 'http://dx.doi.org/%s';
doi = '10.1038/nrd842';
fetchurl = sprintf(URL_PATTERN,doi); 
method = 'post';
params= {};
[string,status] = urlread(fetchurl,method,params);

中的修改urlread与user2034006的建议不同。上线时一切正常

urlConnection.setRequestProperty('Content-Type','application/x-www-form-urlencoded');

urlread被替换为

urlConnection.setRequestProperty('Accept','text/bibliography; style=bibtex');
于 2013-07-31T10:46:21.907 回答