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