Skip to content

Commit 83a8a40

Browse files
authored
Merge pull request #39 from lcnetdev/v3.0-dev
V3.0
2 parents 1e8f75b + 3d72674 commit 83a8a40

137 files changed

Lines changed: 9201 additions & 1365 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

NEWS

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
--- 3.0.0 2025/12/02
2+
3+
Changes for updated v3.0.0 specifications:
4+
5+
Instance-bf2marc
6+
Adjusted creation of MARC 024 $2 to includes URIs from the source resource
7+
Work-bf2marc
8+
Added creation of 382 field from new bf:ensembleSize/EnsembleSize and bf:mediumComponent/MediumComponent
9+
Added creation of 383 field from new identifier subclasses bf:SerialNumber, bf:OpusNumber, bf:ThematicCatalogNumber
10+
Added creation of 384 field from new bf:keyMode/KeyMode
11+
AdminMetadata-bf2marc
12+
Added creation of MARC Leader byte 17=2
13+
114
--- 2.10 2025/07/23
215

316
Changes for updated v2.10.0 specifications:

release-notes.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# bibframe2marc release notes
22

3+
## v3.0.0
4+
5+
Conversion updates based on specifications v3.0.0. See the Library of Congress’s [BIBFRAME site](https://www.loc.gov/bibframe/) for more details. Specifications are included in the distribution in the [spec](spec/) directory. Changes of note:
6+
7+
* Updated creation of MARC 382, 383 and 384 fields using new properties and classes from the Performed Music Ontology that have been added to the BIBFRAME ontology.
8+
* Updated creation of 024 $2 to includes URIs from the Standard Identifiers Source Codes list.
9+
* Updated creation of MARC Leader byte 17=2
10+
11+
See the [NEWS](NEWS) file for full details of changes. Changes from v2.10.0 in the specifications are marked in red.
12+
313
## v2.10.0
414

515
Conversion updates based on specifications v2.10. See the Library of Congress’s [BIBFRAME site](https://www.loc.gov/bibframe/) for more details. Specifications are included in the distribution in the [spec](spec/) directory. Changes of note:

rules/01-001-008.xml

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,16 @@
126126
</case>
127127
</switch>
128128

129+
<switch>
130+
<case test="$pConversionAgency = 'DLC' and
131+
/rdf:RDF/bf:Instance/bf:carrier//@rdf:*[1] = 'http://id.loc.gov/vocabulary/carriers/cr' and
132+
contains(/rdf:RDF/bf:Instance/bf:note/bf:Note[rdf:type/@rdf:resource='http://id.loc.gov/vocabulary/mnotetype/descsource']/rdfs:label, 'Description based on print version record')
133+
">
134+
<cf tag="006">
135+
<transform><xsl:value-of select="'m |o d | '"/></transform>
136+
</cf>
137+
</case>
138+
</switch>
129139

130140
<cf tag="007" repeatable="true">
131141
<context xpath="/rdf:RDF/bf:Instance">
@@ -601,16 +611,36 @@
601611
bf:Instance/bf:provisionActivity/bf:ProvisionActivity[rdf:type/@rdf:resource = 'http://id.loc.gov/ontologies/bibframe/Production']/bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf'
602612
or
603613
bf:Instance/bf:provisionActivity/bf:Production/bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf'
614+
or
615+
bf:Instance/bf:provisionActivity/bf:ProvisionActivity[rdf:type/@rdf:resource = 'http://id.loc.gov/ontologies/bibframe/Manufacture']/bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf'
616+
or
617+
bf:Instance/bf:provisionActivity/bf:Manufacture/bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf'
618+
or
619+
bf:Instance/bf:provisionActivity/bf:ProvisionActivity[rdf:type/@rdf:resource = 'http://id.loc.gov/ontologies/bibframe/Distribution']/bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf'
620+
or
621+
bf:Instance/bf:provisionActivity/bf:Distribution/bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf'
604622
">
605623
<transform>
606624
<xsl:variable name="vPAprenodeset">
607625
<xsl:choose>
608626
<xsl:when test="bf:Instance/bf:provisionActivity/bf:Production/bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf'">
609627
<xsl:copy-of select="bf:Instance/bf:provisionActivity/bf:Production[bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf']" />
610628
</xsl:when>
611-
<xsl:otherwise>
612-
<xsl:copy-of select="bf:Instance/bf:provisionActivity/bf:ProvisionActivity[rdf:type/@rdf:resource = 'http://id.loc.gov/ontologies/bibframe/Production' and bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf']" />
613-
</xsl:otherwise>
629+
<xsl:when test="bf:Instance/bf:provisionActivity/bf:ProvisionActivity[rdf:type/@rdf:resource = 'http://id.loc.gov/ontologies/bibframe/Production' and bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf']">
630+
<xsl:copy-of select="bf:Instance/bf:provisionActivity/bf:ProvisionActivity[rdf:type/@rdf:resource = 'http://id.loc.gov/ontologies/bibframe/Production' and bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf']" />
631+
</xsl:when>
632+
<xsl:when test="bf:Instance/bf:provisionActivity/bf:Manufacture/bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf'">
633+
<xsl:copy-of select="bf:Instance/bf:provisionActivity/bf:Manufacture[bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf']" />
634+
</xsl:when>
635+
<xsl:when test="bf:Instance/bf:provisionActivity/bf:ProvisionActivity[rdf:type/@rdf:resource = 'http://id.loc.gov/ontologies/bibframe/Manufacture' and bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf']">
636+
<xsl:copy-of select="bf:Instance/bf:provisionActivity/bf:ProvisionActivity[rdf:type/@rdf:resource = 'http://id.loc.gov/ontologies/bibframe/Manufacture' and bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf']" />
637+
</xsl:when>
638+
<xsl:when test="bf:Instance/bf:provisionActivity/bf:Distribution/bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf'">
639+
<xsl:copy-of select="bf:Instance/bf:provisionActivity/bf:Distribution[bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf']" />
640+
</xsl:when>
641+
<xsl:when test="bf:Instance/bf:provisionActivity/bf:ProvisionActivity[rdf:type/@rdf:resource = 'http://id.loc.gov/ontologies/bibframe/Distribution' and bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf']">
642+
<xsl:copy-of select="bf:Instance/bf:provisionActivity/bf:ProvisionActivity[rdf:type/@rdf:resource = 'http://id.loc.gov/ontologies/bibframe/Distribution' and bf:date/@rdf:datatype = 'http://id.loc.gov/datatypes/edtf']" />
643+
</xsl:when>
614644
</xsl:choose>
615645
</xsl:variable>
616646
<xsl:variable name="vPA" select="exsl:node-set($vPAprenodeset)" />

rules/05-2XX.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@
603603
<case test="$v880Script != ''">
604604
<transform><xsl:value-of select="concat('245-03/',$v880Script)"/></transform>
605605
</case>
606-
<case test="default">245-01</case>
606+
<case test="default">245-03</case>
607607
</switch>
608608
</sf>
609609
<sf code="a" chopPunct="true" repeatable="false">

rules/06-3XX.xml

Lines changed: 124 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -959,15 +959,15 @@
959959
</df>
960960

961961
<df tag="382">
962-
<context xpath="bf:Work/bf:musicMedium/bf:MusicMedium[bflc:readMarc382]">
962+
<context xpath="bf:Work/bf:ensemble/bf:Ensemble|bf:Work/bf:musicMedium/bf:MusicMedium[bflc:readMarc382]">
963963
<ind1 default="0">
964964
<switch>
965965
<case test="bf:status/@rdf:resource='http://id.loc.gov/vocabulary/mstatus/part' or
966966
bf:status/bf:Status/@rdf:about='http://id.loc.gov/vocabulary/mstatus/part' or
967967
translate(bf:status/bf:Status/rdfs:label,$upper,$lower)='partial'">1</case>
968968
</switch>
969969
</ind1>
970-
<ind2 default=" "/>
970+
<ind2 default="1"/>
971971
<sf code="3" chopPunct="true" repeatable="false">
972972
<select xpath="bflc:appliesTo/bflc:AppliesTo/rdfs:label"/>
973973
</sf>
@@ -981,11 +981,100 @@
981981
</case>
982982
</switch>
983983
</var>
984-
<transform>
985-
<xsl:call-template name="tReadMarc382">
986-
<xsl:with-param name="pString" select="substring($v382data, 6)"/>
987-
</xsl:call-template>
988-
</transform>
984+
<switch>
985+
<case test="$v382data != ''">
986+
<transform>
987+
<xsl:call-template name="tReadMarc382">
988+
<xsl:with-param name="pString" select="substring($v382data, 6)"/>
989+
</xsl:call-template>
990+
</transform>
991+
</case>
992+
<case test="default">
993+
<select xpath="bf:mediumComponent/bf:MediumComponent[bf:mediumOfPerformance/*/rdfs:label]">
994+
<switch>
995+
<case test="bf:mediumComponentQualifier//@rdf:*[1] = 'http://id.loc.gov/vocabulary/medcompqual/solo'">
996+
<sf code="b" chopPunct="true"><select xpath="bf:mediumOfPerformance/*/rdfs:label"/></sf>
997+
</case>
998+
<case test="default">
999+
<sf code="a" chopPunct="true"><select xpath="bf:mediumOfPerformance/*/rdfs:label"/></sf>
1000+
</case>
1001+
</switch>
1002+
<sf code="n" chopPunct="true" repeatable="false">
1003+
<select xpath="bf:count"/>
1004+
</sf>
1005+
<select xpath="bf:note/bf:Note[rdf:type/@rdf:resource='http://id.loc.gov/vocabulary/mnotetype/alternative']/rdfs:label">
1006+
<sf code="p" chopPunct="true" repeatable="false"><select xpath="." /></sf>
1007+
</select>
1008+
<select xpath="bf:note/bf:Note[rdf:type/@rdf:resource='http://id.loc.gov/vocabulary/mnotetype/doubling']/rdfs:label">
1009+
<sf code="d" chopPunct="true" repeatable="false"><select xpath="." /></sf>
1010+
</select>
1011+
<sf code="v" chopPunct="true" repeatable="false">
1012+
<select xpath="bf:note/bf:Note[not(rdf:type)]/rdfs:label"/>
1013+
</sf>
1014+
</select>
1015+
<switch>
1016+
<case test="bf:ensembleSize//@rdf:*[. = 'http://id.loc.gov/vocabulary/ensemblesize/ensemble']">
1017+
<sf code="t">
1018+
<transform><xsl:value-of select="'1'" /></transform>
1019+
</sf>
1020+
</case>
1021+
<case test="bf:ensembleSize//@rdf:*[. = 'http://id.loc.gov/vocabulary/ensemblesize/soloind']">
1022+
<sf code="s">
1023+
<transform><xsl:value-of select="'1'" /></transform>
1024+
</sf>
1025+
</case>
1026+
<case test="bf:ensembleSize//@rdf:*[. = 'http://id.loc.gov/vocabulary/ensemblesize/duo']">
1027+
<sf code="s">
1028+
<transform><xsl:value-of select="'2'" /></transform>
1029+
</sf>
1030+
</case>
1031+
<case test="bf:ensembleSize//@rdf:*[. = 'http://id.loc.gov/vocabulary/ensemblesize/trio']">
1032+
<sf code="s">
1033+
<transform><xsl:value-of select="'3'" /></transform>
1034+
</sf>
1035+
</case>
1036+
<case test="bf:ensembleSize//@rdf:*[. = 'http://id.loc.gov/vocabulary/ensemblesize/quartet']">
1037+
<sf code="s">
1038+
<transform><xsl:value-of select="'4'" /></transform>
1039+
</sf>
1040+
</case>
1041+
<case test="bf:ensembleSize//@rdf:*[. = 'http://id.loc.gov/vocabulary/ensemblesize/quintet']">
1042+
<sf code="s">
1043+
<transform><xsl:value-of select="'5'" /></transform>
1044+
</sf>
1045+
</case>
1046+
<case test="bf:ensembleSize//@rdf:*[. = 'http://id.loc.gov/vocabulary/ensemblesize/sextet']">
1047+
<sf code="s">
1048+
<transform><xsl:value-of select="'6'" /></transform>
1049+
</sf>
1050+
</case>
1051+
<case test="bf:ensembleSize//@rdf:*[. = 'http://id.loc.gov/vocabulary/ensemblesize/septet']">
1052+
<sf code="s">
1053+
<transform><xsl:value-of select="'7'" /></transform>
1054+
</sf>
1055+
</case>
1056+
<case test="bf:ensembleSize//@rdf:*[. = 'http://id.loc.gov/vocabulary/ensemblesize/octet']">
1057+
<sf code="s">
1058+
<transform><xsl:value-of select="'8'" /></transform>
1059+
</sf>
1060+
</case>
1061+
<case test="bf:ensembleSize//@rdf:*[. = 'http://id.loc.gov/vocabulary/ensemblesize/nonet']">
1062+
<sf code="s">
1063+
<transform><xsl:value-of select="'9'" /></transform>
1064+
</sf>
1065+
</case>
1066+
</switch>
1067+
<switch>
1068+
<case test="bf:mediumComponent/bf:MediumComponent/bf:mediumOfPerformance//@rdf:*[contains(., 'authorities/performanceMediums')] or
1069+
bf:mediumComponent/bf:MediumComponent/bf:mediumOfPerformance//bf:source//@rdf:*[contains(., 'authorities/performanceMediums')] or
1070+
bf:mediumComponent/bf:MediumComponent/bf:mediumOfPerformance//bf:source//bf:code[. = 'lcmpt']">
1071+
<sf code="2">
1072+
<transform><xsl:value-of select="'lcmpt'" /></transform>
1073+
</sf>
1074+
</case>
1075+
</switch>
1076+
</case>
1077+
</switch>
9891078
</context>
9901079
</df>
9911080

@@ -1016,10 +1105,37 @@
10161105
</case>
10171106
</switch>
10181107

1108+
<df tag="383" lang-xpath=".">
1109+
<context xpath="bf:Work/bf:identifiedBy/bf:SerialNumber[rdf:value] |
1110+
bf:Work/bf:identifiedBy/bf:OpusNumber[rdf:value] |
1111+
bf:Work/bf:identifiedBy/bf:ThematicCatalogNumber[rdf:value] ">
1112+
<ind1 default = " "/>
1113+
<ind2 default = " "/>
1114+
<sf code="3" chopPunct="true" repeatable="false">
1115+
<select xpath="bflc:appliesTo/bflc:AppliesTo/rdfs:label"/>
1116+
</sf>
1117+
<switch>
1118+
<case test="local-name() = 'SerialNumber'">
1119+
<sf code="a" chopPunct="true"><select xpath="rdf:value"/></sf>
1120+
</case>
1121+
<case test="local-name() = 'OpusNumber'">
1122+
<sf code="b" chopPunct="true"><select xpath="rdf:value"/></sf>
1123+
<sf code="e" chopPunct="true"><select xpath="bf:source//bf:code"/></sf>
1124+
</case>
1125+
<case test="local-name() = 'ThematicCatalogNumber'">
1126+
<sf code="c" chopPunct="true"><select xpath="rdf:value"/></sf>
1127+
<sf code="d" chopPunct="true"><select xpath="bf:source//bf:code"/></sf>
1128+
<sf code="2" chopPunct="true"><transform><xsl:value-of select="'mlati'" /></transform></sf>
1129+
</case>
1130+
</switch>
1131+
</context>
1132+
</df>
1133+
10191134
<df tag="384" lang-xpath=".">
1020-
<context xpath="bf:Work/bf:musicKey">
1135+
<context xpath="bf:Work/bf:musicKey|bf:Work/bf:keyMode/bf:KeyMode/rdfs:label">
10211136
<ind1 default = " "/>
10221137
<ind2 default = " "/>
1138+
<sf code="3" chopPunct="true"><select xpath="parent::bf:KeyMode/bflc:appliesTo/bflc:AppliesTo/rdfs:label"/></sf>
10231139
<sf code="a" chopPunct="true"><select xpath="."/></sf>
10241140
</context>
10251141
</df>

rules/08-6XX.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -702,7 +702,7 @@
702702
local-name(madsrdf:componentList/*[1])='Person' or madsrdf:componentList/*[1]/rdf:type/@rdf:resource='http://id.loc.gov/ontologies/bibframe/Person' or
703703
local-name(madsrdf:componentList/*[1])='Family' or madsrdf:componentList/*[1]/rdf:type/@rdf:resource='http://id.loc.gov/ontologies/bibframe/Family' or
704704
bf:contribution/*/bf:agent/*[local-name()='PersonalName' or rdf:type[@rdf:resource='http://www.loc.gov/mads/rdf/v1#PersonalName'] or local-name()='FamilyName' or rdf:type[@rdf:resource='http://www.loc.gov/mads/rdf/v1#FamilyName'] or local-name()='Person' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Person'] or local-name()='Family' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Family']] or
705-
madsrdf:componentList/*[1]/bf:contribution/*/bf:agent/*[local-name()='PersonalName' or rdf:type[@rdf:resource='http://www.loc.gov/mads/rdf/v1#PersonalName'] or local-name()='FamilyName' or rdf:type[@rdf:resource='http://www.loc.gov/mads/rdf/v1#FamilyName'] or local-name()='Person' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Person'] or local-name()='Family' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Family']] or
705+
madsrdf:componentList/*[1]/bf:contribution/*[local-name()='PrimaryContribution' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/PrimaryContribution']]/bf:agent/*[local-name()='PersonalName' or rdf:type[@rdf:resource='http://www.loc.gov/mads/rdf/v1#PersonalName'] or local-name()='FamilyName' or rdf:type[@rdf:resource='http://www.loc.gov/mads/rdf/v1#FamilyName'] or local-name()='Person' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Person'] or local-name()='Family' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Family']] or
706706
madsrdf:componentList/*[1]/bflc:marcKey[starts-with(., '100')]) and
707707
(madsrdf:componentList or madsrdf:authoritativeLabel)]">
708708
<df tag="600">
@@ -913,7 +913,7 @@
913913
local-name(madsrdf:componentList/*[1])='Organization' or madsrdf:componentList/*[1]/rdf:type/@rdf:resource='http://id.loc.gov/ontologies/bibframe/Organization' or
914914
local-name(madsrdf:componentList/*[1])='Jurisdiction' or madsrdf:componentList/*[1]/rdf:type/@rdf:resource='http://id.loc.gov/ontologies/bibframe/Jurisdiction' or
915915
bf:contribution/*/bf:agent/*[local-name()='CorporateName' or rdf:type[@rdf:resource='http://www.loc.gov/mads/rdf/v1#CorporateName'] or local-name()='Organization' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Organization'] or local-name()='Jurisdiction' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Jurisdiction']] or
916-
madsrdf:componentList/*[1]/bf:contribution/*/bf:agent/*[local-name()='CorporateName' or rdf:type[@rdf:resource='http://www.loc.gov/mads/rdf/v1#CorporateName'] or local-name()='Organization' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Organization'] or local-name()='Jurisdiction' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Jurisdiction']] or
916+
madsrdf:componentList/*[1]/bf:contribution/*[local-name()='PrimaryContribution' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/PrimaryContribution']]/bf:agent/*[local-name()='CorporateName' or rdf:type[@rdf:resource='http://www.loc.gov/mads/rdf/v1#CorporateName'] or local-name()='Organization' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Organization'] or local-name()='Jurisdiction' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Jurisdiction']] or
917917
madsrdf:componentList/*[1]/bflc:marcKey[starts-with(., '110')]) and
918918
(madsrdf:componentList or madsrdf:authoritativeLabel)]">
919919

@@ -1120,7 +1120,7 @@
11201120
local-name(madsrdf:componentList/*[1])='ConferenceName' or madsrdf:componentList/*[1]/rdf:type/@rdf:resource='http://www.loc.gov/mads/rdf/v1#ConferenceName' or
11211121
local-name(madsrdf:componentList/*[1])='Meeting' or madsrdf:componentList/*[1]/rdf:type/@rdf:resource='http://id.loc.gov/ontologies/bibframe/Meeting' or
11221122
bf:contribution/*/bf:agent/*[local-name()='ConferenceName' or rdf:type[@rdf:resource='http://www.loc.gov/mads/rdf/v1#ConferenceName'] or local-name()='Meeting' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Meeting']] or
1123-
madsrdf:componentList/*[1]/bf:contribution/*/bf:agent/*[local-name()='ConferenceName' or rdf:type[@rdf:resource='http://www.loc.gov/mads/rdf/v1#ConferenceName'] or local-name()='Meeting' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Meeting']] or
1123+
madsrdf:componentList/*[1]/bf:contribution/*[local-name()='PrimaryContribution' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/PrimaryContribution']]/bf:agent/*[local-name()='ConferenceName' or rdf:type[@rdf:resource='http://www.loc.gov/mads/rdf/v1#ConferenceName'] or local-name()='Meeting' or rdf:type[@rdf:resource='http://id.loc.gov/ontologies/bibframe/Meeting']] or
11241124
madsrdf:componentList/*[1]/bflc:marcKey[starts-with(., '111')]) and
11251125
(madsrdf:componentList or madsrdf:authoritativeLabel)]">
11261126
<df tag="611">

0 commit comments

Comments
 (0)