ruby-avm-library 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +5 -0
- data/.gitignore +5 -0
- data/.rspec +5 -0
- data/Gemfile +14 -0
- data/README.md +56 -0
- data/Rakefile +2 -0
- data/autotest/discover.rb +2 -0
- data/bin/avm2avm +7 -0
- data/lib/avm/cli.rb +18 -0
- data/lib/avm/contact.rb +40 -0
- data/lib/avm/controlled_vocabulary.rb +23 -0
- data/lib/avm/coordinate_frame.rb +10 -0
- data/lib/avm/coordinate_system_projection.rb +10 -0
- data/lib/avm/creator.rb +123 -0
- data/lib/avm/image.rb +355 -0
- data/lib/avm/image_quality.rb +10 -0
- data/lib/avm/image_type.rb +10 -0
- data/lib/avm/node.rb +28 -0
- data/lib/avm/observation.rb +76 -0
- data/lib/avm/spatial_quality.rb +10 -0
- data/lib/avm/xmp.rb +157 -0
- data/lib/ruby-avm-library.rb +7 -0
- data/lib/ruby-avm-library/version.rb +7 -0
- data/reek.watchr +12 -0
- data/ruby-avm-library.gemspec +27 -0
- data/spec/avm/cli_spec.rb +0 -0
- data/spec/avm/contact_spec.rb +93 -0
- data/spec/avm/creator_spec.rb +268 -0
- data/spec/avm/image_spec.rb +350 -0
- data/spec/avm/observation_spec.rb +191 -0
- data/spec/avm/xmp_spec.rb +154 -0
- data/spec/quick_fix_formatter.rb +26 -0
- data/spec/sample_files/creator/no_creator.xmp +14 -0
- data/spec/sample_files/creator/one_creator.xmp +28 -0
- data/spec/sample_files/creator/two_creators.xmp +26 -0
- data/spec/sample_files/image/both.xmp +101 -0
- data/spec/sample_files/image/light_years.xmp +96 -0
- data/spec/sample_files/image/nothing.xmp +18 -0
- data/spec/sample_files/image/redshift.xmp +101 -0
- data/spec/sample_files/image/single_value_light_years.xmp +96 -0
- data/spec/sample_files/observation/none.xmp +5 -0
- data/spec/sample_files/observation/one.xmp +17 -0
- data/spec/sample_files/observation/two.xmp +17 -0
- data/spec/spec_helper.rb +3 -0
- metadata +184 -0
@@ -0,0 +1,191 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'avm/image'
|
3
|
+
require 'avm/observation'
|
4
|
+
|
5
|
+
describe AVM::Observation do
|
6
|
+
let(:image) { AVM::Image.new }
|
7
|
+
let(:observation) { image.create_observation(options) }
|
8
|
+
|
9
|
+
subject { observation }
|
10
|
+
|
11
|
+
let(:facility) { 'HST' }
|
12
|
+
let(:instrument) { 'ACS' }
|
13
|
+
let(:color_assignment) { 'Blue' }
|
14
|
+
let(:band) { 'em.opt' }
|
15
|
+
let(:bandpass) { 'B' }
|
16
|
+
let(:wavelength) { 2.5 }
|
17
|
+
let(:start_time) { '2010-01-01' }
|
18
|
+
let(:start_time_string) { '2010-01-01T00:00' }
|
19
|
+
let(:integration_time) { '300' }
|
20
|
+
let(:dataset_id) { '12345' }
|
21
|
+
|
22
|
+
let(:options) { {
|
23
|
+
:facility => facility,
|
24
|
+
:instrument => instrument,
|
25
|
+
:color_assignment => color_assignment,
|
26
|
+
:band => band,
|
27
|
+
:bandpass => bandpass,
|
28
|
+
:wavelength => wavelength,
|
29
|
+
:start_time => start_time,
|
30
|
+
:integration_time => integration_time,
|
31
|
+
:dataset_id => dataset_id,
|
32
|
+
} }
|
33
|
+
|
34
|
+
let(:second_facility) { 'Chandra' }
|
35
|
+
let(:second_instrument) { 'X-Ray' }
|
36
|
+
let(:second_color_assignment) { 'Green' }
|
37
|
+
let(:second_band) { 'em.x-ray' }
|
38
|
+
let(:second_bandpass) { 'C' }
|
39
|
+
let(:second_wavelength) { nil }
|
40
|
+
let(:second_start_time) { '2010-01-02' }
|
41
|
+
let(:second_start_time_string) { '2010-01-02T00:00' }
|
42
|
+
let(:second_integration_time) { '400' }
|
43
|
+
let(:second_dataset_id) { '23456' }
|
44
|
+
|
45
|
+
let(:second_options) { {
|
46
|
+
:facility => second_facility,
|
47
|
+
:instrument => second_instrument,
|
48
|
+
:color_assignment => second_color_assignment,
|
49
|
+
:band => second_band,
|
50
|
+
:bandpass => second_bandpass,
|
51
|
+
:wavelength => second_wavelength,
|
52
|
+
:start_time => second_start_time,
|
53
|
+
:integration_time => second_integration_time,
|
54
|
+
:dataset_id => second_dataset_id,
|
55
|
+
} }
|
56
|
+
|
57
|
+
def self.check_defaults
|
58
|
+
its(:facility) { should == facility }
|
59
|
+
its(:instrument) { should == instrument }
|
60
|
+
its(:color_assignment) { should == color_assignment }
|
61
|
+
its(:band) { should == band }
|
62
|
+
its(:bandpass) { should == bandpass }
|
63
|
+
its(:wavelength) { should == wavelength }
|
64
|
+
its(:start_time) { should == Time.parse(start_time) }
|
65
|
+
its(:integration_time) { should == integration_time }
|
66
|
+
its(:dataset_id) { should == dataset_id }
|
67
|
+
|
68
|
+
its(:to_h) { should == {
|
69
|
+
:facility => facility,
|
70
|
+
:instrument => instrument,
|
71
|
+
:color_assignment => color_assignment,
|
72
|
+
:band => band,
|
73
|
+
:bandpass => bandpass,
|
74
|
+
:wavelength => wavelength,
|
75
|
+
:start_time => Time.parse(start_time),
|
76
|
+
:integration_time => integration_time,
|
77
|
+
:dataset_id => dataset_id
|
78
|
+
} }
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'defaults' do
|
82
|
+
check_defaults
|
83
|
+
end
|
84
|
+
|
85
|
+
describe '.from_xml' do
|
86
|
+
let(:image) { AVM::Image.from_xml(File.read(file_path)) }
|
87
|
+
let(:observations) { image.observations }
|
88
|
+
|
89
|
+
subject { observations }
|
90
|
+
|
91
|
+
context 'no observations' do
|
92
|
+
let(:file_path) { 'spec/sample_files/observation/none.xmp' }
|
93
|
+
|
94
|
+
it { should == [] }
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'one observation' do
|
98
|
+
let(:file_path) { 'spec/sample_files/observation/one.xmp' }
|
99
|
+
|
100
|
+
its(:length) { should == 1 }
|
101
|
+
|
102
|
+
context 'first observation' do
|
103
|
+
subject { observations.first }
|
104
|
+
|
105
|
+
check_defaults
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'two observations' do
|
110
|
+
let(:file_path) { 'spec/sample_files/observation/two.xmp' }
|
111
|
+
|
112
|
+
its(:length) { should == 2 }
|
113
|
+
|
114
|
+
context 'first observation' do
|
115
|
+
subject { observations.first }
|
116
|
+
|
117
|
+
check_defaults
|
118
|
+
end
|
119
|
+
|
120
|
+
context 'second observation' do
|
121
|
+
subject { observations.last }
|
122
|
+
|
123
|
+
its(:facility) { should == second_facility }
|
124
|
+
its(:instrument) { should == second_instrument }
|
125
|
+
its(:color_assignment) { should == second_color_assignment }
|
126
|
+
its(:band) { should == second_band }
|
127
|
+
its(:bandpass) { should == second_bandpass }
|
128
|
+
its(:wavelength) { should == second_wavelength }
|
129
|
+
its(:start_time) { should == Time.parse(second_start_time) }
|
130
|
+
its(:integration_time) { should == second_integration_time }
|
131
|
+
its(:dataset_id) { should == second_dataset_id }
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe '.add_to_document' do
|
137
|
+
let(:xml) { image.to_xml }
|
138
|
+
let(:avm) { xml.at_xpath('//rdf:Description[@rdf:about="AVM"]') }
|
139
|
+
|
140
|
+
context 'none' do
|
141
|
+
it "should not have any observation information" do
|
142
|
+
%w{Facility Instrument Spectral.ColorAssignment Spectral.Band Spectral.Bandpass Spectral.CentralWavelength Temporal.StartTime Temporal.IntegrationTime DatasetID}.each do |name|
|
143
|
+
avm.at_xpath("//avm:#{name}").should be_nil
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
context 'one' do
|
149
|
+
before { observation }
|
150
|
+
|
151
|
+
it "should have the AVM values" do
|
152
|
+
{
|
153
|
+
'Facility' => facility,
|
154
|
+
'Instrument' => instrument,
|
155
|
+
'Spectral.ColorAssignment' => color_assignment,
|
156
|
+
'Spectral.Band' => band,
|
157
|
+
'Spectral.Bandpass' => bandpass,
|
158
|
+
'Spectral.CentralWavelength' => wavelength,
|
159
|
+
'Temporal.StartTime' => start_time_string,
|
160
|
+
'Temporal.IntegrationTime' => integration_time,
|
161
|
+
'DatasetID' => dataset_id
|
162
|
+
}.each do |name, value|
|
163
|
+
avm.at_xpath("//avm:#{name}").text.should == value.to_s
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
context 'two' do
|
169
|
+
let(:second_observation) { image.create_observation(second_options) }
|
170
|
+
|
171
|
+
|
172
|
+
before { observation ; second_observation }
|
173
|
+
|
174
|
+
it "should have the AVM values" do
|
175
|
+
{
|
176
|
+
'Facility' => [ facility, second_facility ].join(','),
|
177
|
+
'Instrument' => [ instrument, second_instrument ].join(','),
|
178
|
+
'Spectral.ColorAssignment' => [ color_assignment, second_color_assignment ].join(','),
|
179
|
+
'Spectral.Band' => [ band, second_band ].join(','),
|
180
|
+
'Spectral.Bandpass' => [ bandpass, second_bandpass ].join(','),
|
181
|
+
'Spectral.CentralWavelength' => [ wavelength, second_wavelength || '-' ].join(','),
|
182
|
+
'Temporal.StartTime' => [ start_time_string, second_start_time_string ].join(','),
|
183
|
+
'Temporal.IntegrationTime' => [ integration_time, second_integration_time ].join(','),
|
184
|
+
'DatasetID' => [ dataset_id, second_dataset_id ].join(',')
|
185
|
+
}.each do |name, value|
|
186
|
+
avm.at_xpath("//avm:#{name}").text.should == value.to_s
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'avm/xmp'
|
3
|
+
|
4
|
+
describe AVM::XMP do
|
5
|
+
let(:xmp) { self.class.describes.new }
|
6
|
+
|
7
|
+
subject { xmp }
|
8
|
+
|
9
|
+
describe '#initialize' do
|
10
|
+
context 'not a nokogiri document' do
|
11
|
+
let(:xmp) { self.class.describes.new("definitely not nokogiri node") }
|
12
|
+
|
13
|
+
it { expect { xmp }.to raise_error(StandardError, /not a Nokogiri node/) }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#get_refs' do
|
18
|
+
before {
|
19
|
+
xmp.get_refs do |refs|
|
20
|
+
refs[:dublin_core] << "<rdf:addedToDublinCore />"
|
21
|
+
refs[:iptc] << "<rdf:addedToIPTC />"
|
22
|
+
refs[:photoshop] << '<rdf:addedToPhotoshop />'
|
23
|
+
refs[:avm] << '<rdf:addedToAVM />'
|
24
|
+
end
|
25
|
+
}
|
26
|
+
|
27
|
+
it "should have gotten the refs correctly" do
|
28
|
+
xmp.doc.at_xpath('//rdf:Description[@rdf:about="Dublin Core"]//rdf:addedToDublinCore').should_not be_nil
|
29
|
+
xmp.doc.at_xpath('//rdf:Description[@rdf:about="IPTC"]//rdf:addedToIPTC').should_not be_nil
|
30
|
+
xmp.doc.at_xpath('//rdf:Description[@rdf:about="Photoshop"]//rdf:addedToPhotoshop').should_not be_nil
|
31
|
+
xmp.doc.at_xpath('//rdf:Description[@rdf:about="AVM"]//rdf:addedToAVM').should_not be_nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe 'xml from string' do
|
36
|
+
let(:xmp) { self.class.describes.from_string(string) }
|
37
|
+
let(:doc) { xmp.doc }
|
38
|
+
|
39
|
+
describe '.from_string' do
|
40
|
+
let(:string) { '<xml xmlns:rdf="cats"><rdf:RDF><node /></rdf:RDF></xml>' }
|
41
|
+
|
42
|
+
specify { xmp.doc.at_xpath('//node').should_not be_nil }
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#ensure_namespaces! and #ensure_xmlns' do
|
46
|
+
let(:rdf_namespace) { AVM::XMP::REQUIRED_NAMESPACES[:rdf] }
|
47
|
+
|
48
|
+
def self.all_default_namespaces
|
49
|
+
it "should have all the namespaces with the default prefixes" do
|
50
|
+
namespaces = doc.document.collect_namespaces
|
51
|
+
|
52
|
+
namespaces_to_test = AVM::XMP::REQUIRED_NAMESPACES.dup
|
53
|
+
yield namespaces_to_test if block_given?
|
54
|
+
|
55
|
+
namespaces_to_test.each do |prefix, namespace|
|
56
|
+
if namespace
|
57
|
+
namespaces["xmlns:#{prefix}"].should == namespace
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
before { doc }
|
64
|
+
|
65
|
+
context 'none of the namespaces exist' do
|
66
|
+
let(:string) { '<xml><node /></xml>' }
|
67
|
+
|
68
|
+
all_default_namespaces
|
69
|
+
|
70
|
+
specify { xmp.ensure_xmlns('.//rdf:what').should == './/rdf:what' }
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'one namespace exists with the same prefix' do
|
74
|
+
let(:string) { %{<xml xmlns:rdf="#{rdf_namespace}"><node /></xml>} }
|
75
|
+
|
76
|
+
all_default_namespaces
|
77
|
+
|
78
|
+
specify { xmp.ensure_xmlns('.//rdf:what').should == './/rdf:what' }
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'one namespace exists with a different prefix' do
|
82
|
+
let(:string) { %{<xml xmlns:r="#{rdf_namespace}"><node /></xml>} }
|
83
|
+
|
84
|
+
all_default_namespaces { |namespaces|
|
85
|
+
namespaces.delete(:rdf)
|
86
|
+
namespaces[:r] = AVM::XMP::REQUIRED_NAMESPACES[:rdf]
|
87
|
+
}
|
88
|
+
|
89
|
+
specify { xmp.ensure_xmlns('.//rdf:what').should == './/r:what' }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '#ensure_descriptions_findable!' do
|
95
|
+
let(:document) { <<-XML }
|
96
|
+
<x:xmpmeta xmlns:x="adobe:ns:meta/">
|
97
|
+
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
98
|
+
#{content}
|
99
|
+
</rdf:RDF>
|
100
|
+
</x:xmpmeta>
|
101
|
+
XML
|
102
|
+
|
103
|
+
let(:xmp) { self.class.describes.new(Nokogiri::XML(document)) }
|
104
|
+
|
105
|
+
context 'no nodes within' do
|
106
|
+
let(:content) { '' }
|
107
|
+
|
108
|
+
[ 'Dublin Core', 'IPTC', 'Photoshop', 'AVM' ].each do |which|
|
109
|
+
specify { xmp.at_xpath(%{//rdf:Description[@rdf:about="#{which}"]}).children.should be_empty }
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'has identifying nodes within' do
|
114
|
+
let(:content) { <<-XML }
|
115
|
+
<rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
116
|
+
<dc:creator />
|
117
|
+
</rdf:Description>
|
118
|
+
<rdf:Description rdf:about="" xmlns:Iptc4xmpCore="http://itpc.org/stf/Iptc4xmpCore/1.0/xmlns/">
|
119
|
+
<Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource" />
|
120
|
+
</rdf:Description>
|
121
|
+
<rdf:Description rdf:about="" xmlns:Photoshop="http://ns.adobe.com/photoshop/1.0/">
|
122
|
+
<photoshop:Something />
|
123
|
+
</rdf:Description>
|
124
|
+
<rdf:Description rdf:about="" xmlns:avm="http://www.communicatingastronomy.org/avm/1.0/">
|
125
|
+
<avm:Something />
|
126
|
+
</rdf:Description>
|
127
|
+
XML
|
128
|
+
|
129
|
+
[ 'Dublin Core', 'IPTC', 'Photoshop', 'AVM' ].each do |which|
|
130
|
+
specify { xmp.at_xpath(%{//rdf:Description[@rdf:about="#{which}"]}).should_not be_nil }
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context 'has a namespace it should know about with a different prefix' do
|
135
|
+
let(:content) { <<-XML }
|
136
|
+
<rdf:Description rdf:about="" xmlns:whatever="http://purl.org/dc/elements/1.1/">
|
137
|
+
<whatever:creator />
|
138
|
+
</rdf:Description>
|
139
|
+
XML
|
140
|
+
|
141
|
+
specify { xmp.at_xpath(%{//rdf:Description[@rdf:about="Dublin Core"]}).should_not be_nil }
|
142
|
+
end
|
143
|
+
|
144
|
+
context 'has a namespace it knows nothing about' do
|
145
|
+
let(:content) { <<-XML }
|
146
|
+
<rdf:Description rdf:about="" xmlns:whatever="http://example.com">
|
147
|
+
<whatever:creator />
|
148
|
+
</rdf:Description>
|
149
|
+
XML
|
150
|
+
|
151
|
+
it { expect { xmp }.to_not raise_error }
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'rspec/core/formatters/base_text_formatter'
|
2
|
+
|
3
|
+
module RSpec
|
4
|
+
module Core
|
5
|
+
module Formatters
|
6
|
+
class QuickFixFormatter < BaseTextFormatter
|
7
|
+
def dump_summary(duration, example_count, failure_count, pending_count)
|
8
|
+
end
|
9
|
+
|
10
|
+
def dump_profile
|
11
|
+
end
|
12
|
+
|
13
|
+
def dump_pending
|
14
|
+
end
|
15
|
+
|
16
|
+
def dump_failures
|
17
|
+
failed_examples.each do |example|
|
18
|
+
output.puts "%s:%s:%s" % [ example.file_path, example.metadata[:line_number], example.metadata[:execution_result][:exception].message ]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.352624, 2008/07/30-18:05:41 ">
|
2
|
+
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
3
|
+
<rdf:Description rdf:about=""
|
4
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
5
|
+
<dc:creator />
|
6
|
+
</rdf:Description>
|
7
|
+
<rdf:Description rdf:about=""
|
8
|
+
xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/">
|
9
|
+
<Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource">
|
10
|
+
</Iptc4xmpCore:CreatorContactInfo>
|
11
|
+
</rdf:Description>
|
12
|
+
</rdf:RDF>
|
13
|
+
</x:xmpmeta>
|
14
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.352624, 2008/07/30-18:05:41 ">
|
2
|
+
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
3
|
+
<rdf:Description rdf:about=""
|
4
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
5
|
+
<dc:creator>
|
6
|
+
<rdf:Seq><rdf:li>John Bintz</rdf:li></rdf:Seq>
|
7
|
+
</dc:creator>
|
8
|
+
<dc:title>
|
9
|
+
<rdf:Alt>
|
10
|
+
<rdf:li xml:lang="x-default">This is an image</rdf:li>
|
11
|
+
</rdf:Alt>
|
12
|
+
</dc:title>
|
13
|
+
</rdf:Description>
|
14
|
+
<rdf:Description rdf:about=""
|
15
|
+
xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/">
|
16
|
+
<Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource">
|
17
|
+
<Iptc4xmpCore:CiAdrExtadr>3700 San Martin Drive</Iptc4xmpCore:CiAdrExtadr>
|
18
|
+
<Iptc4xmpCore:CiAdrCity>Baltimore</Iptc4xmpCore:CiAdrCity>
|
19
|
+
<Iptc4xmpCore:CiAdrRegion>Maryland</Iptc4xmpCore:CiAdrRegion>
|
20
|
+
<Iptc4xmpCore:CiAdrPcode>21218</Iptc4xmpCore:CiAdrPcode>
|
21
|
+
<Iptc4xmpCore:CiAdrCtry>USA</Iptc4xmpCore:CiAdrCtry>
|
22
|
+
<Iptc4xmpCore:CiTelWork>800-555-1234</Iptc4xmpCore:CiTelWork>
|
23
|
+
<Iptc4xmpCore:CiEmailWork>bintz@stsci.edu</Iptc4xmpCore:CiEmailWork>
|
24
|
+
<Iptc4xmpCore:CiUrlWork>http://hubblesite.org</Iptc4xmpCore:CiUrlWork>
|
25
|
+
</Iptc4xmpCore:CreatorContactInfo>
|
26
|
+
</rdf:Description>
|
27
|
+
</rdf:RDF>
|
28
|
+
</x:xmpmeta>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.352624, 2008/07/30-18:05:41 ">
|
2
|
+
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
3
|
+
<rdf:Description rdf:about=""
|
4
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
5
|
+
<dc:creator>
|
6
|
+
<rdf:Seq>
|
7
|
+
<rdf:li>John Bintz</rdf:li>
|
8
|
+
<rdf:li>Aohn Bintz</rdf:li>
|
9
|
+
</rdf:Seq>
|
10
|
+
</dc:creator>
|
11
|
+
</rdf:Description>
|
12
|
+
<rdf:Description rdf:about=""
|
13
|
+
xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/">
|
14
|
+
<Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource">
|
15
|
+
<Iptc4xmpCore:CiAdrExtadr>3700 San Martin Drive</Iptc4xmpCore:CiAdrExtadr>
|
16
|
+
<Iptc4xmpCore:CiAdrCity>Baltimore</Iptc4xmpCore:CiAdrCity>
|
17
|
+
<Iptc4xmpCore:CiAdrRegion>Maryland</Iptc4xmpCore:CiAdrRegion>
|
18
|
+
<Iptc4xmpCore:CiAdrPcode>21218</Iptc4xmpCore:CiAdrPcode>
|
19
|
+
<Iptc4xmpCore:CiAdrCtry>USA</Iptc4xmpCore:CiAdrCtry>
|
20
|
+
<Iptc4xmpCore:CiTelWork>800-555-1234,800-555-2345</Iptc4xmpCore:CiTelWork>
|
21
|
+
<Iptc4xmpCore:CiEmailWork>bintz@stsci.edu,aohn@stsci.edu</Iptc4xmpCore:CiEmailWork>
|
22
|
+
<Iptc4xmpCore:CiUrlWork>http://hubblesite.org</Iptc4xmpCore:CiUrlWork>
|
23
|
+
</Iptc4xmpCore:CreatorContactInfo>
|
24
|
+
</rdf:Description>
|
25
|
+
</rdf:RDF>
|
26
|
+
</x:xmpmeta>
|
@@ -0,0 +1,101 @@
|
|
1
|
+
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.352624, 2008/07/30-18:05:41 ">
|
2
|
+
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
3
|
+
<rdf:Description rdf:about=""
|
4
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
5
|
+
<dc:title>:
|
6
|
+
<rdf:Alt>
|
7
|
+
<rdf:li xml:lang="x-default">My title</rdf:li>
|
8
|
+
</rdf:Alt>
|
9
|
+
</dc:title>
|
10
|
+
<dc:description>
|
11
|
+
<rdf:Alt>
|
12
|
+
<rdf:li xml:lang="x-default">Description</rdf:li>
|
13
|
+
</rdf:Alt>
|
14
|
+
</dc:description>
|
15
|
+
<dc:subject>
|
16
|
+
<rdf:Bag>
|
17
|
+
<rdf:li>Name one</rdf:li>
|
18
|
+
<rdf:li>Name two</rdf:li>
|
19
|
+
</rdf:Bag>
|
20
|
+
</dc:subject>
|
21
|
+
</rdf:Description>
|
22
|
+
<rdf:Description rdf:about=""
|
23
|
+
xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/">
|
24
|
+
<Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource">
|
25
|
+
</Iptc4xmpCore:CreatorContactInfo>
|
26
|
+
</rdf:Description>
|
27
|
+
<rdf:Description rdf:about=""
|
28
|
+
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
|
29
|
+
<photoshop:Headline>Headline</photoshop:Headline>
|
30
|
+
<photoshop:Credit>Credit</photoshop:Credit>
|
31
|
+
<photoshop:DateCreated>2010-01-01</photoshop:DateCreated>
|
32
|
+
</rdf:Description>
|
33
|
+
<rdf:Description rdf:about=""
|
34
|
+
xmlns:avm="http://www.communicatingastronomy.org/avm/1.0/">
|
35
|
+
<avm:Spectral.Notes>Spectral Notes</avm:Spectral.Notes>
|
36
|
+
<avm:Distance.Notes>Distance Notes</avm:Distance.Notes>
|
37
|
+
<avm:ReferenceURL>Reference URL</avm:ReferenceURL>
|
38
|
+
<avm:ID>ID</avm:ID>
|
39
|
+
<avm:Type>Observation</avm:Type>
|
40
|
+
<avm:Image.ProductQuality>Good</avm:Image.ProductQuality>
|
41
|
+
<avm:Subject.Category>Category one; Category two</avm:Subject.Category>
|
42
|
+
<avm:Distance>
|
43
|
+
<rdf:Seq>
|
44
|
+
<rdf:li>Light years</rdf:li>
|
45
|
+
<rdf:li>Redshift</rdf:li>
|
46
|
+
</rdf:Seq>
|
47
|
+
</avm:Distance>
|
48
|
+
<avm:Spatial.CoordinateFrame>ICRS</avm:Spatial.CoordinateFrame>
|
49
|
+
<avm:Spatial.Equinox>100</avm:Spatial.Equinox>
|
50
|
+
<avm:Spatial.ReferenceValue>
|
51
|
+
<rdf:Seq>
|
52
|
+
<rdf:li>100</rdf:li>
|
53
|
+
<rdf:li>50</rdf:li>
|
54
|
+
</rdf:Seq>
|
55
|
+
</avm:Spatial.ReferenceValue>
|
56
|
+
<avm:Spatial.ReferenceDimension>
|
57
|
+
<rdf:Seq>
|
58
|
+
<rdf:li>200</rdf:li>
|
59
|
+
<rdf:li>150</rdf:li>
|
60
|
+
</rdf:Seq>
|
61
|
+
</avm:Spatial.ReferenceDimension>
|
62
|
+
<avm:Spatial.ReferencePixel>
|
63
|
+
<rdf:Seq>
|
64
|
+
<rdf:li>25</rdf:li>
|
65
|
+
<rdf:li>15</rdf:li>
|
66
|
+
</rdf:Seq>
|
67
|
+
</avm:Spatial.ReferencePixel>
|
68
|
+
<avm:Spatial.Scale>
|
69
|
+
<rdf:Seq>
|
70
|
+
<rdf:li>40</rdf:li>
|
71
|
+
<rdf:li>35</rdf:li>
|
72
|
+
</rdf:Seq>
|
73
|
+
</avm:Spatial.Scale>
|
74
|
+
<avm:Spatial.Rotation>10</avm:Spatial.Rotation>
|
75
|
+
<avm:Spatial.CoordsystemProjection>TAN</avm:Spatial.CoordsystemProjection>
|
76
|
+
<avm:Spatial.Quality>Full</avm:Spatial.Quality>
|
77
|
+
<avm:Spatial.Notes>Spatial Notes</avm:Spatial.Notes>
|
78
|
+
<avm:Spatial.FITSheader>FITS header</avm:Spatial.FITSheader>
|
79
|
+
<avm:Spatial.CDMatrix>
|
80
|
+
<rdf:Seq>
|
81
|
+
<rdf:li>1</rdf:li>
|
82
|
+
<rdf:li>2</rdf:li>
|
83
|
+
<rdf:li>3</rdf:li>
|
84
|
+
<rdf:li>4</rdf:li>
|
85
|
+
</rdf:Seq>
|
86
|
+
</avm:Spatial.CDMatrix>
|
87
|
+
<avm:Publisher>Publisher</avm:Publisher>
|
88
|
+
<avm:PublisherID>Publisher ID</avm:PublisherID>
|
89
|
+
<avm:ResourceID>Resource ID</avm:ResourceID>
|
90
|
+
<avm:ResourceURL>Resource URL</avm:ResourceURL>
|
91
|
+
<avm:RelatedResources>
|
92
|
+
<rdf:Bag>
|
93
|
+
<rdf:li>Resource 1</rdf:li>
|
94
|
+
<rdf:li>Resource 2</rdf:li>
|
95
|
+
</rdf:Bag>
|
96
|
+
</avm:RelatedResources>
|
97
|
+
<avm:MetadataDate>2010-01-05</avm:MetadataDate>
|
98
|
+
<avm:MetadataVersion>1.2</avm:MetadataVersion>
|
99
|
+
</rdf:Description>
|
100
|
+
</rdf:RDF>
|
101
|
+
</x:xmpmeta>
|