datafile = "#{ARGV[0]}"
outfile = File.open("#{ARGV[1]}", 'w')
prefixes = %(
@prefix sul: .
@prefix bf: .
@prefix rdf: .
@prefix rdfs: .
@prefix edtf: .
@prefix bflc: .
)
wii = %(
sul:Work_{druid} a bf:Work ;
bf:instance sul:Instance_{druid} .
sul:Instance_{druid} a bf:Instance ;
bf:item sul:Item_{druid} .
sul:Item_{druid} a bf:Item .
)
druid = %(
sul:Identifier_{druid}_01 a bf:Local ;
rdf:value "{druid}" .
sul:Item_{druid} bf:identifiedBy sul:Identifier_{druid}_01 .
)
sourceId = %(
sul:Identifier_{druid}_02 a bf:Local ;
rdf:value "{sourceId}" .
sul:Item_{druid} bf:identifiedBy sul:Identifier_{druid}_02 .
)
ti1_title = %(
sul:Title_{druid} a bf:Title ;
bf:mainTitle "{ti1:title}" ;
rdfs:label "{ti1:title}" .
sul:Instance_{druid} bf:title sul:Title_{druid} .
)
name_role_theater_company = %(
sul:Agent_{druid}_XX a bf:Organization ;
rdfs:label "{naX:namePart}" .
sul:Role_{druid}_XX a bf:Role ;
rdfs:label "{roX:roleText}" .
sul:Contribution_{druid}_XX a bf:Contribution ;
bf:agent sul:Agent_{druid}_XX ;
bf:role sul:Role_{druid}_XX .
sul:Instance_{druid} bf:contribution sul:Contribution_{druid}_XX .
)
name_type_corporate = %(
sul:Agent_{druid}_XX a bf:Organization ;
rdfs:label "{naX:namePart}" .
sul:Contribution_{druid}_XX a bf:Contribution ;
bf:agent sul:Agent_{druid}_XX ;
bf:role <{roX:valueURI}> .
sul:Work_{druid} bf:contribution sul:Contribution_{druid}_XX .
)
name_type_personal = %(
sul:Agent_{druid}_XX a bf:Person ;
rdfs:label "{naX:namePart}" .
sul:Contribution_{druid}_XX a bf:Contribution ;
bf:agent sul:Agent_{druid}_XX ;
bf:role <{roX:valueURI}> .
sul:Work_{druid} bf:contribution sul:Contribution_{druid}_XX .
)
type_of_resource_mixed_material = %(
sul:Work_{druid} a bf:MixedMaterial .
)
type_of_resource_still_image = %(
sul:Work_{druid} a bf:StillImage .
)
type_of_resource_text = %(
sul:Work_{druid} a bf:Text .
)
type_of_resource_three_dimensional_object = %(
sul:Work_{druid} a bf:Object .
)
genre = %(
sul:Genre_{druid} a bf:GenreForm ;
rdfs:label "{ge1:genre}" ;
bf:source <{ge1:authorityURI}> .
sul:Work_{druid} bf:genreForm sul:Genre_{druid} .
)
date_created_range_qualified = %(
sul:Work_{druid} bf:originDate "{dt:dateCreated}~/{dt:dateCreated2}~"^^edtf:EDTF .
)
date_created_qualified = %(
sul:Work_{druid} bf:originDate "{dt:dateCreated}~"^^edtf:EDTF .
)
date_created_place_text = %(
sul:Place_{druid} a bf:Place ;
rdfs:label "{pl:placeText}" .
sul:ProvisionActivity_{druid} a bf:ProvisionActivity ;
bf:place sul:Place_{druid} .
sul:Instance_{druid} bf:provisionActivity sul:ProvisionActivity_{druid} .
)
date_issued_qualified = %(
sul:Publication_{druid} a bf:Publication ;
bf:date "{dt:dateIssued}~"^^edtf:EDTF .
sul:Instance_{druid} bf:provisionActivity sul:Publication_{druid} .
)
date_issued_qualified_place_text = %(
sul:Place_{druid} a bf:Place ;
rdfs:label "{pl:placeText}" .
sul:Publication_{druid} a bf:Publication ;
bf:place sul:Place_{druid} ;
bf:date "{dt:dateIssued}~"^^edtf:EDTF .
sul:Instance_{druid} bf:provisionActivity sul:Publication_{druid} .
)
language = %(
sul:Work_{druid} bf:language <{la1:valueURI}> .
)
form = %(
sul:Carrier_{druid} a bf:Carrier ;
rdfs:label "{ph1:form}" .
sul:Instance_{druid} bf:carrier sul:Carrier_{druid} .
)
extent = %(
sul:Extent_{druid} a bf:Extent ;
rdfs:label "{ph1:extent}" .
sul:Instance_{druid} bf:extent sul:Extent_{druid} .
)
internet_media_type = %(
sul:EncodingFormat_{druid} a bf:DigitalCharacteristic , bf:EncodingFormat ;
rdfs:label "Internet media type: {ph1:internetMediaType}" .
sul:Instance_{druid} bf:digitalCharacteristic sul:EncodingFormat_{druid} .
)
abstract = %(
sul:Summary_{druid} a bf:Summary ;
rdfs:label "{ab:abstract}" .
sul:Work_{druid} bf:summary sul:Summary_{druid} .
)
note_creation_production_credits = %(
sul:Work_{druid} bf:credits "{no1:note}" .
)
note_date = %(
sul:Note_{druid}_1 a bf:Note ;
bf:noteType "date" ;
rdfs:label "{no2:note}" .
sul:Work_{druid} bf:note sul:Note_{druid}_1 .
)
note_copyright = %(
sul:Note_{druid}_2 a bf:Note ;
bf:noteType "copyright" ;
rdfs:label "{no3:note}" .
sul:Work_{druid} bf:note sul:Note_{druid}_2 .
)
subject = %(
sul:Subject_{druid} a bf:Topic ;
rdfs:label "{su1:value}" .
sul:Work_{druid} bf:subject sul:Subject_{druid} .
)
repository = %(
sul:Repository_{druid} a bf:Organization ;
rdfs:label "{lo:repository}" .
sul:Item_{druid} bf:heldBy sul:Repository_{druid} .
)
purl = %(
sul:Purl_note_{druid} a bf:Note ;
bf:noteType "URL usage" ;
rdfs:label "primary display" .
sul:Purl_{druid} a rdf:Resource ;
bflc:locator <{lo:purl}> ;
bf:note sul:Purl_note_{druid} .
sul:Item_{druid} bf:electronicLocator sul:Purl_{druid} .
)
record_info = %(
sul:AdminMetadata_{druid} a bf:AdminMetadata ;
bf:assigner <{rc:contentSourceValueURI}> ;
bf:descriptionLanguage <{rc:langValueURI}> .
sul:Work_{druid} bf:adminMetadata sul:AdminMetadata_{druid} .
)
outfile.write(prefixes)
headers = []
File.foreach(datafile) do |line|
row = {}
fields = line.strip.split("\t")
if fields[0] == 'druid'
headers = fields
next
else
row = headers.zip(fields).to_h
end
next if (row["druid"] == nil || row["druid"].strip.empty?)
outfile.write(wii.gsub("{druid}", row["druid"]))
outfile.write(druid.gsub("{druid}", row["druid"]))
outfile.write(sourceId.gsub("{druid}", row["druid"]).gsub("{sourceId}", row["sourceId"]))
outfile.write(ti1_title.gsub("{druid}", row["druid"]).gsub("{ti1:title}", row["ti1:title"]))
["1", "2", "3"].each do |x|
next if (row["na#{x}:namePart"] == nil || row["na#{x}:namePart"].strip.empty?)
if row["ro#{x}:roleText"] == "theater company"
name_role_pattern = name_role_theater_company.gsub("_XX", "_#{x}")
elsif row["na#{x}:type"] == "corporate"
name_role_pattern = name_type_corporate.gsub("_XX", "_#{x}")
elsif row["na#{x}:type"] == "personal"
name_role_pattern = name_type_personal.gsub("_XX", "_#{x}")
end
outfile.write(name_role_pattern.gsub("{druid}", row["druid"]).gsub("{naX:namePart}", row["na#{x}:namePart"]).gsub("{roX:valueURI}", row["ro#{x}:valueURI"]))
end
case row["ty1:typeOfResource"]
when "mixed material"
outfile.write(type_of_resource_mixed_material.gsub("{druid}", row["druid"]))
when "still image"
outfile.write(type_of_resource_still_image.gsub("{druid}", row["druid"]))
when "text"
outfile.write(type_of_resource_text.gsub("{druid}", row["druid"]))
when "three dimensional object"
outfile.write(type_of_resource_three_dimensional_object.gsub("{druid}", row["druid"]))
end
outfile.write(genre.gsub("{druid}", row["druid"]).gsub("{ge1:genre}", row["ge1:genre"]).gsub("{ge1:authorityURI}", row["ge1:authorityURI"]))
if !row["dt:dateCreated"].empty? && !row["dt:dateCreated2"].empty? && !row["dt:dateCreatedQualifier"].empty?
outfile.write(date_created_range_qualified.gsub("{druid}", row["druid"]).gsub("{dt:dateCreated}", row["dt:dateCreated"]).gsub("{dt:dateCreated2}", row["dt:dateCreated2"]))
elsif !row["dt:dateCreated"].empty? && !row["dt:dateCreatedQualifier"].empty?
outfile.write(date_created_qualified.gsub("{druid}", row["druid"]).gsub("{dt:dateCreated}", row["dt:dateCreated"]))
end
if !row["dt:dateCreated"].empty? && !row["pl:placeText"].empty?
outfile.write(date_created_place_text.gsub("{druid}", row["druid"]).gsub("{pl:placeText}", row["pl:placeText"]))
end
if !row["dt:dateIssued"].empty? && !row["dt:dateIssuedQualifier"].empty? && !row["pl:placeText"].empty?
outfile.write(date_issued_qualified_place_text.gsub("{druid}", row["druid"]).gsub("{dt:dateIssued}", row["dt:dateIssued"]).gsub("{pl:placeText}", row["pl:placeText"]))
elsif !row["dt:dateIssued"].empty?
outfile.write(date_issued_qualified.gsub("{druid}", row["druid"]).gsub("{dt:dateIssued}", row["dt:dateIssued"]))
end
outfile.write(language.gsub("{druid}", row["druid"]).gsub("{la1:valueURI}", row["la1:valueURI"])) if !row["la1:valueURI"].empty?
outfile.write(form.gsub("{druid}", row["druid"]).gsub("{ph1:form}", row["ph1:form"])) if !row["ph1:form"].empty?
outfile.write(extent.gsub("{druid}", row["druid"]).gsub("{ph1:extent}", row["ph1:extent"])) if !row["ph1:extent"].empty?
outfile.write(internet_media_type.gsub("{druid}", row["druid"]).gsub("{ph1:internetMediaType}", row["ph1:internetMediaType"])) if !row["ph1:internetMediaType"].empty?
outfile.write(abstract.gsub("{druid}", row["druid"]).gsub("{ab:abstract}", row["ab:abstract"])) if !row["ab:abstract"].empty?
outfile.write(note_creation_production_credits.gsub("{druid}", row["druid"]).gsub("{no1:note}", row["no1:note"])) if !row["no1:note"].empty?
outfile.write(note_date.gsub("{druid}", row["druid"]).gsub("{no2:note}", row["no2:note"])) if !row["no2:note"].empty?
outfile.write(note_copyright.gsub("{druid}", row["druid"]).gsub("{no3:note}", row["no3:note"])) if !row["no3:note"].empty?
outfile.write(subject.gsub("{druid}", row["druid"]).gsub("{su1:value}", row["su1:value"])) if !row["su1:value"].empty?
outfile.write(repository.gsub("{druid}", row["druid"]).gsub("{lo:repository}", row["lo:repository"])) if !row["lo:repository"].empty?
outfile.write(purl.gsub("{druid}", row["druid"]).gsub("{lo:purl}", row["lo:purl"])) if !row["lo:purl"].empty?
outfile.write(record_info.gsub("{druid}", row["druid"]).gsub("{rc:langValueURI}", row["rc:langValueURI"]).gsub("{rc:contentSourceValueURI}", row["rc:contentSourceValueURI"]))
end
outfile.close