Skip to content

Commit c0caea3

Browse files
authored
Merge pull request #73 from code4lib/proper_identifiers
oai-pmh identifiers use colon to separate namespace and id, not slash
2 parents 23e3ac8 + 0ef07df commit c0caea3

File tree

7 files changed

+26
-24
lines changed

7 files changed

+26
-24
lines changed

lib/oai/provider/response.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def header
5151
}
5252
end
5353
def extract_identifier(id)
54-
id.sub("#{provider.prefix}/", '')
54+
id.sub("#{provider.prefix}:", '')
5555
end
5656

5757
def valid?

lib/oai/provider/response/record_response.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@ def about_for(record)
4848

4949
private
5050

51+
# Namespace syntax suggested in http://www.openarchives.org/OAI/2.0/guidelines-oai-identifier.htm
5152
def identifier_for(record)
52-
"#{provider.prefix}/#{record.id}"
53+
"#{provider.prefix}:#{record.id}"
5354
end
5455

5556
def timestamp_for(record)

test/activerecord_provider/tc_ar_provider.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def test_metadata_formats
1414

1515
def test_metadata_formats_for_record
1616
record_id = DCField.first.id
17-
assert_nothing_raised { REXML::Document.new(@provider.list_metadata_formats(:identifier => "oai:test/#{record_id}")) }
17+
assert_nothing_raised { REXML::Document.new(@provider.list_metadata_formats(:identifier => "oai:test:#{record_id}")) }
1818
doc = REXML::Document.new(@provider.list_metadata_formats)
1919
assert doc.elements['/OAI-PMH/ListMetadataFormats/metadataFormat/metadataPrefix'].text == 'oai_dc'
2020
end
@@ -38,20 +38,20 @@ def test_get_record
3838
record_id = DCField.first.id
3939
assert_nothing_raised do
4040
REXML::Document.new(@provider.get_record(
41-
:identifier => "oai:test/#{record_id}", :metadata_prefix => 'oai_dc'))
41+
:identifier => "oai:test:#{record_id}", :metadata_prefix => 'oai_dc'))
4242
end
4343
doc = REXML::Document.new(@provider.get_record(
4444
:identifier => "#{record_id}", :metadata_prefix => 'oai_dc'))
45-
assert_equal "oai:test/#{record_id}", doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
45+
assert_equal "oai:test:#{record_id}", doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
4646
end
4747

4848
def test_deleted
4949
record = DCField.first
5050
record.deleted = true;
5151
record.save
5252
doc = REXML::Document.new(@provider.get_record(
53-
:identifier => "oai:test/#{record.id}", :metadata_prefix => 'oai_dc'))
54-
assert_equal "oai:test/#{record.id}", doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
53+
:identifier => "oai:test:#{record.id}", :metadata_prefix => 'oai_dc'))
54+
assert_equal "oai:test:#{record.id}", doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
5555
assert_equal 'deleted', doc.elements['OAI-PMH/GetRecord/record/header'].attributes["status"]
5656
end
5757

test/client/tc_get_record.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class GetRecordTest < Test::Unit::TestCase
44

55
def test_get_one
66
client = OAI::Client.new 'http://localhost:3333/oai'
7-
response = client.get_record :identifier => 'oai:test/3'
7+
response = client.get_record :identifier => 'oai:test:3'
88
assert_kind_of OAI::GetRecordResponse, response
99
assert_kind_of OAI::Record, response.record
1010
assert_kind_of REXML::Element, response.record._source
@@ -13,8 +13,7 @@ def test_get_one
1313
assert_kind_of REXML::Element, response.record.about
1414

1515
# minimal check that the header is working
16-
assert_equal 'oai:test/3',
17-
response.record.header.identifier
16+
assert_equal 'oai:test:3', response.record.header.identifier
1817

1918
# minimal check that the metadata is working
2019
#assert 'en', response.record.metadata.elements['.//dc:language'].text
@@ -33,7 +32,7 @@ def test_missing_identifier
3332

3433
def test_deleted_record
3534
client = OAI::Client.new 'http://localhost:3333/oai'
36-
record = client.get_record :identifier => 'oai:test/275'
35+
record = client.get_record :identifier => 'oai:test:275'
3736
assert record.deleted?
3837
end
3938

test/client/tc_libxml.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def test_deleted_record
4343

4444
uri = 'http://localhost:3333/oai'
4545
client = OAI::Client.new(uri, :parser => 'libxml')
46-
response = client.get_record :identifier => 'oai:test/275'
46+
response = client.get_record :identifier => 'oai:test:275'
4747
assert response.record.deleted?
4848
end
4949

test/provider/tc_exceptions.rb

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def test_bad_verb_raises_exception
3636

3737
def test_bad_format_raises_exception
3838
assert_raise(OAI::FormatException) do
39-
@provider.get_record(:identifier => 'oai:test/1', :metadata_prefix => 'html')
39+
@provider.get_record(:identifier => 'oai:test:1', :metadata_prefix => 'html')
4040
end
4141
end
4242

@@ -45,16 +45,18 @@ def test_missing_format_raises_exception
4545
@provider.list_records()
4646
end
4747
assert_raise(OAI::ArgumentException) do
48-
@provider.get_record(:identifier => 'oai:test/1')
48+
@provider.get_record(:identifier => 'oai:test:1')
4949
end
5050
end
5151

5252
def test_bad_id_raises_exception
5353
badIdentifiers = [
54-
'oai:test/5000',
55-
'oai:test/-1',
54+
'oai:test:5000',
55+
'oai:test:-1',
56+
'oai:test:one',
5657
'oai:test/one',
57-
'oai:test/\\$1\1!']
58+
'oai:test/1',
59+
'oai:test:\\$1\1!']
5860
badIdentifiers.each do |id|
5961
assert_raise(OAI::IdException) do
6062
@provider.get_record(:identifier => id, :metadata_prefix => 'oai_dc')

test/provider/tc_simple_provider.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def test_metadata_formats
3535
end
3636

3737
def test_metadata_formats_for_document
38-
assert_nothing_raised { REXML::Document.new(@simple_provider.list_metadata_formats(:identifier => "oai:test/1")) }
38+
assert_nothing_raised { REXML::Document.new(@simple_provider.list_metadata_formats(:identifier => "oai:test:1")) }
3939
doc = REXML::Document.new(@simple_provider.list_metadata_formats)
4040
assert_equal "oai_dc",
4141
doc.elements['/OAI-PMH/ListMetadataFormats/metadataFormat/metadataPrefix'].text
@@ -85,37 +85,37 @@ def test_get_record
8585
assert_nothing_raised do
8686
REXML::Document.new(
8787
@simple_provider.get_record(
88-
:identifier => 'oai:test/1',
88+
:identifier => 'oai:test:1',
8989
:metadataPrefix => 'oai_dc'
9090
)
9191
)
9292
end
9393
doc = REXML::Document.new(
9494
@simple_provider.get_record(
95-
:identifier => 'oai:test/1',
95+
:identifier => 'oai:test:1',
9696
:metadataPrefix => 'oai_dc'
9797
)
9898
)
99-
assert_equal 'oai:test/1',
99+
assert_equal 'oai:test:1',
100100
doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
101101
end
102102

103103
def test_deleted_record
104104
assert_nothing_raised do
105105
REXML::Document.new(
106106
@simple_provider.get_record(
107-
:identifier => 'oai:test/6',
107+
:identifier => 'oai:test:6',
108108
:metadataPrefix => 'oai_dc'
109109
)
110110
)
111111
end
112112
doc = REXML::Document.new(
113113
@simple_provider.get_record(
114-
:identifier => 'oai:test/5',
114+
:identifier => 'oai:test:5',
115115
:metadataPrefix => 'oai_dc'
116116
)
117117
)
118-
assert_equal 'oai:test/5', doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
118+
assert_equal 'oai:test:5', doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
119119
assert_equal 'deleted', doc.elements['OAI-PMH/GetRecord/record/header'].attributes["status"]
120120
end
121121

0 commit comments

Comments
 (0)