Lines 45-51
BEGIN {
Link Here
|
45 |
|
45 |
|
46 |
} |
46 |
} |
47 |
|
47 |
|
48 |
use Encode qw(encode decode); |
48 |
use Encode qw(is_utf8 encode decode); |
49 |
use MARC::File::USMARC; |
49 |
use MARC::File::USMARC; |
50 |
use MARC::Crosswalk::DublinCore; |
50 |
use MARC::Crosswalk::DublinCore; |
51 |
use XML::LibXML; |
51 |
use XML::LibXML; |
Lines 258-266
sub write_xml {
Link Here
|
258 |
if ( $dataxml->{'entities'} == 1 ) { |
258 |
if ( $dataxml->{'entities'} == 1 ) { |
259 |
my @xml = $doc->toString(1); |
259 |
my @xml = $doc->toString(1); |
260 |
foreach (@xml) { |
260 |
foreach (@xml) { |
261 |
my ($dcxml_entity_encoded) = |
261 |
my $enc = Encode::find_encoding('utf-8'); |
262 |
XML_entity_encode( Encode::decode( 'UTF-8', $_ ) ); |
262 |
if ( Encode::is_utf8( $_ ) ) { |
263 |
$xml[-1] = $dcxml_entity_encoded; |
263 |
my ($dcxml_entity_encoded) = |
|
|
264 |
XML_entity_encode( $_ ); |
265 |
$xml[-1] = $dcxml_entity_encoded; |
266 |
} elsif ( $enc ) { |
267 |
my ($dcxml_entity_encoded) = |
268 |
XML_entity_encode( $enc->decode( $_ ) ); |
269 |
$xml[-1] = $dcxml_entity_encoded; |
270 |
} |
264 |
} |
271 |
} |
265 |
my $xmljoiner = join "", @xml; |
272 |
my $xmljoiner = join "", @xml; |
266 |
return $xmljoiner; |
273 |
return $xmljoiner; |
Lines 332-340
sub write_rdf {
Link Here
|
332 |
{ |
339 |
{ |
333 |
my @xml = $rdf->serialize( format => $rdfdescription->{'rdf_format'} ); |
340 |
my @xml = $rdf->serialize( format => $rdfdescription->{'rdf_format'} ); |
334 |
foreach (@xml) { |
341 |
foreach (@xml) { |
335 |
my ($dcxml_entity_encoded) = |
342 |
my $enc = Encode::find_encoding('utf-8'); |
336 |
XML_entity_encode( Encode::decode( 'UTF-8', $_ ) ); |
343 |
if ( Encode::is_utf8( $_ ) ) { |
337 |
$xml[-1] = $dcxml_entity_encoded; |
344 |
my ($dcxml_entity_encoded) = |
|
|
345 |
XML_entity_encode( $_ ); |
346 |
$xml[-1] = $dcxml_entity_encoded; |
347 |
} elsif ( $enc ) { |
348 |
my ($dcxml_entity_encoded) = |
349 |
XML_entity_encode( $enc->decode( $_ ) ); |
350 |
$xml[-1] = $dcxml_entity_encoded; |
351 |
} |
338 |
} |
352 |
} |
339 |
my $xmljoiner = join "", @xml; |
353 |
my $xmljoiner = join "", @xml; |
340 |
return $xmljoiner; |
354 |
return $xmljoiner; |
Lines 342-348
sub write_rdf {
Link Here
|
342 |
elsif ( $rdfdescription->{'rdf_format'} eq 'rdfjson' ) { |
356 |
elsif ( $rdfdescription->{'rdf_format'} eq 'rdfjson' ) { |
343 |
my $encoding = |
357 |
my $encoding = |
344 |
$rdf->serialize( format => $rdfdescription->{'rdf_format'} ); |
358 |
$rdf->serialize( format => $rdfdescription->{'rdf_format'} ); |
345 |
$encoding = Encode::encode( 'UTF-8', $encoding ); |
359 |
my $enc = Encode::find_encoding('iso-8859-1'); |
|
|
360 |
Encode::is_utf8 ( $encoding ) ? $encoding : $enc->decode ( $encoding ); |
346 |
return $encoding; |
361 |
return $encoding; |
347 |
} |
362 |
} |
348 |
else { |
363 |
else { |
Lines 524-547
sub rdf_constructor {
Link Here
|
524 |
$deletespaces =~ s/\s//; |
539 |
$deletespaces =~ s/\s//; |
525 |
my $predicate = 'dcterms:' . $lowercase; |
540 |
my $predicate = 'dcterms:' . $lowercase; |
526 |
my $object = $element_content; |
541 |
my $object = $element_content; |
527 |
given ($element_scheme) { |
542 |
SWITCH: |
528 |
when ( $element_scheme ne "DCMI Type Vocabulary" ) { |
543 |
for ($element_scheme) { |
|
|
544 |
if ( /^ISO 3166/ ) { |
529 |
|
545 |
|
530 |
# Dublin core returns DCMI Type Vocabulary |
546 |
# Dublin core returns DCMI Type Vocabulary |
531 |
# This will do something like: |
547 |
# This will do something like: |
532 |
# <rdf:Description rdf:nodeID="ISO3166"> |
548 |
# <rdf:Description rdf:nodeID="country"> |
533 |
# <dcam:memberOf rdf:resource="http://purl.org/dc/terms/ISO3166"/> |
549 |
# <dcam:memberOf rdf:resource="http://purl.org/dc/terms/ISO3166"/> |
534 |
# <rdf:value>us</rdf:value> |
550 |
# <rdf:value>us</rdf:value> |
535 |
# </rdf:Description> |
551 |
# </rdf:Description> |
536 |
# <dcterms:spatial rdf:nodeID="ISO3166"/> |
552 |
# <dcterms:spatial rdf:nodeID="country"/> |
537 |
my $bnode = $rdf->new_bnode($deletespaces); |
553 |
my $bnode = $rdf->new_bnode("country"); |
538 |
my $uri_resource = join "", $qualified, $deletespaces; |
554 |
my $uri_resource = join "", $qualified, $deletespaces; |
539 |
my $resource = $rdf->new_resource($uri_resource); |
555 |
my $resource = $rdf->new_resource($uri_resource); |
540 |
$rdf->assert_literal( $subject, $predicate, $bnode ); |
556 |
$rdf->assert_literal( $subject, $predicate, $bnode ); |
541 |
$rdf->assert_literal( $bnode, 'dcam:memberOf', $resource ); |
557 |
$rdf->assert_literal( $bnode, 'dcam:memberOf', $resource ); |
542 |
$rdf->assert_literal( $bnode, 'rdf:value', $object ); |
558 |
$rdf->assert_literal( $bnode, 'rdf:value', $object ); |
|
|
559 |
last SWITCH; |
543 |
} |
560 |
} |
544 |
when ( $element_scheme eq "DCMI Type Vocabulary" ) |
561 |
if ( /^DCMI Type Vocabulary/ ) |
545 |
{ #Changing for DCMIType |
562 |
{ #Changing for DCMIType |
546 |
my $bnode = $rdf->new_bnode('DCMIType'); |
563 |
my $bnode = $rdf->new_bnode('DCMIType'); |
547 |
my $uri_resource = $qualified . 'DCMIType'; |
564 |
my $uri_resource = $qualified . 'DCMIType'; |
Lines 550-555
sub rdf_constructor {
Link Here
|
550 |
$rdf->assert_literal( $bnode, 'dcam:memberOf', $resource ); |
567 |
$rdf->assert_literal( $bnode, 'dcam:memberOf', $resource ); |
551 |
$rdf->assert_literal( $bnode, 'rdf:value', $object ); |
568 |
$rdf->assert_literal( $bnode, 'rdf:value', $object ); |
552 |
} |
569 |
} |
|
|
570 |
if ( /^ISO 639-2/ ) |
571 |
{ #Changing bnodeId ISO639-2 for language |
572 |
my $bnode = $rdf->new_bnode('language'); |
573 |
my $uri_resource = join "", $qualified, $deletespaces; |
574 |
my $resource = $rdf->new_resource($uri_resource); |
575 |
$rdf->assert_literal( $subject, $predicate, $bnode ); |
576 |
$rdf->assert_literal( $bnode, 'dcam:memberOf', $resource ); |
577 |
$rdf->assert_literal( $bnode, 'rdf:value', $object ); |
578 |
} |
579 |
if ( /^RFC 1766/ ) |
580 |
{ #Changing bnodeId RFC1766 for languagetag |
581 |
my $bnode = $rdf->new_bnode('languagetag'); |
582 |
my $uri_resource = join "", $qualified, $deletespaces; |
583 |
my $resource = $rdf->new_resource($uri_resource); |
584 |
$rdf->assert_literal( $subject, $predicate, $bnode ); |
585 |
$rdf->assert_literal( $bnode, 'dcam:memberOf', $resource ); |
586 |
$rdf->assert_literal( $bnode, 'rdf:value', $object ); |
587 |
} |
588 |
if ( /^LCSH/ || /^MeSH/ || /^LCC/ || /^DDC/ || |
589 |
/^UDC/ || /^IMT/ || /^URI/ || /^TGN/ ) |
590 |
{ #Scheme sharing common elements |
591 |
my $bnode = $rdf->new_bnode($deletespaces); |
592 |
my $uri_resource = join "", $qualified, $deletespaces; |
593 |
my $resource = $rdf->new_resource($uri_resource); |
594 |
$rdf->assert_literal( $subject, $predicate, $bnode ); |
595 |
$rdf->assert_literal( $bnode, 'dcam:memberOf', $resource ); |
596 |
$rdf->assert_literal( $bnode, 'rdf:value', $object ); |
597 |
} |
553 |
} |
598 |
} |
554 |
} #if-elsif |
599 |
} #if-elsif |
555 |
return $rdf; |
600 |
return $rdf; |
Lines 750-756
into metadata in XML or RDF format.
Link Here
|
750 |
|
795 |
|
751 |
#Or if you want to generate a file |
796 |
#Or if you want to generate a file |
752 |
open (OUTPUT, '> dc2xml.xml') or die $!; |
797 |
open (OUTPUT, '> dc2xml.xml') or die $!; |
753 |
print OUTPUT print $XML-DC; |
798 |
print OUTPUT $XML-DC; |
754 |
close(OUTPUT); |
799 |
close(OUTPUT); |
755 |
|
800 |
|
756 |
=head2 DC-RDF |
801 |
=head2 DC-RDF |
Lines 783-789
into metadata in XML or RDF format.
Link Here
|
783 |
|
828 |
|
784 |
my $XML-RDF = $objectDC->write_rdf(); |
829 |
my $XML-RDF = $objectDC->write_rdf(); |
785 |
print $XML-RDF; |
830 |
print $XML-RDF; |
786 |
|
|
|
787 |
#Close the file according to MARC::File::USMARC |
831 |
#Close the file according to MARC::File::USMARC |
788 |
$batch->close(); |
832 |
$batch->close(); |
789 |
undef $marc; |
833 |
undef $marc; |
790 |
- |
|
|