Catmandu-MARC-1.271000755000765000024 014137142137 16276 5ustar00patrickhochstenbachstaff000000000000README100644000765000024 1012614137142137 17257 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271NAME Catmandu::MARC - Catmandu modules for working with MARC data SYNOPSIS # On the command line $ catmandu convert MARC to JSON < data.mrc $ catmandu convert MARC --type MiJ to YAML < data.marc_in_json $ catmandu convert MARC --fix "marc_map(245,title)" < data.mrc $ catmandu convert MARC --fix myfixes.txt < data.mrc myfixes: marc_map("245a", title) marc_map("5**", note.$append) marc_map('710','my.authors.$append') marc_map('008_/35-35','my.language') remove_field(record) add_field(my.funny.field,'test123') $ catmandu import MARC --fix myfixes.txt to ElasticSearch --index_name 'catmandu' < data.marc # In perl use Catmandu; my $importer = Catmandu->importer('MARC', file => 'data.mrc' ); my $fixer = Catmandu->fixer('myfixes.txt'); my $store = Catmandu->store('ElasticSearch', index_name => 'catmandu'); $store->add_many( $fixer->fix($importer) ); MODULES * Catmandu::MARC::Tutorial * Catmandu::Importer::MARC * Catmandu::Importer::MARC::ALEPHSEQ * Catmandu::Importer::MARC::ISO * Catmandu::Importer::MARC::Line * Catmandu::Importer::MARC::Lint * Catmandu::Importer::MARC::MARCMaker * Catmandu::Importer::MARC::MicroLIF * Catmandu::Importer::MARC::MiJ * Catmandu::Importer::MARC::RAW * Catmandu::Importer::MARC::Record * Catmandu::Importer::MARC::XML * Catmandu::Exporter::MARC * Catmandu::Exporter::MARC::ALEPHSEQ * Catmandu::Exporter::MARC::ISO * Catmandu::Exporter::MARC::Line * Catmandu::Exporter::MARC::MARCMaker * Catmandu::Exporter::MARC::MiJ * Catmandu::Exporter::MARC::XML * Catmandu::Fix::marc_add * Catmandu::Fix::marc_append * Catmandu::Fix::marc_copy * Catmandu::Fix::marc_cut * Catmandu::Fix::marc_decode_dollar_subfields * Catmandu::Fix::marc_in_json * Catmandu::Fix::marc_map * Catmandu::Fix::marc_paste * Catmandu::Fix::marc_remove * Catmandu::Fix::marc_replace_all * Catmandu::Fix::marc_set * Catmandu::Fix::marc_sort * Catmandu::Fix::marc_spec * Catmandu::Fix::marc_xml * Catmandu::Fix::Bind::marc_each * Catmandu::Fix::Condition::marc_all_match * Catmandu::Fix::Condition::marc_any_match * Catmandu::Fix::Condition::marc_has * Catmandu::Fix::Condition::marc_has_many * Catmandu::Fix::Condition::marc_match * Catmandu::Fix::Condition::marc_spec_has * Catmandu::Fix::Inline::marc_map * Catmandu::Fix::Inline::marc_add * Catmandu::Fix::Inline::marc_remove * Catmandu::Fix::Inline::marc_set DESCRIPTION With Catmandu, LibreCat tools abstract digital library and research services as data warehouse processes. As stores we reuse MongoDB or ElasticSearch providing us with developer friendly APIs. Catmandu works with international library standards such as MARC, MODS and Dublin Core, protocols such as OAI-PMH, SRU and open repositories such as DSpace and Fedora. And, of course, we speak the evolving Semantic Web. Follow us on http://librecat.org and read an introduction into Catmandu data processing at https://github.com/LibreCat/Catmandu/wiki. SEE ALSO Catmandu, Catmandu::Importer, Catmandu::Fix, Catmandu::Store, MARC::Spec AUTHOR Patrick Hochstenbach, CONTRIBUTORS * Nicolas Steenlant, * Nicolas Franck, * Johann Rolschewski, jorol at cpan.org * Chris Cormack * Robin Sheat * Carsten Klee, klee at cpan.org COPYRIGHT Copyright 2012- Patrick Hochstenbach , Carsten Klee, Johann Rolschewski LICENSE This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information. Changes100644000765000024 2535214137142137 17701 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271Revision history for Catmandu-MARC 1.271 2021-10-30 06:04:35 CEST - Fixing the copyright and documentation of packages 1.27 2021-10-29 08:22:16 CEST - Adding the MARC Line importer and exporter [jorol] 1.261 2021-10-14 08:42:38 CEST - Removing unstable Lint test 1.26 2021-10-13 19:24:47 CEST - Making MARCMarker default in utf8 mode 1.254 2019-10-17 14:30:11 CEST - Fixing dependencies [manwar] 1.253 2019-10-11 07:50:42 CEST - Fixing dependencies [manwar] 1.252 2019-10-07 16:00:01 CEST - Adding marc_sort support (jorol) 1.251 2019-04-09 09:40:50 CEST - Fixing minimal MARC::Schema version dependency 1.25 2019-04-08 11:31:22 CEST - Adding support for MARC validation (jorol) 1.241 2019-02-20 13:02:08 CET - Fixing missing Test::Exception dependency #95 1.24 2018-06-21 15:33:11 CEST - Adding support for subfield ranges in marc_map #85 - Adding example how to remove non-numeric fields #84 - Adding an example how to add subfields to a MARC field #68 - nested_arrays:1 should be enough to stop processing subfields/fields #56 - Providing an example how to set and remove MARC indicators #36 - Adding the reverse:1 option for marc_xml #87 - Document "equals" key in marc_copy/marc_cut #89 - Adding a deduplication tutorial 1.231 2017-12-16 13:40:53 CET - Implementing marc_spec 2.0 in the fixes 1.23 2017-12-15 09:52:08 CET - Forcing MARC::Spec 1.0.0 for now 1.22 2017-12-02 10:23:48 CET - Add support for passing a loop variable in marc_each - Making the syntax of marc_copy and marc_paste more intuitive for marc_each loops 1.21 2017-11-13 14:21:16 CET - Fixing ^ to space conversion in ALEPHSEQ imports 1.20 2017-11-08 10:29:27 CET - More stable ISO exports for bad records - More POD 1.19 2017-10-02 11:16:17 CEST - Adding marc_all_match - Adding marc_any_match - Deprecating marc_match (in favor of marc_all_match) - Fixing ALEPHSEQ exporter: adding a default 'FMT' field - Moving all tests into a new tree for each seperate module 1.18 2017-07-22 11:46:52 CEST - Adding skip_errors option in the importer and exporter - More POD - Added more examples to the Catmandu::MARC::Tutorial 1.171 2017-07-13 08:50:35 CEST - Fixing 0 as false bug in marc_spec 1.17 2017-07-12 11:45:56 CEST - Fixing 0 as false bug when using from/until - Fixing double fix execution bug - Using better subfield defaults for marc_set - Adding 'marc_cut' fix 1.161 2017-07-06 14:36:29 CEST - Fixing marc_replace_all evaluating search groups 1.16 2017-07-04 15:27:51 CEST - Adding marc_copy (Carsten Klee) and marc_paste fix 1.15 2017-06-29 16:31:39 CEST - Adding the marc_spec_has Fix Condition (Carsten Klee) - Adding marc_replace_all fix - Adding marc_append fix 1.14 2017-06-23 07:48:49 CEST - Upgrading to Catmandu 1.06X - Using the Catmandu::Fix::Bind::Group style for marc_each bind 1.13 2017-06-15 09:19:13 CEST - Fixing join subfields per field correctly in marc_spec 1.12 2017-05-29 10:23:23 CEST - Fixing missing space to caret translation in 008 fields for ALEPHSEQ exports - Upgrading to latest MARC::File::XML - Providing documenation on the MARC-in-JSON format 1.12 2017-05-29 10:23:23 CEST - Fixing missing space to caret translation in 008 fields for ALEPHSEQ exports - Upgrading to latest MARC::File::XML - Providing documenation on the MARC-in-JSON format 1.11 2017-05-15 09:11:38 CEST - Upgrading to MARC::Spec 1.0.0 - Fixing MARCspec Parser exception - Fixing undef values when using $append and split 1.10 2017-05-02 11:48:37 CEST - Adding support for nested_arrays and subspecs in marc_spec 1.09 2017-03-27 11:29:28 CEST - Supporting forced arrays for $prepend, $append, $first, $last and any digits in the path 1.08 2017-03-06 09:55:53 CET - Fixed broken $append mapping and added many more tests - Adding a Wiki page with all mapping rules for marc_map and marc_spec - Support dollar ($) to indicate subfields in marc_map - Support period (.) to indicate a field wildard in marc_map - Adding more tests 1.07 2017-03-01 09:03:25 CET - A marc_map(...,...,pluck:1,split:1) will return *all* the subfields specified in the path (undef when they don't exist in the MARC) 1.06 2017-01-31 14:57:19 CET - Adding support for inline marc_spec - Updated POD 1.05 2017-01-19 16:05:10 CET - Adding Carsten Klee's MARC::Spec contribution - Adding Carsten as contributor - Buffering record in XML exporter for better serialization speed 1.04 2017-01-18 09:23:26 CET - Skipping new lines in ALEPHSEQ exports 1.03 2016-11-03 08:48:19 CET - Adding a Catmandu::MARC::Tutorial - Fixing a bug in the marc_has_many 1.02 2016-10-15 11:18:48 CEST - Fixing bug when accessing subfields 0 in MARC 1.01 2016-09-27 16:35:19 CEST - Bug version 1.00_03 2016-09-15 11:26:03 CEST - Fixing dependency problems - Deleting unused modules - Fixing zero-padded tags treated as numbers bug 1.00_02 2016-09-14 14:20:47 CEST - Making default MARC importer the same as default MARC exporter (ISO) - Deprecation notice for USMARC - Adding marc_has and marc_has_many fixes 1.00_01 2016-07-14 09:33:22 CEST - Refactoring nearly all of the emit code into Catmandu::MARC module - Deprecating Catmandu::Fix::Inline::marc_* - Adding more pod - The -record option isn't available anymore - By default all marc_map will create a single array when using the split:1 option - A 'nested_arrays' option to create a list of list when using split:1 - Fixing bug in searching for all subfields except... - Adding references to MARC::Spec 0.219 2016-06-23 16:40:11 CEST - Fixed importing from MARC as string in a Perl script - Adding more POD - Make all Catmandu::Fix inlineable 0.218 2016-06-14 14:05:32 CEST - Fixing marc_map for inline fixes 0.217 2016-06-14 09:48:59 CEST - Fixed dependency on Catmandu 1.0201 for Inlineable 0.216 2016-06-13 16:57:49 CEST - Fixed indicator-2 selection bug - Fixed marc_map value bug - Support for the value in the inline fixes - Fixing combinations of substring and split - Fixing array in array bugs when using split and $append combinations 0.215 2016-02-22 09:57:07 CET - Supporting ISO alias for USMARC importer and exporter - Fixing MicroLIF importer - Making Catmandu::MARC forwards compatible with Catmandu 1.0 - Adding a pretty option for XML 0.214 2015-11-03 11:46:22 CET - Maintenance release skipping buggy Catmandu versions 0.213 2015-09-30 16:00:11 CEST - Adding support for setting anf adding JSON paths 0.212 2015-09-29 11:07:13 CEST - Fixed marc_each single execution bug 0.211 2015-08-31 16:17:42 CEST - Fixed POD spelling - Adding marc_each bind 0.210 2015-05-20 11:23:46 CEST - Optimizing Aleph sequentials exports - Fixed round tripping of Aleph sequential - Fixing marc_in_json - Adding support for marc_in_json back to catmandu marc mapping 0.209 2015-02-20 13:39:05 CET - Fixed value feature 0.208 2015-02-04 20:16:39 CET - Fixing CLI arguments and options bug #12 - Adding support for double encoded subfields 0.207 2015-01-09 10:02:48 CET - Fixed: Parser "RAW" and fix "marc_map": got field content twice #12 - Removed double generator fix magic for command line support 0.206 2014-10-21 12:01:35 CEST - Adding pluck support 0.205 2014-06-23 21:18:06 CEST - Fixed collection bug in the MARC exporter 0.204 2014-06-11 07:41:39 BST - Need Catmandu 0.9202 to get the delegations working properly 0.203 2014-05-30 17:37:37 CEST - Adding marc_set fix - Making marc_map and marc_set indicator aware - Supporting deletion of subfields for marc_remove - Fixing EOF bug in RAW importer 0.202 2014-05-29 19:46:40 CEST - Fixing the catmandu command line fixes bug 0.201 2014-05-29 09:11:24 CEST - Adding the MARC::Parser::RAW and updating the pod 0.2 2014-05-28 15:24:03 CEST - Refactoring MARC import and export parsers and serializers - Add importers for MARCMaker, MARC-in-JSON and MARC::Catmandu - Add Lint based validator for USMARC - Add exporters for USMARC, MARCMaker and MARC-in-JSON 0.117 2014-05-23 12:06:40 CEST - Adding more documentation hints - Fixing the marc_match (deleting temporary keys) 0.116 2014-05-23 09:31:14 CEST - Switched to Dist::Milla 0.115 2014-05-22 - Fixed broken MANIFEST 0.114 2014-05-20 - Adding the if marc_match condition 0.112 2014-04-03 - Adding the new files to the manifest :-/ 0.112 2014-04-03 - Adding the inline marc_remove fix 0.111 2014-03-19 - fixed marc_add test to reflect the correct number of tests 0.110 2014-03-18 - adding support for marc_add fixes 0.109 2014-03-14 - in response to popular request adding Aleph sequential export support 0.108 2014-03-11 - all Catmandu::Exporter::MARC methods should be instance and class methods to make marc_xml work 0.107 2014-03-04 - adding Robin Sheat as contributor - bumping version to resolve verson conflict at CPAN 0.106 2014-03-03 - allow for non-standard system identifier fields 0.105 2014-02-11 - handle Aleph FMT tags 0.104 2013-12-20 - Exporter::MARC now skips also skips empty strings by default - improved marc_map pod 0.103 2013-12-18 - Exporter::MARC skips undef (sub)fields by default 0.102 2013-12-10 - Importer::MARC skips empty fields 0.101 2013-12-04 - fix importer tests 0.1 2013-12-03 - consume MARC::Record objects 0.09 2013-10-31 - fixed export formatting bug 0.08 2013-09-27 - inline marc_map 0.07 2013-09-17 - fixed the underscore subfields in non-control fields - adding backwards compatibility 0.06 2013-06-28 - marc_remove fix - marc_map -split option 0.05 2013-06-19 - marc_map exclude subfields syntax 0.0401 2013-06-17 - remove given/when statements 0.04 2013-06-14 - faster marc_xml fix 0.0304 2013-03-26 - import confess 0.0303 2013-03-13 - fix MARCXML namespace 0.0302 2013-03-13 - fix perl version im marc_map test 0.0301 2013-03-12 - safe substr outside string in marc_map 0.03 2013-02-26 - compile marc_map fix 0.0201 2013-02-07 - fix dependencies 0.02 2013-02-05 - MARCXML exporter - make MARC record key configurable everywhere 0.0109 2013-02-01 - fix MARC21 xml export 0.0108 2013-01-22 - fix leader in xml export 0.0107 2013-01-11 - fix creation of undef value with nonexisting $append key 0.0106 2012-11-09 - fix _id field value 0.0105 2012-10-10 - fix missing uppercase subfield datafield 0.0104 2012-10-09 - only allow alphanumeric fields in MARCXML export - utf8 fixes 0.0103 2012-06-14 - add configurable identifier field (default 001) - add virtual '_' to every field to make USMARC|MicroLIF|XML and ALEPHSEQ output equal 0.0102 2012-05-25 - fix indicator bug 0.0101 2012-05-16 - fix control field bug 0.01 2012-05-04 - initial release LICENSE100644000765000024 4405614137142137 17415 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271This software is copyright (c) 2021 by Patrick Hochstenbach, Carsten Klee , Johann Rolschewski. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. Terms of the Perl programming language system itself a) the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version, or b) the "Artistic License" --- The GNU General Public License, Version 1, February 1989 --- This software is Copyright (c) 2021 by Patrick Hochstenbach, Carsten Klee , Johann Rolschewski. This is free software, licensed under: The GNU General Public License, Version 1, February 1989 GNU GENERAL PUBLIC LICENSE Version 1, February 1989 Copyright (C) 1989 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The license agreements of most software companies try to keep users at the mercy of those companies. By contrast, our General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. The General Public License applies to the Free Software Foundation's software and to any other program whose authors commit to using it. You can use it for your programs, too. When we speak of free software, we are referring to freedom, not price. Specifically, the General Public License is designed to make sure that you have the freedom to give away or sell copies of free software, that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of a such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any work containing the Program or a portion of it, either verbatim or with modifications. Each licensee is addressed as "you". 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this General Public License and to the absence of any warranty; and give any other recipients of the Program a copy of this General Public License along with the Program. You may charge a fee for the physical act of transferring a copy. 2. You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following: a) cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and b) cause the whole of any work that you distribute or publish, that in whole or in part contains the Program or any part thereof, either with or without modifications, to be licensed at no charge to all third parties under the terms of this General Public License (except that you may choose to grant warranty protection to some or all third parties, at your option). c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the simplest and most usual way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this General Public License. d) You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. Mere aggregation of another independent work with the Program (or its derivative) on a volume of a storage or distribution medium does not bring the other work under the scope of these terms. 3. You may copy and distribute the Program (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following: a) accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or, b) accompany it with a written offer, valid for at least three years, to give any third party free (except for a nominal charge for the cost of distribution) a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Paragraphs 1 and 2 above; or, c) accompany it with the information you received as to where the corresponding source code may be obtained. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form alone.) Source code for a work means the preferred form of the work for making modifications to it. For an executable file, complete source code means all the source code for all modules it contains; but, as a special exception, it need not include source code for modules which are standard libraries that accompany the operating system on which the executable file runs, or for standard header files or definitions files that accompany that operating system. 4. You may not copy, modify, sublicense, distribute or transfer the Program except as expressly provided under this General Public License. Any attempt otherwise to copy, modify, sublicense, distribute or transfer the Program is void, and will automatically terminate your rights to use the Program under this License. However, parties who have received copies, or rights to use copies, from you under this General Public License will not have their licenses terminated so long as such parties remain in full compliance. 5. By copying, distributing or modifying the Program (or any work based on the Program) you indicate your acceptance of this license to do so, and all its terms and conditions. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. 7. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of the license which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the license, you may choose any version ever published by the Free Software Foundation. 8. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to humanity, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19xx name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (a program to direct compilers to make passes at assemblers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice That's all there is to it! --- The Artistic License 1.0 --- This software is Copyright (c) 2021 by Patrick Hochstenbach, Carsten Klee , Johann Rolschewski. This is free software, licensed under: The Artistic License 1.0 The Artistic License Preamble The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications. Definitions: - "Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification. - "Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder. - "Copyright Holder" is whoever is named in the copyright or copyrights for the package. - "You" is you, if you're thinking about copying or distributing this Package. - "Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.) - "Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it. 1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers. 2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version. 3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following: a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as ftp.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package. b) use the modified Package only within your corporation or organization. c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version. d) make other distribution arrangements with the Copyright Holder. 4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following: a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version. b) accompany the distribution with the machine-readable source of the Package with your modifications. c) accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version. d) make other distribution arrangements with the Copyright Holder. 5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own. 6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package. 7. C or perl subroutines supplied by you and linked into this Package shall not be considered part of this Package. 8. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission. 9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. The End cpanfile100644000765000024 172714137142137 20072 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271requires 'perl', 'v5.10.1'; on 'test', sub { requires 'Test::Simple', '1.001003'; requires 'Test::More', '1.001003'; requires 'Test::Deep', '0'; requires 'Test::Warnings', '0'; requires 'Test::Warn', '0'; requires 'Test::Exception', '0'; requires 'XML::XPath', '1.13'; requires 'XML::LibXML', '0'; requires 'Pod::Simple::HTML', '>=3.23'; requires 'Test::Pod' , '0'; }; requires 'Carp', '0'; requires 'Catmandu', '>=1.0602'; requires 'JSON::XS', '2.3'; requires 'YAML::XS', '0.34'; requires 'List::Util', '0'; requires 'MARC::File::XML', '>=1.0.5'; requires 'MARC::File::MARCMaker', '0.05'; requires 'MARC::File::MiJ' , '0.04'; requires 'MARC::Record', '2.0.6'; requires 'MARC::Lint', '==1.52'; requires 'MARC::Parser::RAW', '0'; requires 'MARC::Schema', '>=0.07'; requires 'MARC::Spec', '2.0.3'; requires 'Memoize', '0'; requires 'Module::Build', '>=0.4229'; # travis ci requires 'Moo', '1.0'; requires 'namespace::clean', '0'; requires 'MooX::Singleton', '0'; Build.PL100644000765000024 403514137142137 17655 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271 # This file was automatically generated by Dist::Zilla::Plugin::ModuleBuild v6.017. use strict; use warnings; use Module::Build 0.28; my %module_build_args = ( "build_requires" => { "Module::Build" => "0.4229" }, "configure_requires" => { "Module::Build" => "0.28" }, "dist_abstract" => "Catmandu modules for working with MARC data", "dist_author" => [ "Patrick Hochstenbach ", "Carsten Klee", "Johann Rolschewski" ], "dist_name" => "Catmandu-MARC", "dist_version" => "1.271", "license" => "perl", "module_name" => "Catmandu::MARC", "recursive_test_files" => 1, "requires" => { "Carp" => 0, "Catmandu" => "1.0602", "JSON::XS" => "2.3", "List::Util" => 0, "MARC::File::MARCMaker" => "0.05", "MARC::File::MiJ" => "0.04", "MARC::File::XML" => "v1.0.5", "MARC::Lint" => "== 1.52", "MARC::Parser::RAW" => 0, "MARC::Record" => "v2.0.6", "MARC::Schema" => "0.07", "MARC::Spec" => "v2.0.3", "Memoize" => 0, "Module::Build" => "0.4229", "Moo" => "1.0", "MooX::Singleton" => 0, "YAML::XS" => "0.34", "namespace::clean" => 0, "perl" => "v5.10.1" }, "test_requires" => { "Pod::Simple::HTML" => "3.23", "Test::Deep" => 0, "Test::Exception" => 0, "Test::More" => "1.001003", "Test::Pod" => 0, "Test::Simple" => "1.001003", "Test::Warn" => 0, "Test::Warnings" => 0, "XML::LibXML" => 0, "XML::XPath" => "1.13" } ); my %fallback_build_requires = ( "Module::Build" => "0.4229", "Pod::Simple::HTML" => "3.23", "Test::Deep" => 0, "Test::Exception" => 0, "Test::More" => "1.001003", "Test::Pod" => 0, "Test::Simple" => "1.001003", "Test::Warn" => 0, "Test::Warnings" => 0, "XML::LibXML" => 0, "XML::XPath" => "1.13" ); unless ( eval { Module::Build->VERSION(0.4004) } ) { delete $module_build_args{test_requires}; $module_build_args{build_requires} = \%fallback_build_requires; } my $build = Module::Build->new(%module_build_args); $build->create_build_script; META.yml100644000765000024 421514137142137 17632 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271--- abstract: 'Catmandu modules for working with MARC data' author: - 'Patrick Hochstenbach ' - 'Carsten Klee' - 'Johann Rolschewski' build_requires: Module::Build: '0.4229' Pod::Simple::HTML: '3.23' Test::Deep: '0' Test::Exception: '0' Test::More: '1.001003' Test::Pod: '0' Test::Simple: '1.001003' Test::Warn: '0' Test::Warnings: '0' XML::LibXML: '0' XML::XPath: '1.13' configure_requires: Module::Build: '0.28' dynamic_config: 0 generated_by: 'Dist::Milla version v1.0.20, Dist::Zilla version 6.017, CPAN::Meta::Converter version 2.150005' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: Catmandu-MARC no_index: directory: - eg - examples - inc - share - t - xt requires: Carp: '0' Catmandu: '1.0602' JSON::XS: '2.3' List::Util: '0' MARC::File::MARCMaker: '0.05' MARC::File::MiJ: '0.04' MARC::File::XML: v1.0.5 MARC::Lint: '== 1.52' MARC::Parser::RAW: '0' MARC::Record: v2.0.6 MARC::Schema: '0.07' MARC::Spec: v2.0.3 Memoize: '0' Module::Build: '0.4229' Moo: '1.0' MooX::Singleton: '0' YAML::XS: '0.34' namespace::clean: '0' perl: v5.10.1 resources: bugtracker: https://github.com/LibreCat/Catmandu-MARC/issues homepage: https://github.com/LibreCat/Catmandu-MARC repository: https://github.com/LibreCat/Catmandu-MARC.git version: '1.271' x_contributors: - 'Carsten Klee ' - 'Carsten Klee ' - 'Chris Cormack ' - 'Debabrata Deka <60925700+ddeka2910@users.noreply.github.com>' - 'Jakob Voss ' - 'Johann Rolschewski ' - 'Johann Rolschewski ' - 'Johann Rolschewski ' - 'Mohammad S Anwar ' - 'Nicolas Franck ' - 'Nicolas Steenlant ' - 'Robin Sheat ' x_generated_by_perl: v5.24.0 x_serialization_backend: 'YAML::Tiny version 1.73' x_spdx_expression: 'Artistic-1.0-Perl OR GPL-1.0-or-later' x_static_install: 0 MANIFEST100644000765000024 727514137142137 17523 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.017. Build.PL Changes LICENSE LICENSE-bu_bibs.txt MANIFEST MANIFEST.SKIP META.json META.yml README cpanfile lib/Catmandu/Exporter/MARC.pm lib/Catmandu/Exporter/MARC/ALEPHSEQ.pm lib/Catmandu/Exporter/MARC/Base.pm lib/Catmandu/Exporter/MARC/ISO.pm lib/Catmandu/Exporter/MARC/Line.pm lib/Catmandu/Exporter/MARC/MARCMaker.pm lib/Catmandu/Exporter/MARC/MiJ.pm lib/Catmandu/Exporter/MARC/XML.pm lib/Catmandu/Fix/Bind/marc_each.pm lib/Catmandu/Fix/Condition/marc_all_match.pm lib/Catmandu/Fix/Condition/marc_any_match.pm lib/Catmandu/Fix/Condition/marc_has.pm lib/Catmandu/Fix/Condition/marc_has_many.pm lib/Catmandu/Fix/Condition/marc_match.pm lib/Catmandu/Fix/Condition/marc_spec_has.pm lib/Catmandu/Fix/Inline/marc_add.pm lib/Catmandu/Fix/Inline/marc_map.pm lib/Catmandu/Fix/Inline/marc_remove.pm lib/Catmandu/Fix/Inline/marc_set.pm lib/Catmandu/Fix/marc_add.pm lib/Catmandu/Fix/marc_append.pm lib/Catmandu/Fix/marc_copy.pm lib/Catmandu/Fix/marc_cut.pm lib/Catmandu/Fix/marc_decode_dollar_subfields.pm lib/Catmandu/Fix/marc_in_json.pm lib/Catmandu/Fix/marc_map.pm lib/Catmandu/Fix/marc_paste.pm lib/Catmandu/Fix/marc_remove.pm lib/Catmandu/Fix/marc_replace_all.pm lib/Catmandu/Fix/marc_set.pm lib/Catmandu/Fix/marc_sort.pm lib/Catmandu/Fix/marc_spec.pm lib/Catmandu/Fix/marc_xml.pm lib/Catmandu/Importer/MARC.pm lib/Catmandu/Importer/MARC/ALEPHSEQ.pm lib/Catmandu/Importer/MARC/Decoder.pm lib/Catmandu/Importer/MARC/ISO.pm lib/Catmandu/Importer/MARC/Line.pm lib/Catmandu/Importer/MARC/Lint.pm lib/Catmandu/Importer/MARC/MARCMaker.pm lib/Catmandu/Importer/MARC/MiJ.pm lib/Catmandu/Importer/MARC/MicroLIF.pm lib/Catmandu/Importer/MARC/RAW.pm lib/Catmandu/Importer/MARC/Record.pm lib/Catmandu/Importer/MARC/XML.pm lib/Catmandu/MARC.pm lib/Catmandu/MARC/Tutorial.pod lib/Catmandu/Validator/MARC.pm t/Catmandu/Exporter/MARC.t t/Catmandu/Exporter/MARC/ALEPHSEQ.t t/Catmandu/Exporter/MARC/Base.t t/Catmandu/Exporter/MARC/ISO.t t/Catmandu/Exporter/MARC/Line.t t/Catmandu/Exporter/MARC/MARCMaker.t t/Catmandu/Exporter/MARC/MiJ.t t/Catmandu/Exporter/MARC/XML.t t/Catmandu/Fix/Bind/marc_each.t t/Catmandu/Fix/Condition/marc_all_match.t t/Catmandu/Fix/Condition/marc_any_match.t t/Catmandu/Fix/Condition/marc_has.t t/Catmandu/Fix/Condition/marc_has_many.t t/Catmandu/Fix/Condition/marc_match.t t/Catmandu/Fix/Condition/marc_spec_has.t t/Catmandu/Fix/Inline/marc_add.t t/Catmandu/Fix/Inline/marc_map.t t/Catmandu/Fix/Inline/marc_remove.t t/Catmandu/Fix/Inline/marc_set.t t/Catmandu/Fix/marc_add.t t/Catmandu/Fix/marc_append.t t/Catmandu/Fix/marc_copy.t t/Catmandu/Fix/marc_cut.t t/Catmandu/Fix/marc_decode_dollar_subfields.t t/Catmandu/Fix/marc_in_json.t t/Catmandu/Fix/marc_map.t t/Catmandu/Fix/marc_paste.t t/Catmandu/Fix/marc_remove.t t/Catmandu/Fix/marc_replace_all.t t/Catmandu/Fix/marc_set.t t/Catmandu/Fix/marc_sort.t t/Catmandu/Fix/marc_spec.t t/Catmandu/Fix/marc_xml.t t/Catmandu/Importer/MARC.t t/Catmandu/Importer/MARC/ALEPHSEQ.t t/Catmandu/Importer/MARC/Decoder.t t/Catmandu/Importer/MARC/ISO.t t/Catmandu/Importer/MARC/Line.t t/Catmandu/Importer/MARC/Lint.t t/Catmandu/Importer/MARC/MARCMaker.t t/Catmandu/Importer/MARC/MiJ.t t/Catmandu/Importer/MARC/MicroLIF.t t/Catmandu/Importer/MARC/RAW.t t/Catmandu/Importer/MARC/Record.t t/Catmandu/Importer/MARC/XML.t t/Catmandu/MARC.t t/Catmandu/Validator/MARC.t t/author-pod-syntax.t t/broken.xml t/bu_bibs.mrc t/camel.mrc t/camel.mrk t/camel9.mrc t/code4lib.line t/deprecate.t t/dollar_subfields.mrc t/inline-fix.t t/inlineable.t t/mapping_rules.t t/mapping_rules_spec.t t/marc-spec-subspecs.t t/marc.xml t/marc_spec.fix t/marc_spec2.t t/old-new-internal-syntax.t t/old_new.json t/oschrift_me.mrc t/rug01.aleph t/sample1.lif t/test.fix t/test.ndj t/utf8.mrc META.json100644000765000024 660514137142137 20007 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271{ "abstract" : "Catmandu modules for working with MARC data", "author" : [ "Patrick Hochstenbach ", "Carsten Klee", "Johann Rolschewski" ], "dynamic_config" : 0, "generated_by" : "Dist::Milla version v1.0.20, Dist::Zilla version 6.017, CPAN::Meta::Converter version 2.150005", "license" : [ "perl_5" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : 2 }, "name" : "Catmandu-MARC", "no_index" : { "directory" : [ "eg", "examples", "inc", "share", "t", "xt" ] }, "prereqs" : { "build" : { "requires" : { "Module::Build" : "0.4229" } }, "configure" : { "requires" : { "Module::Build" : "0.28" } }, "develop" : { "requires" : { "Dist::Milla" : "v1.0.20", "Test::Pod" : "1.41" } }, "runtime" : { "requires" : { "Carp" : "0", "Catmandu" : "1.0602", "JSON::XS" : "2.3", "List::Util" : "0", "MARC::File::MARCMaker" : "0.05", "MARC::File::MiJ" : "0.04", "MARC::File::XML" : "v1.0.5", "MARC::Lint" : "== 1.52", "MARC::Parser::RAW" : "0", "MARC::Record" : "v2.0.6", "MARC::Schema" : "0.07", "MARC::Spec" : "v2.0.3", "Memoize" : "0", "Module::Build" : "0.4229", "Moo" : "1.0", "MooX::Singleton" : "0", "YAML::XS" : "0.34", "namespace::clean" : "0", "perl" : "v5.10.1" } }, "test" : { "requires" : { "Pod::Simple::HTML" : "3.23", "Test::Deep" : "0", "Test::Exception" : "0", "Test::More" : "1.001003", "Test::Pod" : "0", "Test::Simple" : "1.001003", "Test::Warn" : "0", "Test::Warnings" : "0", "XML::LibXML" : "0", "XML::XPath" : "1.13" } } }, "release_status" : "stable", "resources" : { "bugtracker" : { "web" : "https://github.com/LibreCat/Catmandu-MARC/issues" }, "homepage" : "https://github.com/LibreCat/Catmandu-MARC", "repository" : { "type" : "git", "url" : "https://github.com/LibreCat/Catmandu-MARC.git", "web" : "https://github.com/LibreCat/Catmandu-MARC" } }, "version" : "1.271", "x_contributors" : [ "Carsten Klee ", "Carsten Klee ", "Chris Cormack ", "Debabrata Deka <60925700+ddeka2910@users.noreply.github.com>", "Jakob Voss ", "Johann Rolschewski ", "Johann Rolschewski ", "Johann Rolschewski ", "Mohammad S Anwar ", "Nicolas Franck ", "Nicolas Steenlant ", "Robin Sheat " ], "x_generated_by_perl" : "v5.24.0", "x_serialization_backend" : "Cpanel::JSON::XS version 4.25", "x_spdx_expression" : "Artistic-1.0-Perl OR GPL-1.0-or-later", "x_static_install" : 0 } t000755000765000024 014137142137 16462 5ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271marc.xml100644000765000024 454314137142137 20274 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t periodical00000nas-a2200000z--4500130127s----------------------000---kor-d991042727010838ejn01991042727010838TRANSACTIONS ON ELECTRICAL AND ELECTRONIC MATERIALSTEEMTEEM (한국전기전자재료학회)TEEM (한국전기전자재료학회)TEEM 한 국 전 기 전 자 재 료 학 회Seoul, KoreaKorean Institute of Electrical and Electronic Material Engineers1229-76072092-7592Available from 2000. 111061245432001111061245432000DOAJ Directory of Open Access Journals:Full Text2670000000686647EngineeringElectrical Engineering test.fix100644000765000024 153114137142137 20311 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/tmarc_map('001', 'my.id') marc_map('245a', 'my.title') marc_map('666', 'my.references.$append') marc_map('001/3-5', 'my.substr_id') marc_map('001/3-5', 'my.substr_id2',split:1) marc_map('001/1003-1005', 'my.failed_substr_id') marc_map('245', 'my.split_title', split:1) add_field('my.found005',0) if marc_match('005','20000613133448.0') set_field('my.found005',1) end add_field('my.found008','0') if marc_match('008_/6-7','s') set_field('my.found008','1') end marc_map('050ba','my.pluck', pluck:1) marc_map('245','my.has_title', value:'Y') marc_map('245','my.has_title', value:'Y') marc_map('260c','has_260c', value:'OK') marc_map('260h','has_260h', value:'BAD') marc_map('500^c','has_500_not_c', value: 'OK') marc_map('500^a','has_500_not_a', value: 'BAD') marc_map('008/0','has_800_0') marc_xml('record') test.ndj100644000765000024 6316314137142137 20327 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t{"leader":"01470nam^a22004451^^4500","fields":[{"001":"000000040"},{"005":"19880715000000.0"},{"006":"m^^^^^^^^d^^^^^^^^"},{"007":"cr^bn^---auaua"},{"008":"880715s1968^^^^nyuae^^^^b^^^|00100^eng^^"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"68027371"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0001728-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159818044"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00001728"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"},{"d":"CStRLIN"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"N6350"},{"b":".P4 1968b"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"709.03"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Pevsner, Nikolaus,"},{"d":"1902-1983."}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Studies in art, architecture, and design."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York,"},{"b":"Walker"},{"c":"[1968]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"2 v."},{"b":"illus., plans."},{"c":"30 cm."}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Includes bibliographical references."}]}},{"505":{"ind1":"0","ind2":" ","subfields":[{"a":"v. 1. From mannerism to romanticism.--v. 2. Victorian and after."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Art"},{"x":"History"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"BUHR"},{"c":"AAEL"},{"h":"N 5303 .P52 1968"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"AAEL"},{"c":"BKS"},{"h":"N 5303 .P52 1968"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"CE"},{"b":"Electronic Resource"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"z":"v.1"},{"u":"mdp.39015005817484"},{"r":"ic"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"z":"v.1"},{"u":"mdp.39015006324134"},{"r":"ic"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"z":"v.2"},{"u":"mdp.39015006324142"},{"r":"ic"},{"d":"20090907"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"z":"v.2"},{"u":"mdp.39015007230850"},{"r":"ic"},{"d":"20091119"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"c":"GAC"},{"s":"9125"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"form"},{"b":"form character life trend modern merely self world romantic attitude nature expression element mean principle"},{"c":"761"}]}}]} {"leader":"01593nam^a22004451^^4500","fields":[{"001":"000000212"},{"005":"20031119000000.0"},{"006":"m^^^^^^^^d^^^^^^^^"},{"007":"cr^bn^---auaua"},{"008":"880715s1969^^^^mauae^^^^bc^^|00100^eng^^"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"79089648"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0020036-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159818260"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00020036"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"NA737.E4"},{"b":"Z3"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"720/.924"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Zaitzevsky, Cynthia."}]}},{"245":{"ind1":"1","ind2":"4","subfields":[{"a":"The architecture of William Ralph Emerson, 1833-1917;"},{"b":"catalogue."},{"c":"Photography by Myron Miller."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"[Cambridge? Mass."},{"c":"1969]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"100 p."},{"b":"illus., plans."},{"c":"26 cm."}]}},{"500":{"ind1":" ","ind2":" ","subfields":[{"a":"Catalog of an exhibition presented by the Fogg Art Museum in collaboration with the Carpenter Center for the Visual Arts, Harvard University, May 30-June 20, 1969."}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Includes bibliographical references."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"600":{"ind1":"1","ind2":"0","subfields":[{"a":"Emerson, William Ralph,"},{"d":"1833-1917."}]}},{"710":{"ind1":"2","ind2":" ","subfields":[{"a":"Fogg Art Museum."}]}},{"710":{"ind1":"2","ind2":" ","subfields":[{"a":"Carpenter Center for the Visual Arts."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"AAEL"},{"c":"STO"},{"h":"NA737.E53 Z22"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"AAEL"},{"c":"STO"},{"h":"NA 737 .E53 Z22"},{"x":"acq. Gift. 510-1086"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"CE"},{"b":"Electronic Resource"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015006349636"},{"r":"ic"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015013176907"},{"r":"ic"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"architecture"},{"b":"roof front gable porch bay corner cornice entrance rear brick window chimney wing dormer door"},{"c":"474"}]}}]} {"leader":"01426nam^a22003971^^4500","fields":[{"001":"000000250"},{"005":"20060630100341.0"},{"006":"m^^^^^^^^d^^^^^^^^"},{"007":"cr^bn^---auaua"},{"008":"880715s1969^^^^nyua^^^^^b^^^|00000^eng^^"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"69015895"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0023127-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159818301"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00023127"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"ND1283"},{"b":".B47"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"751.4"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Birren, Faber,"},{"d":"1900-1988."}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Principles of color;"},{"b":"a review of past traditions and modern theories of color harmony."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York,"},{"b":"Van Nostrand Reinhold Co."},{"c":"[1969]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"96 p."},{"b":"illus. (part col.)"},{"c":"21 cm."}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Bibliography: p. 79-80."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Color"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"AAEL"},{"c":"BKS"},{"h":"ND1283 .B62"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"CE"},{"b":"Electronic Resource"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015012235738"},{"r":"ic"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"color"},{"b":"blue red green yellow brown white dark pink orange pale purple grey deep bright rose"},{"c":"282"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"color"},{"b":"color colored gray coloring colorful modeling colorist ocher favorite tan colorless ored modeled practiced centered"},{"c":"573"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"color"},{"b":"red yellow blue green hue hues light orange violet pigment contrast complementary eye intensity mixture"},{"c":"727"}]}}]} {"leader":"01440nam^a22004451^^4500","fields":[{"001":"000000310"},{"005":"19981110000000.0"},{"006":"m^^^^^^^^d^^^^^^^^"},{"007":"cr^bn^---auaua"},{"008":"880715s1969^^^^gh^abe^^^b^^^|00000^eng^^"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"75005747"}]}},{"020":{"ind1":" ","ind2":" ","subfields":[{"a":"0197138098"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0030116-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159818386"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00030116"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"NA6097.A8"},{"b":"S95"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"726/.1/96"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Swithenbank, Michael."}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Ashanti fetish houses."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"Accra,"},{"b":"Ghana Universities Press,"},{"c":"1969."}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"68 p."},{"b":"illus., map, plans."},{"c":"19 x 23 cm."}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Bibliography: p. 68."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Temples"},{"z":"Ashanti."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Fetishism"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"AAEL"},{"c":"BKS"},{"h":"NA 6097 .A8 S97"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"BUHR"},{"c":"GRAD"},{"h":"NA 6097 .A8 S97"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"CE"},{"b":"Electronic Resource"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015006744604"},{"r":"ic"},{"d":"20090621"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015023466272"},{"r":"ic"},{"d":"20090711"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"entryways"},{"b":"entrance stair courtyard wall front door staircase corridor corner level court upper stairway balcony leading"},{"c":"44"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"figures"},{"b":"mask figure head spirit object cloth chief female power people male ancestor bead human region"},{"c":"411"}]}}]} {"leader":"01597nam^a22004811^^4500","fields":[{"001":"000000338"},{"005":"19880715000000.0"},{"006":"m^^^^^^^^d^^^^^^^^"},{"007":"cr^bn^---auaua"},{"008":"880715s1969^^^^nyua^^^^^b^^^|00000^eng^^"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"77084094//r71"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0032478-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159818417"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00032478"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"ND673.M35"},{"b":"S92"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"759.4"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Sylvester, David."}]}},{"245":{"ind1":"0","ind2":"0","subfields":[{"a":"Magritte."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York,"},{"b":"Praeger"},{"c":"[1969]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"126 p."},{"b":"illus. (part col.)"},{"c":"24 cm."}]}},{"500":{"ind1":" ","ind2":" ","subfields":[{"a":"\"Revised version ... of the catalogue of the retrospective exhibition presented by the Arts Council of Great Britain at the Tate Gallery, London, in the spring of 1969.\""}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Includes bibliographical references."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"600":{"ind1":"1","ind2":"0","subfields":[{"a":"Magritte, René,"},{"d":"1898-1967."}]}},{"710":{"ind1":"2","ind2":" ","subfields":[{"a":"Arts Council of Great Britain."}]}},{"710":{"ind1":"2","ind2":" ","subfields":[{"a":"Tate Gallery."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"UGL"},{"h":"ND673.M33 S99"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"AAEL"},{"c":"BKS"},{"h":"ND 673 .M33 S99"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"FINE"},{"h":"ND 673 .M33 S99"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"FINE"},{"h":"ND 673 .M33 S99"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"CE"},{"b":"Electronic Resource"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040809"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015009416986"},{"r":"ic"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"collage"},{"b":"collage cardboard assemblage cut version newspaper bottle photograph mine mounted pasted gouache fragment readymade wooden"},{"c":"110"}]}}]} {"leader":"01531nam^a22004331^^4500","fields":[{"001":"000000385"},{"005":"19880715000000.0"},{"006":"m^^^^^^^^d^^^^^^^^"},{"007":"cr^bn^---auaua"},{"008":"880715r1967^^^^enkaf^^^^^^^^|00000^eng^^"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"70371182"}]}},{"015":{"ind1":" ","ind2":" ","subfields":[{"a":"B68-22096"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0037351-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159818471"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00037351"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"NK928"},{"b":".L57 1967"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"913.36"}]}},{"110":{"ind1":"2","ind2":" ","subfields":[{"a":"London Museum."}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Medieval catalogue."}]}},{"250":{"ind1":" ","ind2":" ","subfields":[{"a":"[1st ed., 4th impression]."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"London,"},{"b":"H.M.S.O.,"},{"c":"1975."}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"319 p."},{"b":"99 plates, illus. (some col.)."},{"c":"26 cm."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Decorative arts"},{"z":"England."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Decorative arts, Medieval"},{"z":"England."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Archaeology, Medieval"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"BUHR"},{"c":"GRAD"},{"h":"NK928 .L85 1975"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"CE"},{"b":"Electronic Resource"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015010558024"},{"r":"ic"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"archaeology"},{"b":"vessel excavation type pottery fragment excavated grave burial archaeological evidence figurine period date fabric sherd"},{"c":"595"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"metalwork"},{"b":"gilt engraved diam oval chased ring head bezel handle hoop circular mount shaped ornament pierced"},{"c":"731"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"time periods"},{"b":"century centuries cen tury quarter beginning dating llth turies import ury l7th centur progenitor craftmanship"},{"c":"771"}]}}]} {"leader":"01318nam^a22004331^^4500","fields":[{"001":"000000396"},{"005":"19880715000000.0"},{"006":"m^^^^^^^^d^^^^^^^^"},{"007":"cr^bn^---auaua"},{"008":"880715s1968^^^^enka^^^^^^^^^^00000^eng^^"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"74366090"}]}},{"015":{"ind1":" ","ind2":" ","subfields":[{"a":"B68-24743"}]}},{"020":{"ind1":" ","ind2":" ","subfields":[{"a":"0289277884"},{"c":"25/-"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0040363-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159818483"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00040363"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"N6493 1920"},{"b":".H5"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"709.04/2"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Hillier, Bevis,"},{"d":"1940-"}]}},{"245":{"ind1":"1","ind2":"0","subfields":[{"a":"Art Deco of the 20s and 30s."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"[London]"},{"b":"Studio Vista,"},{"c":"[1968]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"168 p. (chiefly illus. (some col.))."},{"c":"19 cm."}]}},{"490":{"ind1":"0","ind2":" ","subfields":[{"a":"Studio Vista/Dutton pictureback"}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Art, Modern"},{"y":"20th century"}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Decorative arts"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"AAEL"},{"c":"BKS"},{"h":"N 6494 .A7 H65"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"AAEL"},{"c":"BKS"},{"h":"N 6494 .A7 H65"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"CE"},{"b":"Electronic Resource"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015033751887"},{"r":"ic"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"c":"GAC"},{"s":"9125"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"eras"},{"b":"time sixties thirties twenties fifties decade seventies forties eighties own world generation late period example"},{"c":"287"}]}}]} {"leader":"01921nam^a22004931^^4500","fields":[{"001":"000000499"},{"005":"19880715000000.0"},{"006":"m^^^^^^^^d^^^^^^^^"},{"007":"cr^bn^---auaua"},{"008":"880715s1969^^^^nyuabe^^^b^^^^00110^eng^^"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"69015754"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0051006-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159818600"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00051006"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"NA275"},{"b":".S3 1969"}]}},{"082":{"ind1":" ","ind2":" ","subfields":[{"a":"726.1/2/08"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Scully, Vincent Joseph,"},{"d":"1920-"}]}},{"245":{"ind1":"1","ind2":"4","subfields":[{"a":"The earth, the temple, and the gods;"},{"b":"Greek sacred architecture"},{"c":"[by] Vincent Scully."}]}},{"250":{"ind1":" ","ind2":" ","subfields":[{"a":"Rev. ed."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"New York,"},{"b":"Praeger"},{"c":"[1969]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"xxxii, 271, [192] p."},{"b":"illus., maps, plans."},{"c":"26 cm."}]}},{"500":{"ind1":" ","ind2":" ","subfields":[{"a":"\"Illustrations\": p. [1]-[192] (3d group)"}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Bibliographical references included in \"Notes\" (p. 227-251)"}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Architecture, Greek"}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Temples, Greek"}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Mythology, Greek"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"AAEL"},{"c":"BKS"},{"h":"NA275 .S44 1969"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"NA 275 .S44 1969"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"CE"},{"b":"Electronic Resource"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015004888684"},{"r":"ic"},{"d":"20090702"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015006345766"},{"r":"ic"},{"d":"20091105"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"deities"},{"b":"god ancient goddess sacred cult ritual power sun legend priest myth king animal sacrifice worship"},{"c":"417"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"nature"},{"b":"mountain river valley mile rock road lake stream bank near slope plain peak beyond cliff"},{"c":"618"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"ancient architecture"},{"b":"temple wall tomb pyramid court palace chamber colonnade capital sanctuary built plan cella stone architecture"},{"c":"683"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"space"},{"b":"effect space colorplate heavy weight contrast strong powerful power detail force entire structural solid massive"},{"c":"776"}]}}]} {"leader":"01692nam^a22004931^^4500","fields":[{"001":"000000719"},{"005":"20010330000000.0"},{"006":"m^^^^^^^^d^^^^^^^^"},{"007":"cr^bn^---auaua"},{"008":"880715s1969^^^^nyuac^^^^^^^^|00100^eng^^"},{"010":{"ind1":" ","ind2":" ","subfields":[{"a":"78093950"}]}},{"020":{"ind1":" ","ind2":" ","subfields":[{"a":"0876631065"},{"c":"10.00"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(RLIN)MIUG0063058-B"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(CaOTULAS)159818857"}]}},{"035":{"ind1":" ","ind2":" ","subfields":[{"a":"(OCoLC)ocm00063058"}]}},{"040":{"ind1":" ","ind2":" ","subfields":[{"a":"DLC"},{"c":"DLC"},{"d":"MiU"}]}},{"041":{"ind1":"1","ind2":" ","subfields":[{"a":"engita"}]}},{"050":{"ind1":"0","ind2":" ","subfields":[{"a":"NX210"},{"b":".D6"}]}},{"100":{"ind1":"1","ind2":" ","subfields":[{"a":"Dorfles, Gillo,"},{"d":"1910-"}]}},{"240":{"ind1":"0","ind2":"3","subfields":[{"a":"Il Kitsch."},{"l":"English"}]}},{"245":{"ind1":"0","ind2":"0","subfields":[{"a":"Kitsch; the world of bad taste."},{"c":"With special contributions by John McHale [and others] and essays by Clement Greenberg and Hermann Broch. [Editorial assistance on the English-language ed. by Vivienne Menkes."}]}},{"260":{"ind1":" ","ind2":" ","subfields":[{"a":"[New York]"},{"b":"Universe Books"},{"c":"[1969]"}]}},{"300":{"ind1":" ","ind2":" ","subfields":[{"a":"313 p."},{"b":"illus. (part col.), ports. (part col.)"},{"c":"25 cm."}]}},{"500":{"ind1":" ","ind2":" ","subfields":[{"a":"Translation of Il Kitsch."}]}},{"504":{"ind1":" ","ind2":" ","subfields":[{"a":"Includes bibliography."}]}},{"538":{"ind1":" ","ind2":" ","subfields":[{"a":"Mode of access: Internet."}]}},{"650":{"ind1":" ","ind2":"0","subfields":[{"a":"Kitsch"}]}},{"700":{"ind1":"1","ind2":" ","subfields":[{"a":"McHale, John."}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"FINE"},{"h":"NX 600 .K5 D693 1969"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"AAEL"},{"c":"BKS"},{"h":"NX 600 .K5 D693 1969"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"HATCH"},{"c":"GRAD"},{"h":"NX 600 .K5 D693 1969"}]}},{"852":{"ind1":"0","ind2":" ","subfields":[{"a":"MiU"},{"b":"FINE"},{"h":"NX 600 .K5 D693 1969"},{"x":"Gift"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"BK"},{"b":"Book"}]}},{"970":{"ind1":" ","ind2":" ","subfields":[{"a":"CE"},{"b":"Electronic Resource"}]}},{"971":{"ind1":" ","ind2":" ","subfields":[{"a":"MiU"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"972":{"ind1":" ","ind2":" ","subfields":[{"c":"20040625"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"HT"},{"b":"avail_ht"}]}},{"973":{"ind1":" ","ind2":" ","subfields":[{"a":"AC"},{"b":"avail_circ"}]}},{"974":{"ind1":" ","ind2":" ","subfields":[{"u":"mdp.39015012241918"},{"r":"ic"}]}},{"998":{"ind1":" ","ind2":" ","subfields":[{"s":"9665"}]}},{"995":{"ind1":" ","ind2":" ","subfields":[{"a":"mythology"},{"b":"myth reality own language anti sense condition situation history context past attempt kitsch truth contradiction"},{"c":"200"}]}}]} utf8.mrc100644000765000024 23414137142137 20172 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t00156nam a2200085 i 450000100100000024500180001065000090002865000160003765000170005300000000210aCatmandu Test 0aPerl 0aMARCaMARC2 0a加德滿都camel.mrc100644000765000024 1467714137142137 20445 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development.camel.mrk100644000765000024 1275414137142137 20447 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t=LDR 00755cam 22002414a 4500 =001 fol05731351\ =003 IMchF =005 20000613133448.0 =008 000107s2000\\\\nyua\\\\\\\\\\001\0\eng\\ =010 \\$a 00020737 =020 \\$a0471383147 (paper/cd-rom : alk. paper) =040 \\$aDLC$cDLC$dDLC =042 \\$apcc =050 00$aQA76.73.P22$bM33 2000 =082 00$a005.13/3$221 =100 1\$aMartinsson, Tobias,$d1976- =245 10$aActivePerl with ASP and ADO /$cTobias Martinsson. =260 \\$aNew York :$bJohn Wiley & Sons,$c2000. =300 \\$axxi, 289 p. :$bill. ;$c23 cm. +$e1 computer laser disc (4 3/4 in.) =500 \\$a"Wiley Computer Publishing." =650 \0$aPerl (Computer program language) =630 00$aActive server pages. =630 00$aActiveX. =LDR 00647pam 2200241 a 4500 =001 fol05754809\ =003 IMchF =005 20000601115601.0 =008 000203s2000\\\\mau\\\\\\\\\\\001\0\eng\\ =010 \\$a 00022023 =020 \\$a1565926994 =040 \\$aDLC$cDLC$dDLC =042 \\$apcc =050 00$aQA76.73.P22$bD47 2000 =082 00$a005.74$221 =100 1\$aDescartes, Alligator. =245 10$aProgramming the Perl DBI /$cAlligator Descartes and Tim Bunce. =260 \\$aCmabridge, MA :$bO'Reilly,$c2000. =263 \\$a1111 =300 \\$ap. cm. =650 \0$aPerl (Computer program language) =650 \0$aDatabase management. =700 1\$aBunce, Tim. =LDR 00605cam 22002054a 4500 =001 fol05843555\ =003 IMchF =005 20000525142739.0 =008 000318s1999\\\\cau\\\\\\b\\\\001\0\eng\\ =010 \\$a 00501349 =040 \\$aDLC$cDLC$dDLC =042 \\$apcc =050 00$aQA76.73.P22$bB763 1999 =082 00$a005.13/3$221 =100 1\$aBrown, Martin C. =245 10$aPerl :$bprogrammer's reference /$cMartin C. Brown. =260 \\$aBerkeley :$bOsborne/McGraw-Hill,$cc1999. =300 \\$axix, 380 p. ;$c22 cm. =504 \\$aIncludes bibliographical references and index. =650 \0$aPerl (Computer program language) =LDR 00579cam 22002054a 4500 =001 fol05843579\ =003 IMchF =005 20000525142716.0 =008 000318s1999\\\\caua\\\\\\\\\\001\0\eng\\ =010 \\$a 00502116 =020 \\$a0072120002 =040 \\$aDLC$cDLC$dDLC =042 \\$apcc =050 00$aQA76.73.P22$bB762 1999 =082 00$a005.13/3$221 =100 1\$aBrown, Martin C. =245 10$aPerl :$bthe complete reference /$cMartin C. Brown. =260 \\$aBerkeley :$bOsborne/McGraw-Hill,$cc1999. =300 \\$axxxv, 1179 p. :$bill. ;$c24 cm. =650 \0$aPerl (Computer program language) =LDR 00801nam 22002778a 4500 =001 fol05848297\ =003 IMchF =005 20000524125727.0 =008 000518s2000\\\\mau\\\\\\\\\\\001\0\eng\\ =010 \\$a 00041664 =020 \\$a1565924193 =040 \\$aDLC$cDLC =042 \\$apcc =050 00$aQA76.73.P22$bG84 2000 =082 00$a005.2/762$221 =100 1\$aGuelich, Scott. =245 10$aCGI programming with Perl /$cScott Guelich, Shishir Gundavaram & Gunther Birznieks. =250 \\$a2nd ed., expanded & updated =260 \\$aCambridge, Mass. :$bO'Reilly,$c2000. =263 \\$a0006 =300 \\$ap. cm. =650 \0$aPerl (Computer program language) =650 \0$aCGI (Computer network protocol) =650 \0$aInternet programming. =700 1\$aGundavaram, Shishir. =700 1\$aBirznieks, Gunther. =LDR 00665nam 22002298a 4500 =001 fol05865950\ =003 IMchF =005 20000615103017.0 =008 000612s2000\\\\mau\\\\\\\\\\\100\0\eng\\ =010 \\$a 00055759 =020 \\$a0596000138 =040 \\$aDLC$cDLC =042 \\$apcc =050 00$aQA76.73.P22$bP475 2000 =082 00$a005.13/3$221 =111 2\$aPerl Conference 4.0$d(2000 :$cMonterey, Calif.) =245 10$aProceedings of the Perl Conference 4.0 :$bJuly 17-20, 2000, Monterey, California. =250 \\$a1st ed. =260 \\$aCambridge, Mass. :$bO'Reilly,$c2000. =263 \\$a0006 =300 \\$ap. cm. =650 \0$aPerl (Computer program language)$vCongresses. =LDR 00579nam 22002178a 4500 =001 fol05865956\ =003 IMchF =005 20000615102948.0 =008 000612s2000\\\\mau\\\\\\\\\\\000\0\eng\\ =010 \\$a 00055770 =020 \\$a1565926099 =040 \\$aDLC$cDLC =042 \\$apcc =050 00$aQA76.73.P22$bB43 2000 =082 00$a005.13/3$221 =100 1\$aBlank-Edelman, David N. =245 10$aPerl for system administration /$cDavid N. Blank-Edelman. =260 \\$aCambridge, Mass. :$bO'Reilly,$c2000. =263 \\$a0006 =300 \\$ap. cm. =650 \0$aPerl (Computer program language) =LDR 00661nam 22002538a 4500 =001 fol05865967\ =003 IMchF =005 20000615102611.0 =008 000614s2000\\\\mau\\\\\\\\\\\000\0\eng\\ =010 \\$a 00055799 =020 \\$a0596000278 =040 \\$aDLC$cDLC =042 \\$apcc =050 00$aQA76.73.P22$bW35 2000 =082 00$a005.13/3$221 =100 1\$aWall, Larry. =245 10$aProgramming Perl /$cLarry Wall, Tom Christiansen & Jon Orwant. =250 \\$a3rd ed. =260 \\$aCambridge, Mass. :$bO'Reilly,$c2000. =263 \\$a0007 =300 \\$ap. cm. =650 \0$aPerl (Computer program language) =700 1\$aChristiansen, Tom. =700 1\$aOrwant, Jon. =LDR 00603cam 22002054a 4500 =001 fol05872355\ =003 IMchF =005 20000706095105.0 =008 000315s1999\\\\njua\\\\\\\\\\001\0\eng\\ =010 \\$a 00500678 =020 \\$a013020868X =040 \\$aDLC$cDLC$dDLC =042 \\$apcc =050 00$aQA76.73.P22$bL69 1999 =082 00$a005.13/3$221 =100 1\$aLowe, Vincent$q(Vincent D.) =245 10$aPerl programmer's interactive workbook /$cVincent Lowe. =260 \\$aUpper Saddle River, NJ :$bPrentice Hall PTP,$cc1999. =300 \\$axx, 633 p. :$bill. ;$c23 cm. =650 \0$aPerl (Computer program language) =LDR 00696nam 22002538a 4500 =001 fol05882032\ =003 IMchF =005 20000707091904.0 =008 000630s2000\\\\cau\\\\\\\\\\\001\0\eng\\ =010 \\$a 00058174 =020 \\$a0764547291 (alk. paper) =040 \\$aDLC$cDLC =042 \\$apcc =050 00$aQA76.73.P22$bF64 2000 =082 00$a005.13/3$221 =100 2\$aFoster-Johnson, Eric. =245 10$aCross-platform Perl /$cEric F. Johnson. =260 \\$aFoster City, CA :$bIDG Books Worldwide,$c2000. =263 \\$a0009 =300 \\$ap. cm. =500 \\$aIncludes index. =650 \0$aPerl (Computer program language) =650 \0$aWeb servers. =650 \0$aCross-platform software development. broken.xml100644000765000024 6250714137142137 20656 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t 00755cam 22002414a 4500 fol05731351 IMchF 20000613133448.0 000107s2000 nyua 001 0 eng 00020737 0471383147 (paper/cd-rom : alk. paper) DLC DLC DLC pcc QA76.73.P22 M33 2000 Martinsson, Tobias, 1976- ActivePerl with ASP and ADO / Tobias Martinsson. New York : John Wiley & Sons, 2000. xxi, 289 p. : ill. ; 23 cm. + 1 computer laser disc (4 3/4 in.) "Wiley Computer Publishing." Perl (Computer program language) Active server pages. ActiveX. 00647pam 2200241 a 4500 fol05754809 IMchF 20000601115601.0 000203s2000 mau 001 0 eng 00022023 1565926994 DLC DLC DLC pcc QA76.73.P22 D47 2000 005.74 21 Descartes, Alligator. Programming the Perl DBI / Alligator Descartes and Tim Bunce. Cmabridge, MA : O'Reilly, 2000. 1111 p. cm. Perl (Computer program language) Database management. Bunce, Tim. 00605cam 22002054a 4500 fol05843555 IMchF 20000525142739.0 000318s1999 cau b 001 0 eng 00501349 DLC DLC DLC pcc QA76.73.P22 B763 1999 005.13/3 21 Brown, Martin C. Perl : programmer's reference / Martin C. Brown. Berkeley : Osborne/McGraw-Hill, c1999. xix, 380 p. ; 22 cm. Includes bibliographical references and index. Perl (Computer program language) 00579cam 22002054a 4500 fol05843579 IMchF 20000525142716.0 000318s1999 caua 001 0 eng 00502116 0072120002 DLC DLC DLC pcc QA76.73.P22 B762 1999 005.13/3 21 Brown, Martin C. Perl : the complete reference / Martin C. Brown. Berkeley : Osborne/McGraw-Hill, c1999. xxxv, 1179 p. : ill. ; 24 cm. Perl (Computer program language) 00801nam 22002778a 4500 fol05848297 IMchF 20000524125727.0 000518s2000 mau 001 0 eng 00041664 1565924193 DLC DLC pcc QA76.73.P22 G84 2000 005.2/762 21 Guelich, Scott. CGI programming with Perl / Scott Guelich, Shishir Gundavaram & Gunther Birznieks. 2nd ed., expanded & updated Cambridge, Mass. : O'Reilly, 2000. 0006 p. cm. Perl (Computer program language) CGI (Computer network protocol) Internet programming. Gundavaram, Shishir. Birznieks, Gunther. 00665nam 22002298a 4500 fol05865950 IMchF 20000615103017.0 000612s2000 mau 100 0 eng 00055759 0596000138 DLC DLC pcc QA76.73.P22 P475 2000 005.13/3 21 Perl Conference 4.0 (2000 : Monterey, Calif.) Proceedings of the Perl Conference 4.0 : July 17-20, 2000, Monterey, California. 1st ed. Cambridge, Mass. : O'Reilly, 2000. 0006 p. cm. Perl (Computer program language) Congresses. 00579nam 22002178a 4500 fol05865956 IMchF 20000615102948.0 000612s2000 mau 000 0 eng 00055770 1565926099 DLC DLC pcc QA76.73.P22 B43 2000 005.13/3 21 Blank-Edelman, David N. Perl for system administration / David N. Blank-Edelman. Cambridge, Mass. : O'Reilly, 2000. 0006 p. cm. Perl (Computer program language) 00661nam 22002538a 4500 fol05865967 IMchF 20000615102611.0 000614s2000 mau 000 0 eng 00055799 0596000278 DLC DLC pcc QA76.73.P22 W35 2000 005.13/3 21 Wall, Larry. Programming Perl / Larry Wall, Tom Christiansen & Jon Orwant. 3rd ed. Cambridge, Mass. : O'Reilly, 2000. 0007 p. cm. Perl (Computer program language) Christiansen, Tom. Orwant, Jon. 00603cam 22002054a 4500 fol05872355 IMchF 20000706095105.0 000315s1999 njua 001 0 eng 00500678 013020868X DLC DLC DLC pcc QA76.73.P22 L69 1999 005.13/3 21 Lowe, Vincent (Vincent D.) Perl programmer's interactive workbook / Vincent Lowe. Upper Saddle River, NJ : Prentice Hall PTP, c1999. xx, 633 p. : ill. ; 23 cm. Perl (Computer program language) 00696nam 22002538a 4500 fol05882032 IMchF 20000707091904.0 000630s2000 cau 001 0 eng 00058174 0764547291 (alk. paper) DLC DLC pcc QA76.73.P22 F64 2000 005.13/3 21 Foster-Johnson, Eric. Cross-platform Perl / Eric F. Johnson. Foster City, CA : IDG Books Worldwide, 2000. 0009 p. cm. Includes index. Perl (Computer program language) Web servers. Cross-platform software development. camel9.mrc100644000765000024 127014137142137 20477 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development.MANIFEST.SKIP100644000765000024 1114137142137 20205 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271dist.ini bu_bibs.mrc100644000765000024 63757214137142137 21016 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t02009cam 2200289 a 45000010018000000050017000180080039000350100016000740150015000900200079001050350093001840400033002770430012003100490009003220500024003312450098003552600053004533000021005065040064005275050739005916500132013307000146014628520054016089070015016629940012016779990030016899917735594000116120150312090411.0121103s2002 mau b 001 0 eng a20020049 23 aGBA2-X4078 a1555535291 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/1555535291 a(OCoLC)495768200http://www.worldcat.org/oclc/495768200/resolver/wikidata/oclc/49576820 aDLCcDLCdUKMdC#PdUNAdCUM an-us--- aBOSS00aHV8699.U5bG35 200200aAmerica without the death penalty :bstates leading the way /cJohn F. Galliher ... [et al.]. aBoston :bNortheastern University Press,cc2002. a280 p. ;c25 cm. aIncludes bibliographical references (p. 263-274) and index.0 aMichigan's continuing abolition of the death penalty and the conceptual components of symbolic legislation -- The death penalty and social policy in Wisconsin -- The power of history : death penalty abolition in Maine -- Abolition and attempted reinstatement in Minnesota, 1911-1923 -- Un-American activities in North Dakota : the continuaing abolition of capital punishment -- The history of death penalty abolition in Alaska -- Colonialism and capital punishment : race, class and legal symbolism in Hawaiian executions, 1826-1990 -- Death penalty abolition, reinstatement, and abolition in Iowa -- The life and death of the death penalty in West Virginia -- Epilogue : abolition in the courts -- Appendix : data collection methods. 0aCapital punishmentzUnited StatesxStates.0http://id.loc.gov/authorities/subjects/sh850199490/resolver/wikidata/lc/sh850199491 aGalliher, John F.0http://id.loc.gov/authorities/names/n770011040http://viaf.org/viaf/sourceID/LC|n770011040/resolver/wikidata/lc/n770011040 bMUGcbosshHV8699.U5iG35 2002822614585190001161 a.b24545132 aE0bBOS amugarb1c030207dmeaf-02426cam 2200385 a 45000010018000000050017000180080039000350100016000740150019000900160018001090200089001270200083002160200084002990200078003830350096004610350096005570400040006530430012006930490009007050500022007141000162007362450131008982600058010293000026010875040064011135050283011776500118014606500113015786500118016916500122018098520052019319070015019839940012019989990030020109917759114000116120150312090411.0121103s2010 nyu b s001 0 eng a20090539 87 aGBB0967442bnb7 a0156250472Uk a9781438433271 (hardcover : alk. paper)0http://www.isbnsearch.org/isbn/9781438433271 a1438433271 (hardcover : alk. paper)0http://www.isbnsearch.org/isbn/1438433271 a9781438433264 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9781438433264 a1438433263 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/1438433263 a(OCoLC)5021506260http://www.worldcat.org/oclc/5021506260/resolver/wikidata/oclc/502150626 a(OCoLC)5021506260http://www.worldcat.org/oclc/5021506260/resolver/wikidata/oclc/502150626 aDLCcDLCdYDXdYDXCPdUKMdCDXdBOS an-us--- aBOSS00aHQ1197b.S43 20101 aSears, Stephanie D.,d1964-0http://id.loc.gov/authorities/names/n20100048300http://viaf.org/viaf/sourceID/LC|n20100048300/resolver/wikidata/lc/n201000483010aImagining Black womanhood :bthe negotiation of power and identity within the Girls Empowerment Project /cStephanie D. Sears. aAlbany :bState University of New York Press,cc2010. axii, 189 p. ;c24 cm. aIncludes bibliographical references (p. 165-189) and index.0 aGirls Empowerment Project -- Controlling "the urban girl" -- GEP's culture of empowerment -- GEP's organizational structure and power matrix -- Africentric womanism meets decent girl femininity -- Dance lessons -- Conclusion : imagining Black womanhood, imagining social change. 0aWomanismzUnited States.0http://id.loc.gov/authorities/subjects/sh20060015760/resolver/wikidata/lc/sh2006001576 0aAfrican American girls.0http://id.loc.gov/authorities/subjects/sh940054860/resolver/wikidata/lc/sh94005486 0aWomen, BlackzUnited States.0http://id.loc.gov/authorities/subjects/sh851473640/resolver/wikidata/lc/sh85147364 0aIdentity (Philosophical concept)0http://id.loc.gov/authorities/subjects/sh850641500/resolver/wikidata/lc/sh850641500 bMUGcbosshHQ1197i.S43 2010822615387450001161 a.b36765089 aC0bBOS amugarb1c110823dmeaf-01914cam 2200361 a 45000010018000000050017000180080039000350100016000740150015000900200071001050350093001760400023002690430030002920490009003220500021003311000154003522450133005062600057006393000039006965040065007356510135008006510044009356510035009796510038010146510035010526510120010876510119012076510122013268520050014489070014014989940011015129990029015239917732711000116120150312090411.0121103s2001 cauab b 001 0 eng a20010428 66 aGBA2-14273 a0804741794 (alk. paper)0http://www.isbnsearch.org/isbn/0804741794 a(OCoLC)472163250http://www.worldcat.org/oclc/472163250/resolver/wikidata/oclc/47216325 aDLCcDLCdUKMdBOS ae-fr---anwgp---af-mg--- aBOSS00aDC397b.J45 20011 aJennings, Eric Thomas.0http://id.loc.gov/authorities/names/no990628210http://viaf.org/viaf/sourceID/LC|no990628210/resolver/wikidata/lc/no9906282110aVichy in the tropics :bPétain's national revolution in Madagascar, Guadeloupe, and Indochina, 1940-1944 /cEric T. Jennings aStanford, Calif. :bStanford University Press,c2001 avii, 311 p. :bill., maps ;c24 cm aIncludes bibliographical references (p. [281]-300) and index aFrancexHistoryyGerman occupation, 1940-1945.0http://id.loc.gov/authorities/subjects/sh850514180/resolver/wikidata/lc/sh8505141 aFrancexColoniesxHistoryy20th century aGuadeloupexColonial influence aGuadeloupexHistoryy20th century aMadagascarxColonial influence aMadagascarxHistoryy1885-1960.0http://id.loc.gov/authorities/subjects/sh850794990/resolver/wikidata/lc/sh8507949 aIndochinaxColonial influence.0http://id.loc.gov/authorities/subjects/sh850657160/resolver/wikidata/lc/sh8506571 aIndochinaxHistoryy20th century.0http://id.loc.gov/authorities/subjects/sh850657160/resolver/wikidata/lc/sh8506571 bMUGcbosshDC397i.J45 200182261448587000116 a.b2428090 aE0bBO amugarb1c020416dmeaf02012cam 22003374a 45000010018000000050017000180080039000350100016000740200071000900350093001610400018002540420008002720430012002800490009002920500026003011000155003272450094004822600042005763000025006184900202006435040066008456000171009116500146010826500146012286500115013748300072014898520056015619070015016179940012016329990030016449917734787000116120150312090410.0121103s2002 nyu b 001 0 eng a20010374 57 a1571131930 (alk. paper)0http://www.isbnsearch.org/isbn/1571131930 a(OCoLC)471009210http://www.worldcat.org/oclc/471009210/resolver/wikidata/oclc/47100921 aDLCcDLCdC#P apcc ae------ aBOSS00aPT2625.A44bD634 20021 aGrimstad, Kirsten J.0http://id.loc.gov/authorities/names/n20010358150http://viaf.org/viaf/sourceID/LC|n20010358150/resolver/wikidata/lc/n200103581514aThe modern revival of gnosticism and Thomas Mann's Doktor Faustus /cKirsten J. Grimstad. aRochester, NY :bCamden House,c2002. axi, 294 p. ;c24 cm.1 aStudies in German literature, linguistics, and culture.0(uri) http://id.loc.gov/authorities/names/n420238550(uri) http://viaf.org/viaf/sourceID/LC|n420238550(uri) /resolver/wikidata/lc/n42023855 aIncludes bibliographical references (p. [245]-269) and index.10aMann, Thomas,d1875-1955.tDoktor Faustus.0http://id.loc.gov/authorities/names/n830210480http://viaf.org/viaf/sourceID/LC|n830210480/resolver/wikidata/lc/n83021048 0aLiterature, Moderny19th centuryxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh850775580/resolver/wikidata/lc/sh85077558 0aLiterature, Moderny20th centuryxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh850775610/resolver/wikidata/lc/sh85077561 0aGnosticism in literature.0http://id.loc.gov/authorities/subjects/sh950001910/resolver/wikidata/lc/sh95000191 0aStudies in German literature, linguistics, and culture (Unnumbered)0 bMUGcbosshPT2625.A44iD634 2002822614542800001161 a.b24285341 aE0bBOS amugarb1c020522dmeaf-02941pam 2200409 a 45000010018000000050017000180080039000350100016000740150015000900200071001050200078001760350093002540400033003470430021003800490009004010500023004101000151004332450093005842600058006773000027007355040064007625050515008266500132013416500141014736500144016146500044017586500116018026500113019186510115020316510122021466510037022686510116023058520053024219070015024749940012024899990030025019917739630000116120150312090407.0121103s2002 enk b 001 0 eng a20020667 91 aGBA2-V6141 a0195150171 (alk. paper)0http://www.isbnsearch.org/isbn/0195150171 a019515018X (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/019515018X a(OCoLC)495508970http://www.worldcat.org/oclc/495508970/resolver/wikidata/oclc/49550897 aDLCcDLCdUKMdC#PdVVCdBOS ae-uk---aa-ii--- aBOSS00aPR129.I5bS33 20021 aSabin, Margery,d1940-0http://id.loc.gov/authorities/names/n852104640http://viaf.org/viaf/sourceID/LC|n852104640/resolver/wikidata/lc/n8521046410aDissenters and mavericks :bwritings about India in English, 1765-2000 /cMargery Sabin. aOxford ;aNew York :bOxford University Press,c2002. aviii, 239 p. ;c24 cm. aIncludes bibliographical references (p. 221-232) and index.0 aIntroduction: Why dissent matters to literature -- Pt. 1. The colonial period. Anti-imperialist wit in Horace Walpole's letters ; Burke's India campaign: Goliath, scourge, redeemer ; William Henry Sleeman and the Suttee romance ; Victorian oblivion and The moonstone -- Pt. 2. After independence. The beast in Nirad Chaudhuri's garden ; The politics of cultural freedom: India in the 1950s ; Individuality as a problem in Naipaul's Indian narratives ; Epilogue: Pankaj Mishra and postcolonial cosmopolitanism. 0aEnglish literaturexHistory and criticism.0http://id.loc.gov/authorities/subjects/sh850438330/resolver/wikidata/lc/sh85043833 0aAnglo-Indian literaturexHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20091149450/resolver/wikidata/lc/sh2009114945 0aIndic literature (English)xHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20081044130/resolver/wikidata/lc/sh2008104413 0aIndiaxForeign public opinion, British. 0aImperialism in literature.0http://id.loc.gov/authorities/subjects/sh940049790/resolver/wikidata/lc/sh94004979 0aPostcolonialismzIndia.0http://id.loc.gov/authorities/subjects/sh970078350/resolver/wikidata/lc/sh97007835 0aIndiaxIn literature.0http://id.loc.gov/authorities/subjects/sh20081044090/resolver/wikidata/lc/sh2008104409 0aGreat BritainxRelationszIndia.0http://id.loc.gov/authorities/subjects/sh850566050/resolver/wikidata/lc/sh85056605 0aIndiaxRelationszGreat Britain. 0aIndiaxHistoriography.0http://id.loc.gov/authorities/subjects/sh20081044140/resolver/wikidata/lc/sh20081044140 bMUGcbosshPR129.I5iS33 2002822614714860001161 a.b24540006 aE0bBOS amugarb1c030123dmeaf-02057cam 22003494a 45000010018000000050017000180080041000350200064000760200058001400350096001980350096002940400025003900430012004150490009004270900024004361000153004602450092006132460032007052600045007373000037007825040066008195460028008856000175009136500127010886500116012156500139013317000146014708520051016169070012016679940009016799990019016889917758865000116120150312090407.0121103s2010 cc ac c 001 0 eng d a97871010760800http://www.isbnsearch.org/isbn/9787101076080 a71010760840http://www.isbnsearch.org/isbn/7101076084 a(OCoLC)7141231230http://www.worldcat.org/oclc/7141231230/resolver/wikidata/oclc/714123123 a(OCoLC)7141231230http://www.worldcat.org/oclc/7141231230/resolver/wikidata/oclc/714123123 aBMFcBMFdYDXCPdBWX aa-cc--- aBOSS aND1366.7b.Y36 20101 aYang, Kathleen.0http://id.loc.gov/authorities/names/no20120373570http://viaf.org/viaf/sourceID/LC|no20120373570/resolver/wikidata/lc/no201203735710aThrough a Chinese connoisseur's eye :bprivate notes of C.C. Wang /cby Kathleen Yang.30aPrivate notes of C.C. Wang. aBeijing :bZhonghua Book Company,c2010. a432 p. :bill., ports. ;c26 cm. aIncludes bibliographical references (p. 409-411) and indexes. aIn English and Chinese.10aWang, Chi-chÊ»ienxArt collectionsvCatalogs.0http://id.loc.gov/authorities/names/n500585940http://viaf.org/viaf/sourceID/LC|n500585940/resolver/wikidata/lc/n5005859 aLandscape painting, ChinesevCatalogs.0http://id.loc.gov/authorities/subjects/sh850744440/resolver/wikidata/lc/sh8507444 aScrolls, ChinesevCatalogs.0http://id.loc.gov/authorities/subjects/sh851189800/resolver/wikidata/lc/sh8511898 aArt, ChinesexCollectors and collectingvCatalogs.0http://id.loc.gov/authorities/subjects/sh850075990/resolver/wikidata/lc/sh8500759 aWang, Chi-chÊ»ien.0http://id.loc.gov/authorities/names/n500585940http://viaf.org/viaf/sourceID/LC|n500585940/resolver/wikidata/lc/n50058 bMUGcbosshND1366.7i.Y36 2010822727001070001 a.b36760 aC0b amugarb1dmea02093pam 2200349 a 45000010018000000050017000180080039000350100016000740150019000900160018001090200071001270240018001980350093002160400035003090430012003440490009003560500021003651000158003862450084005442600054006283000026006825040049007085200352007576500154011096500116012636510131013796510125015108520051016359070015016869940012017019990030017139917730882000116120150312090358.0121103s2006 mou s001 0 eng a20050278 98 aGBA5987852bnb7 a0133428142Uk a0826216188 (alk. paper)0http://www.isbnsearch.org/isbn/08262161883 a9780826216182 a(OCoLC)617483280http://www.worldcat.org/oclc/617483280/resolver/wikidata/oclc/61748328 aDLCcDLCdYDXdBAKERdUKMdBOS an-usu-- aBOSS00aPS261b.W56 20061 aWinchell, Mark Royden,d1948-0http://id.loc.gov/authorities/names/n800115910http://viaf.org/viaf/sourceID/LC|n800115910/resolver/wikidata/lc/n8001159110aReinventing the South :bversions of a literary region /cMark Royden Winchell. aColumbia :bUniversity of Missouri Press,cc2006. axiv, 253 p. ;c24 cm. aIncludes bibliographic references and index. a"Surveys the revivification and reinvention of southern culture and literature, and the influence of the Agrarians, Fugitives, New Critics, and popular writers, including John Gould Fletcher, Robert Penn Warren, Monroe K. Spears, Walter Sullivan, William Faulkner, Tennessee Williams, William Humphrey, and Cormac McCarthy"--Provided by publisher. 0aAmerican literaturezSouthern StatesxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20071010550/resolver/wikidata/lc/sh2007101055 0aRegionalism in literature.0http://id.loc.gov/authorities/subjects/sh851123760/resolver/wikidata/lc/sh85112376 0aSouthern StatesxIntellectual lifey1865-0http://id.loc.gov/authorities/subjects/sh851256530/resolver/wikidata/lc/sh85125653 0aSouthern StatesxIn literature.0http://id.loc.gov/authorities/subjects/sh20081116380/resolver/wikidata/lc/sh20081116380 bMUGcbosshPS261i.W56 2006822614402320001161 a.b26197029 aC0bBOS amugarb1c060315dmeaf-02512cam 22003854a 45000010018000000050017000180080039000350100016000740150019000900160018001090200084001270350093002110400045003040420008003490430012003570490009003690500022003781000154004002450105005542600072006593000036007315040066007676100176008336100176010096500138011856500147013236500142014706500151016126510127017636510127018908520052020179070015020699940012020849990030020969917728577000116120150312090352.0121103s2005 paua b s001 0 eng a20050112 90 aGBA5837242bnb7 a0133059532Uk a0271027045 (clothbound : alk. paper)0http://www.isbnsearch.org/isbn/0271027045 a(OCoLC)598816670http://www.worldcat.org/oclc/598816670/resolver/wikidata/oclc/59881667 aDLCcDLCdYDXdUKMdBAKERdVVCdIXAdPUL apcc ae-fr--- aBOSS00aBX1530b.B97 20051 aByrnes, Joseph F.,d1939-0http://id.loc.gov/authorities/names/n800297610http://viaf.org/viaf/sourceID/LC|n800297610/resolver/wikidata/lc/n8002976110aCatholic and French forever :breligious and national identity in modern France /cJoseph F. Byrnes. aUniversity Park, PA :bPennsylvania State University Press,cc2005. axxiii, 278 p. :bill. ;c25 cm. aIncludes bibliographical references (p. [225]-256) and index.20aCatholic ChurchzFrancexHistoryy19th century.0http://id.loc.gov/authorities/names/n790417160http://viaf.org/viaf/sourceID/LC|n790417160/resolver/wikidata/lc/n7904171620aCatholic ChurchzFrancexHistoryy20th century.0http://id.loc.gov/authorities/names/n790417160http://viaf.org/viaf/sourceID/LC|n790417160/resolver/wikidata/lc/n79041716 0aChurch and statezFrancexHistoryy19th century.0http://id.loc.gov/authorities/subjects/sh850255340/resolver/wikidata/lc/sh85025534 0aChurch and statexCatholic ChurchxHistoryy19th century.0http://id.loc.gov/authorities/subjects/sh850255340/resolver/wikidata/lc/sh85025534 0aChurch and statezFrancexHistoryy20th century.0http://id.loc.gov/authorities/subjects/sh20091196580/resolver/wikidata/lc/sh2009119658 0aChurch and statexCatholic ChurchxHistoryy20th century.0http://id.loc.gov/authorities/subjects/sh20081007620/resolver/wikidata/lc/sh2008100762 0aFrancexChurch historyy19th century.0http://id.loc.gov/authorities/subjects/sh850511810/resolver/wikidata/lc/sh85051181 0aFrancexChurch historyy20th century.0http://id.loc.gov/authorities/subjects/sh850511820/resolver/wikidata/lc/sh850511820 bMUGcbosshBX1530i.B97 2005822614341320001161 a.b26193863 aC0bBOS amugarb1c060405dmeaf-02326cam 22003494a 45000010018000000050017000180080039000350100016000740150019000900160018001090190013001270200078001400240018002180350093002360400035003290420008003640490009003720500022003812450097004032600063005003000027005634400054005905040051006445050815006956500114015106500100016247000143017248520052018679070015019199940012019349990030019469917729711000116120150312090350.0121103s2005 enk b 001 0 eng a20050481 34 aGBA5116062bnb7 a0131062632Uk a62759870 a1403945160 (hbk. : alk. paper)0http://www.isbnsearch.org/isbn/14039451603 a9781403945167 a(OCoLC)606691090http://www.worldcat.org/oclc/606691090/resolver/wikidata/oclc/60669109 aDLCcDLCdUKMdBAKERdPMCdBOS apcc aBOSS00aJZ1305b.N47 200504aThe new public diplomacy :bsoft power in international relations /cedited by Jan Melissen. aBasingstoke [UK] ;aNew York :bPalgrave Macmillan,c2005. axxiv, 221 p. ;c23 cm. 0aStudies in diplomacy and international relations. aIncludes bibliographical references and index.0 aThe new public diplomacy : between theory and practice / Jan Melissen -- Rethinking the 'new' public diplomacy / Brian Hocking -- Power, public diplomacy, and the Pax Americana / Peter van Ham -- Niche diplomacy in the world public arena : the global 'corners' of Canada and Norway / Alan K. Henrikson -- Public diplomacy in the People's Republic of China / Ingrid d'Hooghe -- Revolutionary states, outlaw regimes and the techniques of public diplomacy / Paul Sharp -- The EU as a soft power : the force of persuasion / Anna Michalski -- Culture communicates : US diplomacy that works / Cynthia P. Schneider -- Making a national brand / Wally Olins -- Dialogue-based public diplomacy : a new foreign policy paradigm? / Shaun Riordan -- Training for public diplomacy : an evolutionary perspective / John Hemery. 0aInternational relations.0http://id.loc.gov/authorities/subjects/sh850674350/resolver/wikidata/lc/sh85067435 0aDiplomacy.0http://id.loc.gov/authorities/subjects/sh850381790/resolver/wikidata/lc/sh850381791 aMelissen, Jan.0http://id.loc.gov/authorities/names/n940433240http://viaf.org/viaf/sourceID/LC|n940433240/resolver/wikidata/lc/n940433240 bMUGcbosshJZ1305i.N47 2005822614370700001161 a.b26196888 aC0bBOS amugarb1c060321dmeaf-01571nam 2200289 a 45000010018000000050017000180080041000350200064000760200058001400350096001980350096002940400032003900490009004220900023004312450098004542600050005523000036006024400069006385040051007076500122007586500145008807000146010258520053011719070015012249940012012399990030012519917721523000116120150312090345.0121103s2007 ne a b 001 0 eng d a97801236623540http://www.isbnsearch.org/isbn/9780123662354 a01236623540http://www.isbnsearch.org/isbn/0123662354 a(OCoLC)1730221830http://www.worldcat.org/oclc/1730221830/resolver/wikidata/oclc/173022183 a(OCoLC)1730221830http://www.worldcat.org/oclc/1730221830/resolver/wikidata/oclc/173022183 aUUMcUUMdBAKERdYDXCPdBOS aBOSS aRC570b.F661 v. 3400aHandbook of assessment in persons with intellectual disability /cedited by Johnny L. Matson. aAmsterdam ;bBoston :bAcademic Press,c2007. axviii, 462 p. :bill. ;c24 cm. 0aInternational review of research in mental retardation ;vv. 34. aIncludes bibliographical references and index. 0aPeople with mental disabilities.0http://id.loc.gov/authorities/subjects/sh850836670/resolver/wikidata/lc/sh85083667 0aMental retardationxDiagnosisxHandbooks, manuals, etc.0http://id.loc.gov/authorities/subjects/sh850836580/resolver/wikidata/lc/sh850836581 aMatson, Johnny L.0http://id.loc.gov/authorities/names/n801611710http://viaf.org/viaf/sourceID/LC|n801611710/resolver/wikidata/lc/n801611710 bMUGcbosshRC570i.F661 v. 34822614089200001161 a.b27455622 aC0bBOS amugarb1c071019dmeaf-02442cam 2200349 a 45000010018000000050017000180080039000350100016000740200071000900350093001610400040002540430012002940490009003060500021003151000153003362450087004892600061005763000026006374400031006635040064006945050364007586500153011226500157012756500151014326500151015836510125017346510125018598520051019849070015020359940012020509990030020629917729099000116120150312090344.0121103s2006 lau b s001 0 eng a20050076 80 a080713080X (alk. paper)0http://www.isbnsearch.org/isbn/080713080X a(OCoLC)587899590http://www.worldcat.org/oclc/587899590/resolver/wikidata/oclc/58789959 aDLCcDLCdC#PdSYBdIXAdBAKERdBOS an-usu-- aBOSS00aPS261b.S44 20061 aSilver, Andrew.0http://id.loc.gov/authorities/names/no20060271400http://viaf.org/viaf/sourceID/LC|no20060271400/resolver/wikidata/lc/no200602714010aMinstrelsy and murder :bthe crisis of Southern humor, 1835-1925 /cAndrew Silver. aBaton Rouge :bLouisiana State University Press,cc2006. axii, 222 p. ;c23 cm. 0aSouthern literary studies. aIncludes bibliographical references (p. 205-215) and index.00tFaithless signs and pandaemonian riots : the amphibious politics of Longstreet's dialect humor --tMaking minstrelsy of murder : George Washington Harris, the Ku Klux Klan, and the reconstruction aesthetic of fright --tWas Jim white? : navigating racial discourse in Adventures of Huckleberry Finn --tMaking murder of minstrelsy : Charles Chesnutt's Ha'nts. 0aAmerican wit and humorzSouthern StatesxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh850044240/resolver/wikidata/lc/sh85004424 0aHumorous stories, AmericanzSouthern StatesxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh850629760/resolver/wikidata/lc/sh85062976 0aAmerican literaturey19th centuryxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20071010470/resolver/wikidata/lc/sh2007101047 0aAmerican literaturey20th centuryxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20071010490/resolver/wikidata/lc/sh2007101049 0aSouthern StatesxIntellectual life.0http://id.loc.gov/authorities/subjects/sh851256510/resolver/wikidata/lc/sh85125651 0aSouthern StatesxIn literature.0http://id.loc.gov/authorities/subjects/sh20081116380/resolver/wikidata/lc/sh20081116380 bMUGcbosshPS261i.S44 2006822614320220001161 a.b26196840 aC0bBOS amugarb1c060315dmeaf-01378pam 22002894a 45000010018000000050017000180080039000350100016000740200078000900350093001680400018002610420008002790430012002870490009002990500025003081000143003332450051004762600059005273000040005865040064006266000161006906500125008518520055009769070015010319940012010469990030010589917721500000116120150312090341.0121103s2004 dcua b 001 0beng a20040433 01 a1563682737 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/1563682737 a(OCoLC)545439550http://www.worldcat.org/oclc/545439550/resolver/wikidata/oclc/54543955 aDLCcDLCdBOS apcc an-us--- aBOSS00aHV2534.B64bL35 20041 aLang, Harry G.0http://id.loc.gov/authorities/names/n930674370http://viaf.org/viaf/sourceID/LC|n930674370/resolver/wikidata/lc/n9306743710aEdmund Booth :bdeaf pioneer /cHarry G. Lang. aWashington, D.C. :bGallaudet University Press,c2004. ax, 213 p. :bill., ports. ;c23 cm. aIncludes bibliographical references (p. 203-205) and index.10aBooth, Edmund,d1810-1905.0http://id.loc.gov/authorities/names/n20040894180http://viaf.org/viaf/sourceID/LC|n20040894180/resolver/wikidata/lc/n2004089418 0aDeafzUnited StatesvBiography.0http://id.loc.gov/authorities/subjects/sh20091229100/resolver/wikidata/lc/sh20091229100 bMUGcbosshHV2534.B64iL35 2004822614108370001161 a.b25293837 aE0bBOS amugarb1c041208dmeaf-01536cam 22003134a 45000010018000000050017000180080041000350100016000760200079000920240018001710350093001890400039002820420008003210490009003290500020003381000149003582450066005072600053005733000025006265040051006516500101007026500111008036500101009146500100010158520050011159070015011659940012011809990030011929917731067000116120150312090339.0121103s2005 nyu b 001 0 eng c a20050184 11 a0801444322 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/08014443223 a9780801444326 a(OCoLC)608393040http://www.worldcat.org/oclc/608393040/resolver/wikidata/oclc/60839304 aNIC/DLCcDLCdYDXdBAKERdIXAdBOS apcc aBOSS00aB837b.K66 20051 aKoethe, John,d1945-0http://id.loc.gov/authorities/names/n840387710http://viaf.org/viaf/sourceID/LC|n840387710/resolver/wikidata/lc/n8403877110aScepticism, knowledge, and forms of reasoning /cJohn Koethe. aIthaca, N.Y. :bCornell University Press,c2005. aix, 161 p. ;c24 cm. aIncludes bibliographical references and index. 0aSkepticism.0http://id.loc.gov/authorities/subjects/sh851231250/resolver/wikidata/lc/sh85123125 0aKnowledge, Theory of.0http://id.loc.gov/authorities/subjects/sh850727320/resolver/wikidata/lc/sh85072732 0aEpistemics.0http://id.loc.gov/authorities/subjects/sh850444510/resolver/wikidata/lc/sh85044451 0aReasoning.0http://id.loc.gov/authorities/subjects/sh851117900/resolver/wikidata/lc/sh851117900 bMUGcbosshB837i.K66 2005822614408540001161 a.b26197066 aC0bBOS amugarb1c060315dmeaf-01026nam 2200265 a 45000010018000000050017000180080041000350200058000760350093001340400018002270430012002450490009002570900027002661000151002932450028004442600063004723000020005354400024005555000011005795000056005908520057006469070015007039940012007189990030007309917724190000116120150312090337.0121103s2004 pau 000 p eng d a08229585970http://www.isbnsearch.org/isbn/0822958597 a(OCoLC)565705810http://www.worldcat.org/oclc/565705810/resolver/wikidata/oclc/56570581 aPITcPITdBOS an-us--- aBOSS aPS3558.A4216bB33 20041 aHamby, Barbara,d1952-0http://id.loc.gov/authorities/names/n950359630http://viaf.org/viaf/sourceID/LC|n950359630/resolver/wikidata/lc/n9503596310aBabel /cBarbara Hamby. aPittsburgh, Pa. :bUniversity of Pittsburgh Press,cc2004. a80 p. ;c23 cm. 0aPitt poetry series. aPoems. a"Winner of the Donald Hall Prize in Poetry"--Cover.0 bMUGcbosshPS3558.A4216iB33 2004822614214470001161 a.b25301330 aE0bBOS amugarb1c041210dmeaf-01895cam 22003374a 45000010018000000050017000180080041000350100016000760150019000920160018001110200058001290350093001870400028002800420008003080430012003160490009003280500026003371000152003632450122005152600043006373000040006804400037007205000092007575040053008496500151009026500146010536500142011996500140013418520045014819990031015269917720157000116120150312090334.0121103s2004 enkab b 000 0 eng c a20044849 13 aGBA5275192bnb7 a0130364252Uk a18417163240http://www.isbnsearch.org/isbn/1841716324 a(OCoLC)574248300http://www.worldcat.org/oclc/574248300/resolver/wikidata/oclc/57424830 aCStcSTFdDLCdUKMdBOS apcc an-mx--- aBOSS00aF1219.1.M55bF55 20041 aFilini, Agapi.0http://id.loc.gov/authorities/names/nr20040376560http://viaf.org/viaf/sourceID/LC|nr20040376560/resolver/wikidata/lc/nr200403765614aThe presence of Teotihuacan in the Cuitzeo Basin, Michoacán, Mexico :ba world-system perspective /cAgapi Filini aOxford, England :bArchaeopress,c2004 aviii, 152 p. :bill., maps ;c30 cm aBAR international series ;v1279 aOriginally presented as the author's thesis (doctoral)--University College London, 2002 aIncludes bibliographical references (p. 121-152) aIndians of MexicozMexicozMichoacán de OcampoxAntiquities.0http://id.loc.gov/authorities/subjects/sh850651340/resolver/wikidata/lc/sh85065 aIndians of MexicozMexicozMichoacán de OcampoxCommerce.0http://id.loc.gov/authorities/subjects/sh850651340/resolver/wikidata/lc/sh850 aExcavations (Archaeology)zMexicozMichoacán de Ocampo.0http://id.loc.gov/authorities/subjects/sh850461050/resolver/wikidata/lc/sh8 aTeotihuacán potteryzMexicozMichoacán de Ocampo.0http://id.loc.gov/authorities/subjects/sh20010020790/resolver/wikidata/lc/s bMUGcbosshF1219.1.M55iF55 20048226140 aE0bBOS amugarb1c050501446pam 22003014a 45000010018000000050017000180080039000350100016000740200079000900350093001690400023002620420008002850430012002930490009003050500027003141000140003412450112004812600051005933000035006445040066006796500107007456500118008526510060009708520057010309070015010879940012011029990030011149917720742000116120150312090331.0121103s2004 azua b s001 0 eng a20040069 11 a0816524130 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0816524130 a(OCoLC)548440890http://www.worldcat.org/oclc/548440890/resolver/wikidata/oclc/54844089 aDLCcDLCdYDXdBOS apcc an-mx--- aBOSS00aF1219.76.R45bK58 20041 aKnab, T. J.0http://id.loc.gov/authorities/names/n930729410http://viaf.org/viaf/sourceID/LC|n930729410/resolver/wikidata/lc/n9307294114aThe dialogue of earth and sky :bdreams, souls, curing, and the modern Aztec underworld /cTimothy J. Knab. aTucson :bUniversity of Arizona Press,cc2004. axiii, 179 p. :bill. ;c24 cm. aIncludes bibliographical references (p. [161]-173) and index. 0aAztecsxReligion.0http://id.loc.gov/authorities/subjects/sh850106840/resolver/wikidata/lc/sh85010684 0aIndians of MexicoxReligion.0http://id.loc.gov/authorities/subjects/sh850651720/resolver/wikidata/lc/sh85065172 0aSierra Norte (Oaxaca, Mexico)xSocial life and customs.0 bMUGcbosshF1219.76.R45iK58 2004822614068160001161 a.b25301482 aE0bBOS amugarb1c041213dmeaf-01731pam 22003134a 45000010018000000050017000180080039000350100016000740200070000900350093001600400025002530420008002780430021002860490009003070500026003161000158003422450092005002600034005923000026006265040064006526500154007166500146008706500148010166500140011648520056013049070015013609940012013759990030013879917729840000116120150312090331.0121103s2006 nyu b 001 0 eng a20050170 53 a0415952018 (hardbound)0http://www.isbnsearch.org/isbn/0415952018 a(OCoLC)606690600http://www.worldcat.org/oclc/606690600/resolver/wikidata/oclc/60669060 aDLCcDLCdYDXdBAKER apcc an-us---aa-ja--- aBOSS00aRC455.4.F3bK385 20061 aKawanishi, Yuko,d1957-0http://id.loc.gov/authorities/names/n20050435780http://viaf.org/viaf/sourceID/LC|n20050435780/resolver/wikidata/lc/n200504357810aFamilies coping with mental illness :bstories from the US and Japan /cYuko Kawanishi. aNew York :bRoutledge,c2006. axix, 230 p. ;c24 cm. aIncludes bibliographical references (p. 219-221) and index. 0aMentally illzUnited StatesxFamily relationshipsvCase studies.0http://id.loc.gov/authorities/subjects/sh850836990/resolver/wikidata/lc/sh85083699 0aMentally illzJapanxFamily relationshipsvCase studies.0http://id.loc.gov/authorities/subjects/sh850836990/resolver/wikidata/lc/sh85083699 0aFamilies of the mentally illzUnited StatesvCase studies.0http://id.loc.gov/authorities/subjects/sh990042470/resolver/wikidata/lc/sh99004247 0aFamilies of the mentally illzJapanvCase studies.0http://id.loc.gov/authorities/subjects/sh990042470/resolver/wikidata/lc/sh990042470 bMUGcbosshRC455.4.F3iK385 2006822614375040001161 a.b26191660 aC0bBOS amugarb1c060404dmeaf-01817cam 2200349 a 45000010018000000050017000180080039000350100013000740200077000870200071001640200058002350200064002930350093003570350093004500400044005430430012005870490009005990500024006081000146006322450099007782600052008773000040009294400036009695000054010055040053010596500116011126510128012288520054013569070015014109940012014259990030014379917721878000116120150312090330.0121103r19951977hiuab b 001 0 eng a94024730 a9780824816964 (alk. paper)0http://www.isbnsearch.org/isbn/9780824816964 a082481696X (alk. paper)0http://www.isbnsearch.org/isbn/082481696X a08248171090http://www.isbnsearch.org/isbn/0824817109 a97808248171070http://www.isbnsearch.org/isbn/9780824817107 a(OCoLC)311343170http://www.worldcat.org/oclc/311343170/resolver/wikidata/oclc/31134317 a(OCoLC)311343170http://www.worldcat.org/oclc/311343170/resolver/wikidata/oclc/31134317 aDLCcDLCdEL$dBAKERdBTCTAdLVBdYDXCP aas----- aBOSS00aGN635.S58bK49 19951 aKeyes, Charles F.0http://id.loc.gov/authorities/names/n810037190http://viaf.org/viaf/sourceID/LC|n810037190/resolver/wikidata/lc/n8100371914aThe golden peninsula :bculture and adaptation in mainland Southeast Asia /cCharles F. Keyes. aHonolulu :bUniversity of Hawaii Press,cc1995. axii, 370 p. :bill., maps ;c23 cm. 0aSHAPS library of Asian studies. aOriginally published: New York : Macmillan, 1977. aIncludes bibliographical references and indexes. 0aEthnologyzSoutheast Asia.0http://id.loc.gov/authorities/subjects/sh850452220/resolver/wikidata/lc/sh85045222 0aSoutheast AsiaxSocial conditions.0http://id.loc.gov/authorities/subjects/sh20081170340/resolver/wikidata/lc/sh20081170340 bMUGcbosshGN635.S58iK49 1995822614080640001161 a.b27459822 aC0bBOS amugarb1c071121dmeaf-02935pam 22004094a 45000010018000000050017000180080039000350100016000740150019000900160018001090200089001270200083002160350093002990350093003920400049004850430012005340490009005460500024005551000144005792450098007232600059008213000034008805040064009145050436009786500163014146500156015776500145017336500130018786500118020086500132021266500118022586510038023768520054024149070015024689940012024839990030024959917723735000116120150312090324.0121103s2007 njui a b 001 0 eng a20061003 13 aGBA7513182bnb7 a0137839102Uk a9780691130873 (hardcover : alk. paper)0http://www.isbnsearch.org/isbn/9780691130873 a0691130876 (hardcover : alk. paper)0http://www.isbnsearch.org/isbn/0691130876 a(OCoLC)769373910http://www.worldcat.org/oclc/769373910/resolver/wikidata/oclc/76937391 a(OCoLC)769373910http://www.worldcat.org/oclc/769373910/resolver/wikidata/oclc/76937391 aDLCcDLCdYDXdBTCTAdBAKERdUKMdYDXCPdBOS an-us--- aBOSS00aPS153.N5bB563 20071 aBlair, Sara.0http://id.loc.gov/authorities/names/no960170280http://viaf.org/viaf/sourceID/LC|no960170280/resolver/wikidata/lc/no9601702810aHarlem crossroads :bBlack writers and the photograph in the twentieth century /cSara Blair. aPrinceton, N.J. :bPrinceton University Press,cc2007. axxi, 353 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 267-340) and index.0 aA riot of images: Harlem and the pursuit of modernity -- Documenting Harlem: images and afterlives -- From Black voices to Black power: Richard Wright and the trial of documentary -- Ralph Ellison, photographer -- Photo-text capital: James Baldwin, Richard Avedon, and the uses of Harlem -- Dodging and burning: the writer and the image after the Civil Rights Era -- Coda looking back: Toni Morrison and the return to Plato's cave. 0aAmerican literaturexAfrican American authorsxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20071007360/resolver/wikidata/lc/sh2007100736 0aPolitics and literaturezUnited StatesxHistoryy20th century.0http://id.loc.gov/authorities/subjects/sh20081095430/resolver/wikidata/lc/sh2008109543 0aAfrican AmericansxIntellectual lifey20th century.0http://id.loc.gov/authorities/subjects/sh20071002050/resolver/wikidata/lc/sh2007100205 0aPhotographyzUnited StatesxHistory.0http://id.loc.gov/authorities/subjects/sh20101062880/resolver/wikidata/lc/sh2010106288 0aPhotographyxPhilosophy.0http://id.loc.gov/authorities/subjects/sh20081092790/resolver/wikidata/lc/sh2008109279 0aModernism (Literature)zUnited States.0http://id.loc.gov/authorities/subjects/sh20081078860/resolver/wikidata/lc/sh2008107886 0aAfrican American aesthetics.0http://id.loc.gov/authorities/subjects/sh890029030/resolver/wikidata/lc/sh89002903 0aHarlem (New York, N.Y.)xHistory.0 bMUGcbosshPS153.N5iB563 2007822614150060001161 a.b27455634 aC0bBOS amugarb1c071016dmeaf-02291cam 22003974a 45000010018000000050017000180070015000350080039000500100016000890200084001050200078001890350096002670350096003630400052004590430012005110490015005230500022005381000152005602450127007122600055008393000035008945000048009295000017009775040049009946100197010436100167012406500139014076900026015467100153015728520050017258520052017759030009018279070015018369940012018519990030018639917723724000116120150312090323.0cr un|||||||||121103s2007 caua b 000 0 eng a20070236 09 a9780833041210 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9780833041210 a0833041215 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0833041215 a(OCoLC)1414842870http://www.worldcat.org/oclc/1414842870/resolver/wikidata/oclc/141484287 a(OCoLC)1414842870http://www.worldcat.org/oclc/1414842870/resolver/wikidata/oclc/141484287 aDLCcDLCdYDXdBAKERdBTCTAdSCTdCZLdAFQdBOS an-us--- aBOSSaBOTN00aUG1243b.H55 20071 aHildebrandt, Gregory G.0http://id.loc.gov/authorities/names/n810160950http://viaf.org/viaf/sourceID/LC|n810160950/resolver/wikidata/lc/n8101609510aBudget estimating relationships for depot-level reparables in the Air Force flying hour program /cGregory G. Hildebrandt. aSanta Monica, CA :bRand/Project Air Force,c2007. axxiii, 61 p. :bill. ;c23 cm. a"Prepared for the United States Air Force." a"MG-355-AF." aIncludes bibliographical references (p. 61).10aUnited States.bAir ForcexEquipmentxMaintenance and repairxCosts.0http://id.loc.gov/authorities/names/n791268110http://viaf.org/viaf/sourceID/LC|n791268110/resolver/wikidata/lc/n7912681110aUnited States.bAir ForcexAccounting.0http://id.loc.gov/authorities/names/n791268110http://viaf.org/viaf/sourceID/LC|n791268110/resolver/wikidata/lc/n79126811 0aAirplanes, MilitaryzUnited StatesxPartsxCosts.0http://id.loc.gov/authorities/subjects/sh850029340/resolver/wikidata/lc/sh85002934 aElectronic resources.2 aProject Air Force (U.S.)0http://id.loc.gov/authorities/names/n853681220http://viaf.org/viaf/sourceID/LC|n853681220/resolver/wikidata/lc/n853681220 bBUcwebhUG1243i.H55 20078226141496100011610 bMUGcbosshUG1243i.H55 2007822614149680001161 aBOSS a.b27453613 aC0bBOS amultib2c071204dmeaf-01587cam 22003254a 45000010018000000050017000180080039000350100016000740150019000900160018001090200065001270240025001920350093002170400047003100420008003570490009003650500022003741000155003962450112005512460059006632600068007223000033007905040064008236100144008876500121010318520052011529070015012049940012012199990030012319917729219000116120150312090320.0121103s2005 enk b 001 0 eng a20050492 01 aGBA5760032bnb7 a0132883002Uk a1403992843 (hbk.)0http://www.isbnsearch.org/isbn/14039928433 a9781403992840 (hbk.) a(OCoLC)605149010http://www.worldcat.org/oclc/605149010/resolver/wikidata/oclc/60514901 aDLCcDLCdUKMdBWKUKdYUSdPULdBAKERdBOS apcc aBOSS00aJZ4841b.M37 20051 aMartens, Kerstin.0http://id.loc.gov/authorities/names/nb20020486870http://viaf.org/viaf/sourceID/LC|nb20020486870/resolver/wikidata/lc/nb200204868710aNGOs and the United Nations :binstitutionalization, professionalization and adaptation /cKerstin Martens.3 aNon-governmental organizations and the United Nations. aBasingstoke [England] ;aNew York :bPalgrave Macmillan,c2005. axv, 199 p. :bill. ;c23 cm. aIncludes bibliographical references (p. 174-194) and index.20aUnited Nations.0http://id.loc.gov/authorities/names/n790213450http://viaf.org/viaf/sourceID/LC|n790213450/resolver/wikidata/lc/n79021345 0aNon-governmental organizations.0http://id.loc.gov/authorities/subjects/sh860073600/resolver/wikidata/lc/sh860073600 bMUGcbosshJZ4841i.M37 2005822614393830001161 a.b26196906 aC0bBOS amugarb1c060321dmeaf-02216nam 22003614a 45000010018000000050017000180080041000350200058000760350093001340400023002270410033002500420008002830430012002910490009003030500026003121100084003382450284004222600043007063000034007494400037007835040040008205460080008606500129009406500116010696500138011856510125013237000141014487000156015898520055017459070014018009940011018149990029018259917721827000116120150312090318.0121103s2004 enkab b 100 0 eng c a18417163750http://www.isbnsearch.org/isbn/1841716375 a(OCoLC)574248310http://www.worldcat.org/oclc/574248310/resolver/wikidata/oclc/57424831 aCStcSTFdDLCdBOS1 aengafreaitaaspabengbfre apcc ae------ aBOSS00aGN778.2.B44bA73 20042 aArchéologie et gobelets (Association).bMeetingd(2001 :cSion, Switzerland aGraves and funerary rituals during the late Neolithic and the early Bronze age in Europe (2700-2000 BC) :bproceedings of the international conference held at the Cantonal Archaeological Museum, Sion (Switzerland), October 4th-7th 2001 /cedited by Marie Besse, Jocelyne Desideri aOxford, England :bArchaeopress,c2004 a205 p. :bill., maps ;c30 cm aBAR international series ;v1284 aIncludes bibliographical references aEnglish, French, Italian, and Spanish, with abstracts in French and English aBell beaker culturezEuropevCongresses.0http://id.loc.gov/authorities/subjects/sh870077970/resolver/wikidata/lc/sh8700779 aBurialzEuropevCongresses.0http://id.loc.gov/authorities/subjects/sh850180800/resolver/wikidata/lc/sh8501808 aFuneral rites and ceremonieszEuropevCongresses.0http://id.loc.gov/authorities/subjects/sh850523800/resolver/wikidata/lc/sh8505238 aEuropexAntiquitiesvCongresses.0http://id.loc.gov/authorities/subjects/sh20081034040/resolver/wikidata/lc/sh200810340 aBesse, Marie.0http://id.loc.gov/authorities/names/n971164740http://viaf.org/viaf/sourceID/LC|n971164740/resolver/wikidata/lc/n9711647 aDesideri, Jocelyne.0http://id.loc.gov/authorities/names/nb20043089170http://viaf.org/viaf/sourceID/LC|nb20043089170/resolver/wikidata/lc/nb200430891 bMUGcbosshGN778.2.B44iA73 200482261407899000116 a.b2529243 aC0bBO amugarb1c050525dmeaf02474cam 2200361 a 45000010018000000050017000180080039000350100016000740200079000900200085001690200078002540200084003320350093004160350093005090400039006020420008006410430012006490490009006610500024006701000159006942450125008532600060009783000026010385040051010645050457011156500146015726500134017187000149018528520054020019070015020559940012020709990030020829917723646000116120150312090318.0121103s2004 mdu b 001 0 eng a20030219 95 a0742514102 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0742514102 a9780742514102 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9780742514102 a0742514110 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0742514110 a9780742514119 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9780742514119 a(OCoLC)531453560http://www.worldcat.org/oclc/531453560/resolver/wikidata/oclc/53145356 a(OCoLC)531453560http://www.worldcat.org/oclc/531453560/resolver/wikidata/oclc/53145356 aDLCcDLCdOCLdBAKERdBTCTAdYDXCP apcc an-us--- aBOSS00aLB2351.2b.F85 20041 aFullinwider, Robert K.,d1942-0http://id.loc.gov/authorities/names/n791465990http://viaf.org/viaf/sourceID/LC|n791465990/resolver/wikidata/lc/n7914659910aLeveling the playing field :bjustice, politics, and college admissions /cRobert K. Fullinwider and Judith Lichtenberg. aLanham, Md. :bRowman & Littlefield Publishers,cc2004. axii, 267 p. ;c24 cm. aIncludes bibliographical references and index.0 aIntroduction. April is the cruellest month -- Demystifying merit -- The multiple missions of modern universities -- Open admissions and the community colleges -- How the academically rich get richer -- The test : understanding the SAT -- Admissions tests : uses, abuses, alternatives -- The SAT on trial -- Affirmative action and the legacy of Bakke -- Justifying affirmative action -- Sowing the seeds of higher education -- Summing up, looking ahead. 0aUniversities and collegeszUnited StatesxAdmission.0http://id.loc.gov/authorities/subjects/sh20081131080/resolver/wikidata/lc/sh2008113108 0aEducational equalizationzUnited States.0http://id.loc.gov/authorities/subjects/sh20081024890/resolver/wikidata/lc/sh20081024891 aLichtenberg, Judith.0http://id.loc.gov/authorities/names/n896294400http://viaf.org/viaf/sourceID/LC|n896294400/resolver/wikidata/lc/n896294400 bMUGcbosshLB2351.2i.F85 2004822614167010001161 a.b27462778 aC0bBOS amugarb1c071012dmeaf-01311cam 22002778a 45000010018000000050017000180080039000350100016000740200077000900200071001670350093002380350093003310400034004240490009004580500025004671000032004922450085005242600059006093000029006685040051006976000173007488520055009219070015009769940012009919990030010039917723599000116120150312090317.0121103s2007 pau b 001 0 eng a20060370 15 a9780838756751 (alk. paper)0http://www.isbnsearch.org/isbn/9780838756751 a0838756751 (alk. paper)0http://www.isbnsearch.org/isbn/0838756751 a(OCoLC)760646810http://www.worldcat.org/oclc/760646810/resolver/wikidata/oclc/76064681 a(OCoLC)760646810http://www.worldcat.org/oclc/760646810/resolver/wikidata/oclc/76064681 aDLCcDLCdBTCTAdBAKERdYDXCP aBOSS00aPQ8097.L47bZ88 20071 aTravis, Christopher,d1971-10aResisting alienation :bthe literary work of Enrique Lihn /cChristopher Travis. aLewisburg [Penn.] :bBucknell University Press,c2007. a298 p. :bill. ;c25 cm. aIncludes bibliographical references and index.10aLihn, EnriquexCriticism and interpretation.0http://id.loc.gov/authorities/names/n500501570http://viaf.org/viaf/sourceID/LC|n500501570/resolver/wikidata/lc/n500501570 bMUGcbosshPQ8097.L47iZ88 2007822614165470001161 a.b27454319 aC0bBOS amugarb1c080102dmeaf-03230cam 22003614a 45000010018000000050017000180080039000350100016000740150019000900160018001090200079001270200078002060350093002840400033003770420008004100490009004180500021004272450109004482600057005573000025006144400036006395040051006755050587007265050583013135050484018966500108023807000141024887000143026298520048027729070012028209940009028329990027028419917720603000116120150312090315.0121103s2004 inu b s001 0 eng a20040064 17 aGBA4449972bnb7 a0129369002Uk a0253344409 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0253344409 a0253217024 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0253217024 a(OCoLC)548439900http://www.worldcat.org/oclc/548439900/resolver/wikidata/oclc/54843990 aDLCcDLCdUKMdC#PdIOPdBOS apcc aBOSS00aBD581b.R53 200400aRethinking nature :bessays in environmental philosophy /cedited by Bruce V. Foltz and Robert Frodeman. aBloomington, IN :bIndiana University Press,cc2004. avi, 357 p. ;c24 cm. 0aStudies in Continental thought. aIncludes bibliographical references and index.00tIntroduction: the nature of environmental philosophy /rBruce V. Foltz, Robert Frodeman --tUncanny goodness of being edible to bears /rJames Hatley --tTrees and truth (or, why we are really all druids) /rDavid Wood --tBoundary projects versus border patrol /rIrene J. Klaver --tChildren and the ethics of place /rIngrid Leman Stefanovic --tReciprocity/rDavid Abram --tEco-logic: an erotic of nature /rTrish Glazebrook --tVegetable genius: plant metamorphosis as a figure for thinking and relating to the natural world in post-Kantian German thought /rElaine P. Miller.00tElemental earth /rJohn Sallis --tPhilosophy in the field /rRobert Frodeman --tBeyond doubt: environmental philosophy and the human predicament /rRobert Kirkman --tDeleuze and Guattari's return to science as a basis for environmental philosophy /rRobert Mugerauer --tWhat can continental philosophy contribute to environmentalalism? /rMichael E. Zimmerman --tContemporary continental philosophy and environmental ethics: A difficult relationship? /rDiane Michelfelder --tBiodiversity, exuberance, and abundance: cherishing the body of the earth /rStephen David Ross.00tMapping the earth in works of art /rEdward S. Casey --tMusic of space /rAlphonso Lingis --tA Sand County Almanac: through anthropogenic to ecogenic thinking /rKenneth Maly --tNature and nurture: a non-disjunctive approach /rBruce Wilshire, with Ron Cooper --tNature and freedom: an introduction to the environmental thought of Bernard Charbonneau /rDaniel Cérézuelle --tNature's other side: the demise of nature and the phenomenology of giveness /rBruce V. Fol aPhilosophy of nature.0http://id.loc.gov/authorities/subjects/sh851010040/resolver/wikidata/lc/sh85101 aFoltz, Bruce V.0http://id.loc.gov/authorities/names/n930701580http://viaf.org/viaf/sourceID/LC|n930701580/resolver/wikidata/lc/n93070 aFrodeman, Robert.0http://id.loc.gov/authorities/names/n992565120http://viaf.org/viaf/sourceID/LC|n992565120/resolver/wikidata/lc/n99256 bMUGcbosshBD581i.R53 2004822614063700001 a.b25301 aE0b amugarb1c041213dmea03017cam 2200361 a 45000010018000000050017000180080039000350100016000740150019000900160018001090200071001270200066001980200065002640200071003290350093004000350093004930400049005860490009006350500025006442450088006692600058007573000033008155040051008485051142008996500118020416500108021596500127022677000149023948520055025439070015025989940012026139990030026259917724723000116120150312090314.0121103s2007 enka b 001 0 eng a20060210 14 aGBA7137852bnb7 a0136776602Uk a9780195177060 (hbk.)0http://www.isbnsearch.org/isbn/9780195177060 a0195177061 (cloth)0http://www.isbnsearch.org/isbn/0195177061 a019517707X (pbk.)0http://www.isbnsearch.org/isbn/019517707X a9780195177077 (pbk.)0http://www.isbnsearch.org/isbn/9780195177077 a(OCoLC)702080290http://www.worldcat.org/oclc/702080290/resolver/wikidata/oclc/70208029 a(OCoLC)702080290http://www.worldcat.org/oclc/702080290/resolver/wikidata/oclc/70208029 aDLCcDLCdBAKERdBTCTAdUKMdC#PdYDXCPdVYF aBOSS00aBL1237.46b.W67 200700aWomen's lives, women's rituals in the Hindu tradition /cedited by Tracy Pintchman. aOxford ;aNew York :bOxford University Press,c2007. axv, 208 p. :bill. ;c24 cm. aIncludes bibliographical references and index.0 aPt. 1. Engaging domesticity. The cat in the courtyard: the performance of Sanskrit and the religious experience of women / Laurie L. Patton -- Wandering from "hills to valleys" with the goddess: protection and freedom in the Matamma tradition of Andhra / Joyce Burkhalter Flueckiger -- Lovesick Gopi or woman's best friend: the mythic Sakhi and ritual friendships among women in Benares / Tracy Pintchman -- Words that breach walls: women's rituals in Rajasthan / Lindsey Harlan -- Threshold designs, forehead dots, and menstruation rituals: exploring time and space in Tamil Kolams / Vijaya Rettakudi Nagarajan. Pt. 2. Beyond domesticity. Domesticity and difference/women and men: religious life in medieval Tamilnadu / Leslie C. Orr -- The anatomy of devotion: the life and poetry of Karaikkal Ammaiyar / Elaine Craddock -- The play of the mother: possession and power in Hindu women's goddess rituals / Kathleen M. Erndl -- Does Tantric ritual empower women? Renunciation and domesticity among female Bengali Tantrikas / June McDaniel -- Performing arts, re-forming rituals: women and social change in South India / Vasudha Narayanan. 0aHindu womenxReligious life.0http://id.loc.gov/authorities/subjects/sh851473730/resolver/wikidata/lc/sh85147373 0aHinduismxRituals.0http://id.loc.gov/authorities/subjects/sh850609420/resolver/wikidata/lc/sh85060942 0aHindu womenxSocial life and customs.0http://id.loc.gov/authorities/subjects/sh851473720/resolver/wikidata/lc/sh851473721 aPintchman, Tracy.0http://id.loc.gov/authorities/names/nr930486770http://viaf.org/viaf/sourceID/LC|nr930486770/resolver/wikidata/lc/nr930486770 bMUGcbosshBL1237.46i.W67 2007822614194310001161 a.b27466255 aC0bBOS amugarb1c071127dmeaf-02226cam 22003734a 45000010018000000050017000180080039000350100016000740150019000900160018001090200082001270200076002090350093002850350093003780400051004710430012005220490009005340500024005431000142005672450067007092600058007763000034008345040066008686500163009346500161010976500127012586500133013856500115015186500108016338520054017419070015017959940012018109990030018229917712922000116120150312090314.0121103s2007 enka b 001 0 eng a20061022 95 aGBA6799112bnb7 a0135572062Uk a9780199270859 (acid-free paper)0http://www.isbnsearch.org/isbn/9780199270859 a0199270856 (acid-free paper)0http://www.isbnsearch.org/isbn/0199270856 a(OCoLC)715415860http://www.worldcat.org/oclc/715415860/resolver/wikidata/oclc/71541586 a(OCoLC)715415860http://www.worldcat.org/oclc/715415860/resolver/wikidata/oclc/71541586 aDLCcDLCdUKMdBAKERdBWKUKdYDXCPdBTCTAdBOS ae-uk-en aBOSS00aPR275.L35bS35 20071 aScase, Wendy.0http://id.loc.gov/authorities/names/n880217940http://viaf.org/viaf/sourceID/LC|n880217940/resolver/wikidata/lc/n8802179410aLiterature and complaint in England, 1272-1553 /cWendy Scase. aOxford ;aNew York :bOxford University Press,c2007. axii, 215 p. :bill. ;c24 cm. aIncludes bibliographical references (p. [188]-204) and index. 0aEnglish literatureyMiddle English, 1100-1500xHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20081030980/resolver/wikidata/lc/sh2008103098 0aEnglish literatureyEarly modern, 1500-1700xHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20081195810/resolver/wikidata/lc/sh2008119581 0aLaw and literaturexHistoryyTo 1500.0http://id.loc.gov/authorities/subjects/sh850752970/resolver/wikidata/lc/sh85075297 0aNarration (Rhetoric)xHistoryyTo 1500.0http://id.loc.gov/authorities/subjects/sh20081082070/resolver/wikidata/lc/sh2008108207 0aComplaints (Rhetoric)0http://id.loc.gov/authorities/subjects/sh20050003190/resolver/wikidata/lc/sh2005000319 0aLaw in literature.0http://id.loc.gov/authorities/subjects/sh850753090/resolver/wikidata/lc/sh850753090 bMUGcbosshPR275.L35iS35 2007822613789390001161 a.b27287580 aC0bBOS amugarb1c070703dmeaf-03393cam 22003494a 45000010018000000050017000180080039000350100016000740200085000900200079001750200084002540200078003380350093004160350093005090400061006020430012006630490009006750500024006842450088007082600051007963000033008475040051008805051434009316500127023656500142024927000148026347000150027828520054029329070015029869940012030019990030030139917722865000116120150312090313.0121103s2007 ilua b 001 0 eng a20061014 02 a9780226720005 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9780226720005 a0226720004 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0226720004 a9780226720012 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9780226720012 a0226720012 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0226720012 a(OCoLC)769673280http://www.worldcat.org/oclc/769673280/resolver/wikidata/oclc/76967328 a(OCoLC)769673280http://www.worldcat.org/oclc/769673280/resolver/wikidata/oclc/76967328 aDLCcDLCdBTCTAdBAKERdOCLCQdC#PdYDXCPdVYFdIXAdBOS an-us--- aBOSS00aHQ1034.U6bP65 200704aThe politics of same-sex marriage /cedited by Craig A. Rimmerman and Clyde Wilcox. aChicago :bUniversity of Chicago Press,c2007. axv, 385 p. :bill. ;c23 cm. aIncludes bibliographical references and index.0 aPreface / Clyde Wilcox -- Introduction: the politics of same-sex marriage / Mark Carl Rom -- Will the courts set us free? Reflactions on the campaign for same-sex marriage / John D'Emilio -- The consequences of marriage policy for same-sex couples' well-being / Ellen D.B. Riggle and Sharon S. Rostosky -- Same-sex marriage, GLBT organizations, and the lack of spirited political engagement / Ronald G. Shaiko -- Theological perspectives on gay unions: the uneasy marriage of religion and politics / Kenneth D. Wald and Graham B. Glover -- Religious coalition for and against gay marriage: the culture war rages on / David C. Campbell and Carin Robinson -- The anti-gay marriage movement / Sean Cahill -- Framing the issue of same-sex marriage: traditional values versus equal rights / Barry L. Tadlock, C. Ann Gordon, and Elizabeth Popp -- If I bend this far I will break? Public opinion about same-sex marriage / Clyde Wilcox ... [et al/] -- Same-sex marriage in the 2004 election / DeWayne L. Lucas -- The presidency, Congress, and same-sex marriage / Craig A. Rimmerman -- 'Til death -- or the Supreme Court -- do us part: litigating gay marriage / Karen O'Connor and Alixandra B. Yanus -- The politics of same-sex marriage versus the politics of gay civil rights: a comparison of public opinion and state voting patterns / Katie Lofton and Donald P. Haider-Markel -- The United States in comparative context / David Rayside. 0aSame-sex marriagezUnited States.0http://id.loc.gov/authorities/subjects/sh20081111700/resolver/wikidata/lc/sh2008111170 0aSame-sex marriagexPolitical aspectszUnited States.0http://id.loc.gov/authorities/subjects/sh920039010/resolver/wikidata/lc/sh920039011 aRimmerman, Craig A.0http://id.loc.gov/authorities/names/n920902860http://viaf.org/viaf/sourceID/LC|n920902860/resolver/wikidata/lc/n920902861 aWilcox, Clyde,d1953-0http://id.loc.gov/authorities/names/n868569910http://viaf.org/viaf/sourceID/LC|n868569910/resolver/wikidata/lc/n868569910 bMUGcbosshHQ1034.U6iP65 2007822614127500001161 a.b27456018 aC0bBOS amugarb1c071016dmeaf-02124cam 22003374a 45000010018000000050017000180080039000350100016000740200079000900350093001690400023002620420008002850430012002930490009003050500022003141000160003362450097004962600053005933000024006464400055006705040064007255050365007896500128011546500130012826500128014126500137015408520052016779070015017299940012017449990030017569917722386000116120150312090313.0121103s2004 inu b s001 0 eng a20040064 14 a0253344808 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0253344808 a(OCoLC)548819760http://www.worldcat.org/oclc/548819760/resolver/wikidata/oclc/54881976 aDLCcDLCdC#PdBOS apcc an-us-in aBOSS00aHV99.I5bM37 20041 aMapes, Mary L.q(Mary Lynne)0http://id.loc.gov/authorities/names/no990206650http://viaf.org/viaf/sourceID/LC|no990206650/resolver/wikidata/lc/no9902066512aA public charity :breligion and social welfare in Indianapolis, 1929-2002 /cMary L. Mapes. aBloomington :bIndiana University Press,cc2004. ax, 173 p. ;c24 cm. 0aPolis Center series on religion and urban culture. aIncludes bibliographical references (p. 149-168) and index.0 aCatholic Charities and the making of the welfare state -- A city of families: social welfare and postwar prosperity -- Rediscovering poverty, redefining community: religion, the civil rights movement, and the war on poverty -- "Beyond religious boundaries": urban ministry and social order -- "One soul at a time": welfare reform and faith-based organizations. 0aSocial servicezIndianazIndianapolis.0http://id.loc.gov/authorities/subjects/sh851240490/resolver/wikidata/lc/sh85124049 0aChurch charitieszIndianazIndianapolis.0http://id.loc.gov/authorities/subjects/sh850255840/resolver/wikidata/lc/sh85025584 0aPublic welfarezIndianazIndianapolis.0http://id.loc.gov/authorities/subjects/sh851088460/resolver/wikidata/lc/sh85108846 0aNonprofit organizationszIndianazIndianapolis.0http://id.loc.gov/authorities/subjects/sh850329850/resolver/wikidata/lc/sh850329850 bMUGcbosshHV99.I5iM37 2004822614131740001161 a.b25294283 aE0bBOS amugarb1c041202dmeaf-01787cam 22003374a 45000010018000000050017000180080039000350100016000740150019000900160018001090200070001270200064001970350093002610350093003540400049004470430012004960490009005080500022005171000151005392450099006902600059007893000024008485040066008726500138009386500122010767000142011988520052013409070015013929940012014079990030014199917722339000116120150312090310.0121103s2007 nyu b 001 0 eng a20070016 57 aGBA7496982bnb7 a0137791012Uk a9781595581334 (hc.)0http://www.isbnsearch.org/isbn/9781595581334 a1595581332 (hc.)0http://www.isbnsearch.org/isbn/1595581332 a(OCoLC)790035800http://www.worldcat.org/oclc/790035800/resolver/wikidata/oclc/79003580 a(OCoLC)790035800http://www.worldcat.org/oclc/790035800/resolver/wikidata/oclc/79003580 aDLCcDLCdBAKERdBTCTAdC#PdYDXCPdIXAdUKM an-us--- aBOSS00aHV6432b.C62 20071 aCole, David,d1958-0http://id.loc.gov/authorities/names/no990250920http://viaf.org/viaf/sourceID/LC|no990250920/resolver/wikidata/lc/no9902509210aLess safe, less free :bwhy America is losing the War on Terror /cDavid Cole and Jules Lobel. aNew York :bNew Press :bDistributed by Norton,c2007. ax, 326 p. ;c22 cm. aIncludes bibliographical references (p. [267]-313) and index. 0aTerrorismxGovernment policyzUnited States.0http://id.loc.gov/authorities/subjects/sh20081127990/resolver/wikidata/lc/sh2008112799 0aWar on Terrorism, 2001-2009.0http://id.loc.gov/authorities/subjects/sh20010001480/resolver/wikidata/lc/sh20010001481 aLobel, Jules.0http://id.loc.gov/authorities/names/n878787870http://viaf.org/viaf/sourceID/LC|n878787870/resolver/wikidata/lc/n878787870 bMUGcbosshHV6432i.C62 2007822614130180001161 a.b27451148 aC0bBOS amugarb1c071109dmeaf-03291cam 2200421 a 45000010018000000050017000180080041000350350093000760400038001690410018002070490009002250900021002342450156002552460025004112460022004362460018004582460046004762460041005222600044005633000043006075000119006505040032007695050826008015460009016276100148016366500145017846500150019296500152020796500107022316500113023386500105024517100170025567110060027268520046027869070014028329940008028469990015028549917723415000116120150312090309.0121103s2004 sp a bc 000 0 cat d a(OCoLC)566178840http://www.worldcat.org/oclc/566178840/resolver/wikidata/oclc/56617884 aYYAcYYAdGZMdIXAdPMCdOCLdBOS0 acataspaaeng aBOSS aN6447b.B44 200403aLa bellesa del fracàs, el fracàs de la bellesa =bLa belleza del fracaso, el fracaso de la belleza = The beauty of failure, the failure of beau aFracàs de la bel aFracaso de la bel aFailure of be aBelleza del fracaso, el fracaso de la bel aBeauty of failure, the failure of be aBarcelona :bFundació Joan Miró cc2004. a260 p. :bill. (some col.)  c30 cm. aCatalog of an exhibition held May 28-Oct. 24, 2004, in Barcelona as part of the 1st Universal Forum of  aIncludes bibliographical re aLa bellesa del fracàs/El fracàs de la bellesa = La belleza del fracaso/El fracaso de la belleza = The beauty of failure/The failure of beauty / Bazon Brock -- Anarquia = Anarquía = Anarchy -- Els que Tinguely va oblidar = Aquellos que Tinguely olvidó = The ones Tinguely forgot -- Cum ipso et in ipso / Leila Kais -- Més ençà del teatre i el museu : sobre el fracàs de l'obra d'art total = Más acá del teatro y el museo : sobre el fracaso de la obra de arte total = On this side of the stage and museum : on the failure of the total work of art / Roger Fornoff -- L'obra d'art total = La obra de arte total = The total work of art -- La reforma de la vida = Life reform -- El segle de la desil-lusió = El siglo de la desilusión = The century of disillusionment / Ralf Beil  aText aFundació Joan Miró (Barcelona, Spain)vCatalogs.0http://id.loc.gov/authorities/names/n790560760http://viaf.org/viaf/sourceID/LC|n7905 0/resolver/wikidata/lc/n79056076 0aArt, Moderny19th centuryxThemes, motivesvExhibitions.0http://id.loc.gov/authorities/subjects/sh85007 0/resolver/wikidata/lc/sh85007793 0aArt, Moderny20th centuryxThemes, motivesvExhibitions.0http://id.loc.gov/authorities/subjects/sh2007101464 0/resolver/wikidata/lc/sh2007101464 0aArt, Moderny21st centuryxThemes, motivesvExhibitions.0http://id.loc.gov/authorities/subjects/sh2009115684 0/resolver/wikidata/lc/sh2009115684 0aUtopias in art.0http://id.loc.gov/authorities/subjects/sh97002 0/resolver/wikidata/lc/sh97002460 0aArtxPolitical aspects.0http://id.loc.gov/authorities/subjects/sh85007 0/resolver/wikidata/lc/sh85007495 0aDisappointment.0http://id.loc.gov/authorities/subjects/sh85038 0/resolver/wikidata/lc/sh850382872 aFundació Joan Miró (Barcelona, Spain)0http://id.loc.gov/authorities/names/n790560760http://viaf.org/viaf/sourceID/LC|n 0/resolver/wikidata/lc/n790560762 aUniversal Forum of  n(1st :d2004cBarcelona, Spain)0 bMUGc hN6447i.B 8226 a.b2529983902237cam 2200349 a 45000010018000000050017000180080039000350100016000740200071000900350093001610400030002540430012002840490009002960500024003051000142003292450107004712600055005783000026006335040064006596000168007236500148008916500145010396500131011846500124013156500119014396500110015586500108016688520054017769070015018309940012018459990030018579917723971000116120150312090308.0121103s2004 ohu b s001 0 eng a20040088 55 a0873388097 (alk. paper)0http://www.isbnsearch.org/isbn/0873388097 a(OCoLC)550005640http://www.worldcat.org/oclc/550005640/resolver/wikidata/oclc/55000564 aDLCcDLCdOCLCQdC#PdBOS an-us--- aBOSS00aPS374.S33bB46 20041 aBender, Bert.0http://id.loc.gov/authorities/names/n880362260http://viaf.org/viaf/sourceID/LC|n880362260/resolver/wikidata/lc/n8803622610aEvolution and "the sex problem" :bAmerican narratives during the eclipse of Darwinism /cBert Bender. aKent, Ohio :bKent State University Press,cc2004. axvi, 389 p. ;c25 cm. aIncludes bibliographical references (p. 362-375) and index.10aDarwin, Charles,d1809-1882xInfluence.0http://id.loc.gov/authorities/names/n780956370http://viaf.org/viaf/sourceID/LC|n780956370/resolver/wikidata/lc/n78095637 0aAmerican fictiony20th centuryxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20071006870/resolver/wikidata/lc/sh2007100687 0aLiterature and sciencezEnglish-speaking countries.0http://id.loc.gov/authorities/subjects/sh20081070200/resolver/wikidata/lc/sh2008107020 0aAmerican fictionxEnglish influences.0http://id.loc.gov/authorities/subjects/sh20091147820/resolver/wikidata/lc/sh2009114782 0aEvolution (Biology) in literature.0http://id.loc.gov/authorities/subjects/sh940041330/resolver/wikidata/lc/sh94004133 0aMate selection in literature.0http://id.loc.gov/authorities/subjects/sh950090040/resolver/wikidata/lc/sh95009004 0aNarration (Rhetoric)0http://id.loc.gov/authorities/subjects/sh850898330/resolver/wikidata/lc/sh85089833 0aSex in literature.0http://id.loc.gov/authorities/subjects/sh851206180/resolver/wikidata/lc/sh851206180 bMUGcbosshPS374.S33iB46 2004822614157810001161 a.b25301512 aE0bBOS amugarb1c041209dmeaf-02784nam 2200445 a 45000010018000000050017000180080039000350100016000740150019000900160018001090200071001270200065001980350096002630350096003590400023004550420022004780430030005000490009005300500026005391000153005652450141007182600049008593000038009084900038009465040052009846500117010366500125011536500129012786500125014076500120015326500120016526500120017726510111018926510111020036510111021148520056022259070015022819940012022969990030023089917722756000116120150312090307.0121103s2007 enkab b 000 0 eng a20077021 24 aGBA7766762bnb7 a0139527222Uk a9781407300702 (pbk.)0http://www.isbnsearch.org/isbn/9781407300702 a1407300709 (pbk.)0http://www.isbnsearch.org/isbn/1407300709 a(OCoLC)1745078420http://www.worldcat.org/oclc/1745078420/resolver/wikidata/oclc/174507842 a(OCoLC)1745078420http://www.worldcat.org/oclc/1745078420/resolver/wikidata/oclc/174507842 aUKMcUKMdDLCdBOS aukblsralccopycat ae-rm---ae-mv---ae-un--- aBOSS00aGN776.2.C83bP32 20071 aPalaguta, Ilia.0http://id.loc.gov/authorities/names/nb20070223040http://viaf.org/viaf/sourceID/LC|nb20070223040/resolver/wikidata/lc/nb200702230410aTripolye culture during the beginning of the middle period (BI) :bthe relative chronology and local grouping of sites /cIlia Palaguta. aOxford :bJohn and Erica Hedges Ltd.,c2007. ax, 182 p. :bill., maps ;c30 cm.0 aBAR international series ;v1666. aIncludes bibliographical references (p. 76-90). 0aCucuteni-Trypillia culture.0http://id.loc.gov/authorities/subjects/sh850346810/resolver/wikidata/lc/sh85034681 0aExcavations (Archaeology)zRomania.0http://id.loc.gov/authorities/subjects/sh850461790/resolver/wikidata/lc/sh85046179 0aExcavations (Archaeology)zMoldova.0http://id.loc.gov/authorities/subjects/sh20091252270/resolver/wikidata/lc/sh2009125227 0aExcavations (Archaeology)zUkraine.0http://id.loc.gov/authorities/subjects/sh850461940/resolver/wikidata/lc/sh85046194 0aPottery, PrehistoriczRomania.0http://id.loc.gov/authorities/subjects/sh851058520/resolver/wikidata/lc/sh85105852 0aPottery, PrehistoriczMoldova.0http://id.loc.gov/authorities/subjects/sh851058520/resolver/wikidata/lc/sh85105852 0aPottery, PrehistoriczUkraine.0http://id.loc.gov/authorities/subjects/sh851058520/resolver/wikidata/lc/sh85105852 0aRomaniaxAntiquities.0http://id.loc.gov/authorities/subjects/sh851149770/resolver/wikidata/lc/sh85114977 0aMoldovaxAntiquities.0http://id.loc.gov/authorities/subjects/sh880041620/resolver/wikidata/lc/sh88004162 0aUkrainexAntiquities.0http://id.loc.gov/authorities/subjects/sh851393340/resolver/wikidata/lc/sh851393340 bMUGcbosshGN776.2.C83iP32 2007822614123780001161 a.b27453662 aC0bBOS amugarb1c071023dmeaf-03206pam 2200337 a 45000010018000000050017000180080039000350100016000740200079000900200078001690350093002470400018003400430012003580490009003700500023003792450106004022600049005083000065005575000079006225040066007015051375007676500115021426510115022576510119023727000149024917100138026408520046027789070008028249940005028329990031028379917721727000116120150312090305.0121103s2004 ilua bc 001 0 eng a20040084 86 a1932476121 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/1932476121 a193247613X (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/193247613X a(OCoLC)549662680http://www.worldcat.org/oclc/549662680/resolver/wikidata/oclc/54966268 aDLCcDLCdYDX aac----- aBOSS00aDS329.4b.S53 200404aThe Silk Road :btrade, travel, war and faith /cedited by Susan Whitfield with Ursula Sims-Williams. aChicago, IL :bSerindia Publications,c2004. a366 p. :bill. (chiefly col.), maps (chiefly col.) ;c30 cm. aCatalog of an exhibition held at the British Library May 7-Sept. 12, 2004. aIncludes bibliographical references (p. [339]-353) and index.0 aThe rise of Sogdian merchants and the role of the Huns : the historical importance of the ancient Sogdian ancient letters / Etienne de la Vaissière -- How much for a camel? : a new understanding of money on the Silk Road before AD 800 / Helen Wang -- Iranians, Indians, Chinese and Tibetans : the rulers and ruled of Khotan in the first millennium / Prods Oktor Skjærvø -- Jade and the Silk Road : trade and tribute in the first millennium / Carol Michaelson -- The Tibetan military system and its activities from Khotan to Lop-Nor / Tsuguhito Takeuchi -- Official life at Dunhuang in the tenth century : the case of Cao Yuanzhong / Rong Xinjiang -- Where chan and tantra meet : Tibetan syncretism in Dunhuang / Sam van Schaik and Jacob Dalton -- Dunhuang characters and the dating of manuscripts / Imre Galambos -- Star charts on the Silk Road : astronomical star maps in ancient China / Jean-Marc Bonnet-Bidaud and Françoise Praderie -- Aurel Stein, the British Museum and the India Office / Frances Wood -- A short history of the conservation of the Dunhuang manuscripts in London / Mark Barnard and Frances Wood -- The catalogue -- Samarkand : trade, travel and faith -- Khotan : a kingdom of remarkable diversity -- Kroraina : settlements in the desert -- Miran : war and faith -- Dunhuang : official and religious life -- Gaochong : death and the aft aArtzCentral AsianvExhibitions.0http://id.loc.gov/authorities/subjects/sh850074610/resolver/wikidata/lc/sh8 aSilk RoadxHistoryvExhibitions.0http://id.loc.gov/authorities/subjects/sh851225540/resolver/wikidata/lc/sh8 aAsia, CentralxHistoryvExhibitions.0http://id.loc.gov/authorities/subjects/sh850086250/resolver/wikidata/lc/sh8 aWhitfield, Susan,d1960-0http://id.loc.gov/authorities/names/no000927050http://viaf.org/viaf/sourceID/LC|no000927050/resolver/wikidata/lc/no0 aBritish Library.0http://id.loc.gov/authorities/names/n811399510http://viaf.org/viaf/sourceID/LC|n811399510/resolver/wikidata/lc/n8 bMUGcbosshDS329.4i.S53 200482261409563 a.b2 aE0bBOS amugarb1c041117d02350cam 22003974a 45000010018000000050017000180080039000350100016000740150019000900160018001090200079001270200085002060200078002910200084003690350093004530350093005460400069006390420008007080430021007160490009007370500026007461000153007722450094009252600058010193000027010775040064011045050140011686500153013086500151014616500109016126510118017218520056018399070015018959940012019109990030019229917722730000116120150312090304.0121103s2005 cau b 001 0 eng a20050149 13 aGBA5629592bnb7 a0132614202Uk a0804750408 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0804750408 a9780804750400 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9780804750400 a0804750416 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0804750416 a9780804750417 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9780804750417 a(OCoLC)605151230http://www.worldcat.org/oclc/605151230/resolver/wikidata/oclc/60515123 a(OCoLC)605151230http://www.worldcat.org/oclc/605151230/resolver/wikidata/oclc/60515123 aDLCcDLCdYDXCPdUKMdBAKERdMBBdPULdCOOdYBMdIG#dBTCTAdMUQ apcc aa-ja---aa-kr--- aBOSS00aPL725.2.K67bW46 20051 aWender, Melissa L.0http://id.loc.gov/authorities/names/n20050381810http://viaf.org/viaf/sourceID/LC|n20050381810/resolver/wikidata/lc/n200503818110aLamentation as history :bnarratives by Koreans in Japan, 1965-2000 /cMelissa L. Wender. aStanford, Calif. :bStanford University Press,c2005. axiii, 252 p. ;c24 cm. aIncludes bibliographical references (p. 233-246) and index.0 aMother Korea -- Uncircumcised ethnicity -- Ikaino the Homeland -- Words that breathe -- Private traumas, public therapies -- Afterword. 0aJapanese literaturexKorean authorsxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20081222490/resolver/wikidata/lc/sh2008122249 0aJapanese literaturey20th centuryxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20081060270/resolver/wikidata/lc/sh2008106027 0aKoreanszJapan.0http://id.loc.gov/authorities/subjects/sh20081063600/resolver/wikidata/lc/sh2008106360 0aJapanxEthnic relations.0http://id.loc.gov/authorities/subjects/sh20081059870/resolver/wikidata/lc/sh20081059870 bMUGcbosshPL725.2.K67iW46 2005822614122940001161 a.b27460009 aC0bBOS amugarb1c071207dmeaf-01973cam 22003374a 45000010018000000050017000180080039000350100016000740200071000900350093001610400023002540420008002770490009002850500023002941000156003172450141004732500012006142600042006263000034006684400055007025040064007575050086008216500151009076500136010587000175011947000156013698520053015259070015015789940012015939990030016059917725076000116120150312090304.0121103s2005 caua b f 001 0 eng a20040153 37 a0787955183 (alk. paper)0http://www.isbnsearch.org/isbn/0787955183 a(OCoLC)558777040http://www.worldcat.org/oclc/558777040/resolver/wikidata/oclc/55877704 aDLCcDLCdYBMdBOS apcc aBOSS00aLB1032b.B318 20051 aBarkley, Elizabeth F.0http://id.loc.gov/authorities/names/n20020696530http://viaf.org/viaf/sourceID/LC|n20020696530/resolver/wikidata/lc/n200206965310aCollaborative learning techniques :ba handbook for college faculty /cElizabeth F. Barkley, K. Patricia Cross, and Claire Howell Major. a1st ed. aSan Francisco :bJossey-Bass,cc2005. axvi, 303 p. :bill. ;c28 cm. 4aThe Jossey-Bass higher and adult education series. aIncludes bibliographical references (p. 285-294) and index.0 aImplementing collaborative learning -- Collaborative learning techniques (CoLTS). 0aTeam learning approach in educationvHandbooks, manuals, etc.0http://id.loc.gov/authorities/subjects/sh851330710/resolver/wikidata/lc/sh85133071 0aCollege teachingvHandbooks, manuals, etc.0http://id.loc.gov/authorities/subjects/sh20091206930/resolver/wikidata/lc/sh20091206931 aCross, K. Patriciaq(Kathryn Patricia),d1926-0http://id.loc.gov/authorities/names/n500170810http://viaf.org/viaf/sourceID/LC|n500170810/resolver/wikidata/lc/n500170811 aMajor, Claire Howell.0http://id.loc.gov/authorities/names/n20041107730http://viaf.org/viaf/sourceID/LC|n20041107730/resolver/wikidata/lc/n20041107730 bMUGcbosshLB1032i.B318 2005822614186720001161 a.b25293746 aE0bBOS amugarb1c050307dmeaf-02435cam 22003974a 45000010018000000050017000180080039000350100016000740150019000900160018001090200065001270200070001920350093002620400050003550420008004050430012004130490009004250500024004342450116004582600037005743000033006115000035006445040054006796500133007336500128008666500131009946500149011256500147012747000149014217100190015707100166017608520054019269070015019809940012019959990030020079917727653000116120150312090303.0121103s2005 caua b 000 0 eng a20040295 57 aGBA5293622bnb7 a0131705572Uk a0833037404 (pbk.)0http://www.isbnsearch.org/isbn/0833037404 a0833036629 (hardcover)0http://www.isbnsearch.org/isbn/0833036629 a(OCoLC)573443000http://www.worldcat.org/oclc/573443000/resolver/wikidata/oclc/57344300 aDLCcDLCdUKMdOCLdPULdBAKERdIXAdCOOdBOS apcc an-us--- aBOSS00aJK468.P75bH54 200500aHigh-performance government :bstructure, leadership, incentives /cedited by Robert Klitgaard & Paul C. Light. aSanta Monica, CA :bRAND,c2005. avi, 490 p. :bill. ;c24 cm. a"Pardee RAND Graduate School." aIncludes bibliographical references (p. 447-486). 0aGovernment productivityzUnited States.0http://id.loc.gov/authorities/subjects/sh20081053680/resolver/wikidata/lc/sh2008105368 0aPolitical planningzUnited States.0http://id.loc.gov/authorities/subjects/sh20081093970/resolver/wikidata/lc/sh2008109397 0aOrganizational changezUnited States.0http://id.loc.gov/authorities/subjects/sh20081087120/resolver/wikidata/lc/sh2008108712 0aAdministrative agencieszUnited StatesxReorganization.0http://id.loc.gov/authorities/subjects/sh20071006030/resolver/wikidata/lc/sh2007100603 0aExecutive departmentszUnited StatesxReorganization.0http://id.loc.gov/authorities/subjects/sh20081029690/resolver/wikidata/lc/sh20081029691 aKlitgaard, Robert E.0http://id.loc.gov/authorities/names/n500423470http://viaf.org/viaf/sourceID/LC|n500423470/resolver/wikidata/lc/n500423471 aUnited States.bNational Commission on the Public Service.0http://id.loc.gov/authorities/names/no890069270http://viaf.org/viaf/sourceID/LC|no890069270/resolver/wikidata/lc/no890069272 aPardee Rand Graduate School.0http://id.loc.gov/authorities/names/no20050005240http://viaf.org/viaf/sourceID/LC|no20050005240/resolver/wikidata/lc/no20050005240 bMUGcbosshJK468.P75iH54 2005822614301330001161 a.b26194880 aC0bBOS amugarb1c060501dmeaf-01235pam 2200265 a 45000010018000000050017000180080039000350100013000740200064000870350093001510400018002440490009002620500021002711000145002922450066004372500012005032600043005153000026005585040064005846500102006486500123007508520051008739070015009249990030009399917716823000116120150312090303.0121103s1998 nyu b 001 0 eng a98021365 a0312215533 (pbk)0http://www.isbnsearch.org/isbn/0312215533 a(OCoLC)389898640http://www.worldcat.org/oclc/389898640/resolver/wikidata/oclc/38989864 aDLCcDLCdBOS aBOSS00aJC311b.K43 19981 aKellas, James G.0http://id.loc.gov/authorities/names/n770063890http://viaf.org/viaf/sourceID/LC|n770063890/resolver/wikidata/lc/n7700638914aThe politics of nationalism and ethnicity /cJames G. Kellas. a2nd ed. aNew York :bSt. Martin's Press,c1998. axii, 246 p. ;c22 cm. aIncludes bibliographical references (p. 227-234) and index. 0aNationalism.0http://id.loc.gov/authorities/subjects/sh850901500/resolver/wikidata/lc/sh85090150 0aEthnicityxPolitical aspects.0http://id.loc.gov/authorities/subjects/sh20081198960/resolver/wikidata/lc/sh20081198960 bMUGcbosshJC311i.K43 1998822613920070001161 a.b22207284 amugarb1c981208dmeaf-02415cam 2200385 a 45000010018000000050017000180080041000350100016000760200064000920200058001560350096002140350096003100400051004060410013004570430012004700490009004820500023004912450059005142600103005733000044006765000208007205000052009285040051009805460024010316500133010556500133011887000144013217100150014657100150016157100154017658520053019199070015019729940012019879990030019999917726067000116120150312090303.0121103s2007 gw a bc 000 0dger d a20074624 35 a97837757198580http://www.isbnsearch.org/isbn/9783775719858 a37757198570http://www.isbnsearch.org/isbn/3775719857 a(OCoLC)1547880790http://www.worldcat.org/oclc/1547880790/resolver/wikidata/oclc/154788079 a(OCoLC)1547880790http://www.worldcat.org/oclc/1547880790/resolver/wikidata/oclc/154788079 aBTCTAcBTCTAdOHXdCAMdBAKERdDLCdYDXCPdBOS0 ageraeng ae-gx--- aBOSS00aN6868.6b.M33 200700aMade in Germany /c[Redaktion/editing, Martin Engler]. aOstfildern :bHatje Cantz ;aNew York :bD.A.P., Distributed Art Publishers [distributor],cc2007. a338 p. :bill. (chiefly col.) ;c28 cm. aPublished in conjunction with an exhibition of the same name held May 25-Aug. 26, 2007 at Kestnergesellschaft, Kunstverein Hannover, Hannover, Germany, and at Sprengel Museum Hannover, Hannover, Germany. a"Herausgeber/editing, Martin Engler"--Colophon. aIncludes bibliographical references and index. aGerman and English. 0aArt, Germany21st centuryvExhibitions.0http://id.loc.gov/authorities/subjects/sh20091156400/resolver/wikidata/lc/sh2009115640 0aArt, Moderny21st centuryvExhibitions.0http://id.loc.gov/authorities/subjects/sh20071013700/resolver/wikidata/lc/sh20071013701 aEngler, Martin.0http://id.loc.gov/authorities/names/n941097140http://viaf.org/viaf/sourceID/LC|n941097140/resolver/wikidata/lc/n941097142 aKestner-Gesellschaft.0http://id.loc.gov/authorities/names/n810480790http://viaf.org/viaf/sourceID/LC|n810480790/resolver/wikidata/lc/n810480792 aKunstverein Hannover.0http://id.loc.gov/authorities/names/n810533870http://viaf.org/viaf/sourceID/LC|n810533870/resolver/wikidata/lc/n810533872 aSprengel Museum Hannover.0http://id.loc.gov/authorities/names/n841261240http://viaf.org/viaf/sourceID/LC|n841261240/resolver/wikidata/lc/n841261240 bMUGcbosshN6868.6i.M33 2007822614210150001161 a.b27456833 aC0bBOS amugarb1c071213dmeaf-02295pam 22003734a 45000010018000000050017000180080039000350100016000740150019000900160018001090200077001270350093002040400028002970420008003250430021003330490009003540500023003631000150003862450047005362600048005833000034006315040066006656000201007316000188009326500150011206500147012706500124014176510135015416510135016768520053018119070015018649940012018799990030018919917725056000116120150312090302.0121103s2004 ctua b 001 0deng a20040075 57 aGBA4451002bnb7 a0129370032Uk a0300090013 (cl. : alk. paper)0http://www.isbnsearch.org/isbn/0300090013 a(OCoLC)548818350http://www.worldcat.org/oclc/548818350/resolver/wikidata/oclc/54881835 aDLCcDLCdYDXdUKMdBOS apcc ae-fr---ae-uk--- aBOSS00aDC202.7b.S45 20041 aSemmel, Stuart.0http://id.loc.gov/authorities/names/n20040258190http://viaf.org/viaf/sourceID/LC|n20040258190/resolver/wikidata/lc/n200402581910aNapoleon and the British /cStuart Semmel. aNew Haven :bYale University Press,cc2004. axii, 354 p. :bill. ;c25 cm. aIncludes bibliographical references (p. [251]-342) and index.00aNapoleonbI,cEmperor of the French,d1769-1821xRelations with British.0http://id.loc.gov/authorities/names/n790549330http://viaf.org/viaf/sourceID/LC|n790549330/resolver/wikidata/lc/n7905493300aNapoleonbI,cEmperor of the French,d1769-1821xInfluence.0http://id.loc.gov/authorities/names/n790549330http://viaf.org/viaf/sourceID/LC|n790549330/resolver/wikidata/lc/n79054933 0aNapoleonic Wars, 1800-1815xForeign public opinion, British.0http://id.loc.gov/authorities/subjects/sh850897670/resolver/wikidata/lc/sh85089767 0aPublic opinionzGreat BritainxHistoryy19th century.0http://id.loc.gov/authorities/subjects/sh20081096930/resolver/wikidata/lc/sh2008109693 0aNational characteristics, British.0http://id.loc.gov/authorities/subjects/sh850899600/resolver/wikidata/lc/sh85089960 0aGreat BritainxForeign relationszFrance.0http://id.loc.gov/authorities/subjects/sh20071002530/resolver/wikidata/lc/sh2007100253 0aFrancexForeign relationszGreat Britain.0http://id.loc.gov/authorities/subjects/sh20081150830/resolver/wikidata/lc/sh20081150830 bMUGcbosshDC202.7i.S45 2004822614185960001161 a.b25294192 aE0bBOS amugarb1c041202dmeaf-01757cam 2200337 a 45000010018000000050017000180080039000350100016000740190013000900200071001030200065001740350183002390350093004220400044005150410013005590420008005720490009005800500027005891000154006162400026007702450095007962500012008912600056009033000021009597000162009807000163011428520057013059070015013629940012013779990030013899917722178000116120150312090259.0121103s2005 ja 000 1 eng a20050445 37 a79457333 a9784770029935 (hbk.)0http://www.isbnsearch.org/isbn/9784770029935 a4770029934 (hbk.)0http://www.isbnsearch.org/isbn/4770029934 a(OCoLC)61362831z(OCoLC)794573330http://www.worldcat.org/oclc/613628310/resolver/wikidata/oclc/613628310http://www.worldcat.org/oclc/794573330/resolver/wikidata/oclc/79457333 a(OCoLC)613628310http://www.worldcat.org/oclc/613628310/resolver/wikidata/oclc/61362831 aDLCcDLCdBAKERdC#PdBTCTAdYDXCPdVP@1 aenghjpn apcc aBOSS00aPL856.I856bK8713 20051 aMiyabe, Miyuki,d1960-0http://id.loc.gov/authorities/names/nr920298640http://viaf.org/viaf/sourceID/LC|nr920298640/resolver/wikidata/lc/nr9202986410aKurosufaia.lEnglish.10aCrossfire /cMiyuki Miyabe ; translated by Deborah Stuhr Iwabuchi and Anna Husson Isozaki. a1st ed. aTokyo :aNew York :bKodansha International,c2005. a404 p. ;c23 cm.1 aIwabuchi, Deborah Stuhr.0http://id.loc.gov/authorities/names/no20040645070http://viaf.org/viaf/sourceID/LC|no20040645070/resolver/wikidata/lc/no20040645071 aIsozaki, Anna Husson,d1968-0http://id.loc.gov/authorities/names/n20050628690http://viaf.org/viaf/sourceID/LC|n20050628690/resolver/wikidata/lc/n20050628690 bMUGcbosshPL856.I856iK8713 2005822614144930001161 a.b27460022 aC0bBOS amugarb1c071120dmeaf-02513cam 22003734a 45000010018000000050017000180080039000350100016000740200085000900200079001750350096002540350096003500400044004460430012004900490009005020500024005111000151005352450073006862600043007593000033008025040063008355050320008986100160012186500140013786500137015186500140016556500125017956510053019206510055019738520054020289070015020829940012020979990030021099917721675000116120150312090258.0121103s2007 mdua b 001 0 eng a20070179 16 a9780739121689 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9780739121689 a0739121685 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0739121685 a(OCoLC)1245381470http://www.worldcat.org/oclc/1245381470/resolver/wikidata/oclc/124538147 a(OCoLC)1245381470http://www.worldcat.org/oclc/1245381470/resolver/wikidata/oclc/124538147 aDLCcDLCdBAKERdBTCTAdC#PdYDXCPdBOS an-us-wi aBOSS00aHN80.N686bM55 20071 aMiller, Carol D.0http://id.loc.gov/authorities/names/n20070308670http://viaf.org/viaf/sourceID/LC|n20070308670/resolver/wikidata/lc/n200703086710aNiagara falling :bglobalization in a small town /cCarol D. Miller. aLanham, MD :bLexington Books,cc2007. aix, 111 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 97-103) and index.0 aIntroduction and overview -- End of the social compact : corporate acquisitions and globalization -- Fear and loathing in a paper mill town -- Too many cops -- Backing away -- Bowling alley for sale -- Dead bugs and other environmental issues -- Where everybody knows your name -- Conclusion: Lessons from the fall.20aStora Enso North America.0http://id.loc.gov/authorities/names/n20070308700http://viaf.org/viaf/sourceID/LC|n20070308700/resolver/wikidata/lc/n2007030870 0aBusiness enterprises, ForeignzWisconsinzNiagara.0http://id.loc.gov/authorities/subjects/sh850182930/resolver/wikidata/lc/sh85018293 0aIndustriesxSocial aspectszWisconsinzNiagara.0http://id.loc.gov/authorities/subjects/sh850659600/resolver/wikidata/lc/sh85065960 0aGlobalizationxSocial aspectszWisconsinzNiagara.0http://id.loc.gov/authorities/subjects/sh990101790/resolver/wikidata/lc/sh99010179 0aCommunity lifezWisconsinzNiagara.0http://id.loc.gov/authorities/subjects/sh850292430/resolver/wikidata/lc/sh85029243 0aNiagara (Wis.)xSocial conditionsy21st century. 0aNiagara (Wis.)xEconomic conditionsy21st century.0 bMUGcbosshHN80.N686iM55 2007822614093930001161 a.b27455920 aC0bBOS amugarb1c071022dmeaf-01752cam 22003374a 45000010018000000050017000180080039000350100016000740160019000900200064001090200058001730350093002310350093003240400056004170420008004730490009004810500024004901000147005142450135006612600038007963000024008344400031008585040066008896500099009556500113010546500136011678520054013039070015013579940012013729990030013849917722636000116120150312090256.0121103s2003 ne b 001 0 eng a20030502 15 aB03090882bccb a97890041236010http://www.isbnsearch.org/isbn/9789004123601 a90041236010http://www.isbnsearch.org/isbn/9004123601 a(OCoLC)520797040http://www.worldcat.org/oclc/520797040/resolver/wikidata/oclc/52079704 a(OCoLC)520797040http://www.worldcat.org/oclc/520797040/resolver/wikidata/oclc/52079704 aDLCcDLCdC#PdOHXdEL$dBAKERdNLGGCdBTCTAdYDXCP apcc aBOSS00aBF538.C48bS25 20031 aSantangelo, Paolo.0http://id.loc.gov/authorities/names/n790602600http://viaf.org/viaf/sourceID/LC|n790602600/resolver/wikidata/lc/n7906026010aSentimental education in Chinese history :ban interdisciplinary textual research on Ming and Qing sources /cby Paolo Santangelo. aLeiden ;aBoston :bBrill,c2003. ax, 606 p. ;c25 cm. 0aSinica Leidensia ;vv. 60. aIncludes bibliographical references (p. [468]-533) and index. 0aEmotions.0http://id.loc.gov/authorities/subjects/sh850428180/resolver/wikidata/lc/sh85042818 0aEmotions in literature.0http://id.loc.gov/authorities/subjects/sh850428260/resolver/wikidata/lc/sh85042826 0aChinese literaturexHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20081005430/resolver/wikidata/lc/sh20081005430 bMUGcbosshBF538.C48iS25 2003822614120110001161 a.b27460861 aC0bBOS amugarb1c071031dmeaf-01971cam 22003254a 45000010018000000050017000180080039000350100016000740200079000900200065001690350093002340400028003270420008003550430012003630490009003750500022003841000147004062450082005532600048006353000024006835040064007075050290007716500139010616500170012006500166013708520052015369070015015889940012016039990030016159917723128000116120150312090256.0121103s2004 nyu b 001 0 eng a20040537 25 a0807744921 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0807744921 a0807744913 (pbk.)0http://www.isbnsearch.org/isbn/0807744913 a(OCoLC)559903460http://www.worldcat.org/oclc/559903460/resolver/wikidata/oclc/55990346 aDLCcDLCdIBSdSYBdBOS apcc an-us--- aBOSS00aLC1201b.K84 20041 aKugelmass, Judy W.0http://id.loc.gov/authorities/names/n852572370http://viaf.org/viaf/sourceID/LC|n852572370/resolver/wikidata/lc/n8525723714aThe inclusive school :bsustaining equity and standards /cJudy W. Kugelmass. aNew York :bTeachers College Press,cc2004. ax, 148 p. ;c24 cm. aIncludes bibliographical references (p. 133-140) and index.00tEducational reform and the creation of a culture of inclusion --tA culture of inclusion --tYears of chaos --tFrom chaos to collaborative leadership --tDeepening cultural commitments --tSustaining change : an oxymoron --tImplications for creating and sustaining inclusive schools. 0aInclusive educationzUnited StatesvCase studies.0http://id.loc.gov/authorities/subjects/sh960098250/resolver/wikidata/lc/sh96009825 0aChildren with disabilitiesxEducation (Elementary)zUnited StatesvCase studies.0http://id.loc.gov/authorities/subjects/sh850586890/resolver/wikidata/lc/sh85058689 0aChildren of minoritiesxEducation (Elementary)zUnited StatesvCase studies.0http://id.loc.gov/authorities/subjects/sh850235630/resolver/wikidata/lc/sh850235630 bMUGcbosshLC1201i.K84 2004822614188350001161 a.b25301561 aE0bBOS amugarb1c050401dmeaf-01363cam 2200277 a 45000010018000000050017000180080041000350200058000760350093001340370018002270400035002450420008002800430012002880490009003000500021003091000146003302450082004762600015005583000043005735040041006166500133006576500108007906500116008988520040010149990031010549917720398000116120150312090256.0121103s2004 fr a b 000 0 fre c a28641041210http://www.isbnsearch.org/isbn/2864104121 a(OCoLC)565311790http://www.worldcat.org/oclc/565311790/resolver/wikidata/oclc/56531179 a9782864104124 aUBYcUBYdSTFdTZTdAUXAMdBOS apcc ae-fr--- aBOSS 4aPQ151b.A33 20041 aAccarie, Maurice.0http://id.loc.gov/authorities/names/n800373720http://viaf.org/viaf/sourceID/LC|n800373720/resolver/wikidata/lc/n8003737210aThéâtre, littérature et société au Moyen Âge /cMauri aNice :bSe c2004. a480 p. :b1 ill.,1 col. port c25 cm. aIncludes bibliographical  aFrench literatureyTo 1500xHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20081041330/resolver/wikidata/lc/s aTheaterzFrancexHistory.0http://id.loc.gov/authorities/subjects/sh20081128440/resolver/wikidata/lc/s aTheaterxHistoryyMedieval, 500-1500.0http://id.loc.gov/authorities/subjects/sh851345330/resolver/wikidata/lc bMUGcbosshPQ151i.A33 20048226140 aC0bBOS amugarb1c050602343pam 2200349 a 45000010018000000050017000180080039000350100013000740200071000870350093001580400018002510430012002690490009002810500022002901000154003122450131004662600061005973000033006584400087006915040064007786500127008426500136009696500124011056500149012296500131013786500133015096500132016426510122017748520052018969070015019489990030019639917722620000116120150312090256.0121103s1995 njua b s001 0 eng a94046688 a0813522080 (alk. paper)0http://www.isbnsearch.org/isbn/0813522080 a(OCoLC)317546430http://www.worldcat.org/oclc/317546430/resolver/wikidata/oclc/31754643 aDLCcDLCdBOS an-us--- aBOSS00aHQ1904b.M56 19951 aMinkoff, Debra C.,d1961-0http://id.loc.gov/authorities/names/n941164230http://viaf.org/viaf/sourceID/LC|n941164230/resolver/wikidata/lc/n9411642310aOrganizing for equality :bthe evolution of women's and racial-ethnic organizations in America, 1955-1985 /cDebra C. Minkoff. aNew Brunswick, N.J. :bRutgers University Press,cc1995. axv, 176 p. :bill. ;c24 cm. 4aThe Arnold and Caroline Rose book series of the American Sociological Association. aIncludes bibliographical references (p. 159-168) and index. 0aWomenzUnited StatesxSocieties, etc.0http://id.loc.gov/authorities/subjects/sh851472740/resolver/wikidata/lc/sh85147274 0aMinority womenzUnited StatesxSocieties, etc.0http://id.loc.gov/authorities/subjects/sh850858630/resolver/wikidata/lc/sh85085863 0aAfrican AmericansxSocieties, etc.0http://id.loc.gov/authorities/subjects/sh850019890/resolver/wikidata/lc/sh85001989 0aSocial movementszUnited StatesxHistoryy20th century.0http://id.loc.gov/authorities/subjects/sh20101134870/resolver/wikidata/lc/sh2010113487 0aOrganizational changezUnited States.0http://id.loc.gov/authorities/subjects/sh20081087120/resolver/wikidata/lc/sh2008108712 0aOrganizational behaviorzUnited States.0http://id.loc.gov/authorities/subjects/sh20101045610/resolver/wikidata/lc/sh2010104561 0aCivil rights movementszUnited States.0http://id.loc.gov/authorities/subjects/sh20060084120/resolver/wikidata/lc/sh2006008412 0aUnited StatesxEthnic relations.0http://id.loc.gov/authorities/subjects/sh851400430/resolver/wikidata/lc/sh851400430 bMUGcbosshHQ1904i.M56 1995822614119510001161 a.b20861564 amugarb1c951023dmeaf-02552cam 2200385 a 45000010018000000050017000180080039000350100016000740190014000900200085001040200079001890350189002680350096004570400044005530430012005970490009006090500023006181000147006412450128007882600055009163000027009714400046009985040064010446500139011086500139012476500146013866500130015326510120016626510122017826510152019048520053020569070015021099940012021249990030021369917722136000116120150312090255.0121103s2007 miu b 001 0 eng a20070193 55 a148893700 a9780472116096 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9780472116096 a0472116096 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0472116096 a(OCoLC)132582276z(OCoLC)1488937000http://www.worldcat.org/oclc/1325822760/resolver/wikidata/oclc/1325822760http://www.worldcat.org/oclc/1488937000/resolver/wikidata/oclc/148893700 a(OCoLC)1325822760http://www.worldcat.org/oclc/1325822760/resolver/wikidata/oclc/132582276 aDLCcDLCdBAKERdBTCTAdYDXCPdC#PdBOS an-us--- aBOSS00aE184.A1bF473 20071 aFernandez, Ronald.0http://id.loc.gov/authorities/names/n500266220http://viaf.org/viaf/sourceID/LC|n500266220/resolver/wikidata/lc/n5002662210aAmerica beyond black and white :bhow immigrants and fusions are helping us overcome the racial divide /cRonald Fernandez. aAnn Arbor :bUniversity of Michigan Press,cc2007. aviii, 285 p. ;c24 cm. 0aContemporary political and social issues. aIncludes bibliographical references (p. 274-276) and index. 0aImmigrantszUnited StatesxSocial conditions.0http://id.loc.gov/authorities/subjects/sh20081042960/resolver/wikidata/lc/sh2008104296 0aMinoritieszUnited StatesxSocial conditions.0http://id.loc.gov/authorities/subjects/sh20081073870/resolver/wikidata/lc/sh2008107387 0aRacially-mixed peoplezUnited StatesxSocial conditions.0http://id.loc.gov/authorities/subjects/sh910054030/resolver/wikidata/lc/sh91005403 0aAssimilation (Sociology)zUnited States.0http://id.loc.gov/authorities/subjects/sh850087930/resolver/wikidata/lc/sh85008793 0aUnited StatesxRace relations.0http://id.loc.gov/authorities/subjects/sh851404940/resolver/wikidata/lc/sh85140494 0aUnited StatesxEthnic relations.0http://id.loc.gov/authorities/subjects/sh851400430/resolver/wikidata/lc/sh85140043 0aUnited StatesxEmigration and immigrationxSocial aspects.0http://id.loc.gov/authorities/subjects/sh20071000750/resolver/wikidata/lc/sh20071000750 bMUGcbosshE184.A1iF473 2007822614143550001161 a.b2746149x aC0bBOS amugarb1c071023dmeaf-01444nam 2200289 a 45000010018000000050017000180080041000350100016000760200058000920350093001500400018002430430012002610490009002730900026002821000171003082450083004792600061005623000033006235040054006566500108007106500111008186500112009298520056010419070015010979940012011129990030011249917724911000116120150312090252.0121103s2002 tz a b 000 0 eng d a20034055 98 a99766034360http://www.isbnsearch.org/isbn/9976603436 a(OCoLC)527793760http://www.worldcat.org/oclc/527793760/resolver/wikidata/oclc/52779376 aINUcINUdDLC af-tz--- aBOSS aHD7373.9.A3bM34 20021 aMahanga, Milton Makongoro,d1955-0http://id.loc.gov/authorities/names/no20030776310http://viaf.org/viaf/sourceID/LC|no20030776310/resolver/wikidata/lc/no200307763110aUrban housing and poverty alleviation in Tanzania /cMilton Makongoro Mahanga. aDar Es Salaam :bDar Es Salaam University Press,cc2002. axv, 245 p. :bill. ;c21 cm. aIncludes bibliographical references (p. 219-234). 0aHousingzTanzania.0http://id.loc.gov/authorities/subjects/sh850626030/resolver/wikidata/lc/sh85062603 0aUrban poorzTanzania.0http://id.loc.gov/authorities/subjects/sh851413230/resolver/wikidata/lc/sh85141323 0aPovertyzTanzania.0http://id.loc.gov/authorities/subjects/sh20101079320/resolver/wikidata/lc/sh20101079320 bMUGcbosshHD7373.9.A3iM34 2002822614180620001161 a.b25307204 aC0bBOS amugarb1c050617dmeaf-01612pam 22003254a 45000010018000000050017000180080039000350100016000740150015000900200078001050350093001830400023002760410013002990420008003120490009003200500023003291000152003522450084005042600056005883000026006444400042006705040051007126500151007636500113009147000149010278520053011769070015012299940012012449990030012569917723055000116120150312090252.0121103s2004 mau b 001 0 eng a20040186 36 aGBA4-Y0697 a067401393X (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/067401393X a(OCoLC)563559200http://www.worldcat.org/oclc/563559200/resolver/wikidata/oclc/56355920 aDLCcDLCdUKMdC#P1 aenghchi apcc aBOSS00aPL2278b.I344 20041 aIdema, W. L.q(Wilt L.)0http://id.loc.gov/authorities/names/n821266840http://viaf.org/viaf/sourceID/LC|n821266840/resolver/wikidata/lc/n8212668414aThe red brush :bwriting women of imperial China /cWilt Idema and Beata Grant. aCambridge :bHarvard University Asia Center,c2004. axvi, 931 p. ;c26 cm. 0aHarvard East Asian monographs ;v231. aIncludes bibliographical references and index. 0aChinese literaturexWomen authorsxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20081005890/resolver/wikidata/lc/sh2008100589 0aWomen authors, Chinese.0http://id.loc.gov/authorities/subjects/sh851474650/resolver/wikidata/lc/sh851474651 aGrant, Beata,d1954-0http://id.loc.gov/authorities/names/n940226600http://viaf.org/viaf/sourceID/LC|n940226600/resolver/wikidata/lc/n940226600 bMUGcbosshPL2278i.I344 2004822614114230001161 a.b25297089 aE0bBOS amugarb1c050104dmeaf-01440pam 2200277 a 45000010018000000050017000180080039000350100013000740200084000870200084001710350093002550400018003480430012003660490009003780500026003872450090004132600056005033000027005595040051005866500133006377000141007707000150009118520056010619070015011179990030011329917719568000116120150312090252.0121103s1995 flu b s001 0 eng a95005917 a0813013720 (cloth : acid-free paper)0http://www.isbnsearch.org/isbn/0813013720 a0813013739 (paper : acid-free paper)0http://www.isbnsearch.org/isbn/0813013739 a(OCoLC)320873730http://www.worldcat.org/oclc/320873730/resolver/wikidata/oclc/32087373 aDLCcDLCdBOS an-us--- aBOSS00aE185.615b.B5538 199500aBlacks and the American political system /cedited by Huey L. Perry and Wayne Parent. aGainesville :bUniversity Press of Florida,cc1995. axvii, 293 p. ;c24 cm. aIncludes bibliographical references and index. 0aAfrican AmericansxPolitics and government.0http://id.loc.gov/authorities/subjects/sh950105930/resolver/wikidata/lc/sh950105931 aPerry, Huey.0http://id.loc.gov/authorities/names/n811347260http://viaf.org/viaf/sourceID/LC|n811347260/resolver/wikidata/lc/n811347261 aParent, Wayne,d1955-0http://id.loc.gov/authorities/names/n841213350http://viaf.org/viaf/sourceID/LC|n841213350/resolver/wikidata/lc/n841213350 bMUGcbosshE185.615i.B5538 1995822614034970001161 a.b20861035 amugarb1c951017dmeaf-02267pam 2200361 a 45000010018000000050017000180080039000350100016000740200079000900200078001690350093002470400013003400420008003530430012003610490009003730500024003821000144004062450137005502600044006873000039007315040066007706000177008366100215010136500110012286500142013386500094014806510110015746510130016848520047018149070008018619940005018699990031018749917724335000116120150312090251.0121103s2004 ncuab bi 001 0deng a20030134 52 a0822332108 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0822332108 a0822332493 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0822332493 a(OCoLC)524293580http://www.worldcat.org/oclc/524293580/resolver/wikidata/oclc/52429358 aDLCcDLC apcc as-bl--- aBOSS00aF2537.R66bD53 20041 aDiacon, Todd A.0http://id.loc.gov/authorities/names/n910202250http://viaf.org/viaf/sourceID/LC|n910202250/resolver/wikidata/lc/n9102022510aStringing together a nation :bCandido Mariano da Silva Rondon and the construction of a modern Brazil, 1906-1930 /cTodd A. Diacon. aDurham :bDuke University Press,c2004. axi, 228 p. :bill., maps ;c23 cm. aIncludes bibliographical references (p. [207]-223) and index.10aRondon, Cândido Mariano da Silva,d1865-1958.0http://id.loc.gov/authorities/names/n500758640http://viaf.org/viaf/sourceID/LC|n500758640/resolver/wikidata/lc/n5007586 aBrazil.bComissão de Linhas Telegráficas Estratégicas de Mato Grosso ao Amazonas.0http://id.loc.gov/authorities/names/n810598480http://viaf.org/viaf/sourceID/LC|n810598480/resolver/wikidata/lc/n8 aTelegraphzBrazilxHistory.0http://id.loc.gov/authorities/subjects/sh851333150/resolver/wikidata/lc/sh8 aIndians of South AmericazBrazilxGovernment relations.0http://id.loc.gov/authorities/subjects/sh20081044030/resolver/wikidata/lc/sh200 aPositivism.0http://id.loc.gov/authorities/subjects/sh851053870/resolver/wikidata/lc/sh8 aBrazilxHistoryy1889-1930.0http://id.loc.gov/authorities/subjects/sh850165650/resolver/wikidata/lc/sh8 aAmazon River ValleyxDiscovery and exploration.0http://id.loc.gov/authorities/subjects/sh850041370/resolver/wikidata/lc/sh8 bMUGcbosshF2537.R66iD53 200482261419981 a.b2 aE0bBOS amugarb1c041115d02397cam 2200349 a 45000010018000000050017000180080039000350100016000740200084000900200078001740350096002520350096003480400049004440420009004930430012005020490009005140500024005231000143005472450072006902500012007622600061007743000034008355040051008695050437009205200343013576500112017006500124018128520054019369070015019909940012020059990030020179917723808000116120150312090251.0121103s2007 dcua b 001 0 eng a20070277 58 a9780815777359 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9780815777359 a0815777353 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0815777353 a(OCoLC)1535986540http://www.worldcat.org/oclc/1535986540/resolver/wikidata/oclc/153598654 a(OCoLC)1535986540http://www.worldcat.org/oclc/1535986540/resolver/wikidata/oclc/153598654 aDLCcDLCdBTCTAdBAKERdDBIdYDXCPdC#PdBOS alcac an-us--- aBOSS00aHJ2051b.S3424 20071 aSchick, Allen.0http://id.loc.gov/authorities/names/n500160790http://viaf.org/viaf/sourceID/LC|n500160790/resolver/wikidata/lc/n5001607914aThe federal budget :bpolitics, policy, process /cby Allen Schick. a3rd ed. aWashington, D.C. :bBrookings Institution Press,cc2007. axii, 345 p. :bill. ;c24 cm. aIncludes bibliographical references and index.0 aConflict and resolution in federal budgeting -- The evolution of federal budgeting -- The budget's shifting boundaries -- The political rules and arithmetic of budgeting -- The president's budget -- The congressional budget process -- Revenue legislation -- Authorizing legislation -- The appropriations process -- Managing federal expenditures -- Budgeting for the long term -- Federal budget-related websites -- Glossary -- Index. a"Updates and expands the assessment of the long-term budgetary outlook, addressing such issues as the collapse of the congressional budgetary process and the threat posed by the termination of discretionary spending caps. Concludes with a look at how the nation's deficit will affect America now and in the future"--Provided by publisher. 0aBudgetzUnited States.0http://id.loc.gov/authorities/subjects/sh850176040/resolver/wikidata/lc/sh85017604 0aBudget processzUnited States.0http://id.loc.gov/authorities/subjects/sh20091177610/resolver/wikidata/lc/sh20091177610 bMUGcbosshHJ2051i.S3424 2007822614152280001161 a.b27461749 aC0bBOS amugarb1c071019dmeaf-01534cam 2200349 a 45000010018000000050017000180080039000350100016000740350093000900400013001830410013001960420010002090430012002190490009002310500023002401110091002632450096003542460072004502600093005223000033006155000112006485000026007605040041007865460035008276510040008626510026009027000146009288520053010749070015011279940012011429990030011549917720346000116120150312090250.0121103s2002 et ab b f100 0 eng a20034086 20 a(OCoLC)550195120http://www.worldcat.org/oclc/550195120/resolver/wikidata/oclc/55019512 aDLCcDLC0 aengaamh alcode af-et--- aBOSS00aDT379.5b.I58 20022 aInternational Conference of Ethiopian Studiesn(14th :d2000 :cAddis Ababa, Ethiopia)10aEthiopian studies at the end of the second millennium /cedited by Baye Yimam ... [et al.].17aProceedings :bXIVth International Conference of Ethiopian Studies. aAddis Ababa, Ethiopia :bInstitute of Ethiopian Studies, Addis Ababa University,cc2002. a3 v. :bill., maps ;c27 cm. a"Proceedings of the XIVth International Conference of Ethiopian Studies, November 6-11, 2000, Addis Ababa." a"(In three volumes)." aIncludes bibliographical references. aIn English, with some Amharic. 0aEthiopiaxCivilizationvCongresses. 0aEthiopiavCongresses.0 aBaye Yimam.0http://id.loc.gov/authorities/names/n20030636610http://viaf.org/viaf/sourceID/LC|n20030636610/resolver/wikidata/lc/n20030636610 bMUGcbosshDT379.5i.I58 2002822614075750001161 a.b2529331x aE0bBOS amugarb1c041206dmeaf-01475cam 22002774a 45000010018000000050017000180080039000350100016000740200077000900200071001670350096002380350096003340400049004300490009004790500022004881000158005102450161006682600050008293000036008795040066009156500107009818520052010889070015011409940012011559990030011679917721603000116120150312090250.0121103s2007 ctua b 001 0 eng a20070227 68 a9780275997205 (alk. paper)0http://www.isbnsearch.org/isbn/9780275997205 a0275997200 (alk. paper)0http://www.isbnsearch.org/isbn/0275997200 a(OCoLC)1451452080http://www.worldcat.org/oclc/1451452080/resolver/wikidata/oclc/145145208 a(OCoLC)1451452080http://www.worldcat.org/oclc/1451452080/resolver/wikidata/oclc/145145208 aDLCcDLCdBAKERdYDXCPdBTCTAdC#PdBWXdBOS aBOSS00aHV6626b.B77 20071 aBrowne Miller, Angela,d1952-0http://id.loc.gov/authorities/names/n882289180http://viaf.org/viaf/sourceID/LC|n882289180/resolver/wikidata/lc/n8822891810aTo have and to hurt :brecognizing and changing, or escaping, patterns of abuse in intimate relationships /cAngela Browne-Miller ; foreword by Arun Gandhi. aWestport, Conn. :bPraeger Publishers,c2007. axviii, 236 p. :bill. ;c25 cm. aIncludes bibliographical references (p. [227]-230) and index. 0aMarital violence.0http://id.loc.gov/authorities/subjects/sh850311390/resolver/wikidata/lc/sh850311390 bMUGcbosshHV6626i.B77 2007822614091660001161 a.b27456195 aC0bBOS amugarb1c071023dmeaf-01362nam 22002658a 45000010018000000050017000180080039000350100013000740200078000870200071001650350093002360400018003290490009003470500024003561000146003802450101005262600052006273000026006795040051007056500118007566500123008748520054009979070015010519990030010669917719545000116120150312090249.0121103s1995 cau b 001 0 eng a95007702 a0803955952 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0803955952 a0803955944 (alk. paper)0http://www.isbnsearch.org/isbn/0803955944 a(OCoLC)321996190http://www.worldcat.org/oclc/321996190/resolver/wikidata/oclc/32199619 aDLCcDLCdBOS aBOSS00aHV6626.5b.T48 19951 aThompson, Ross A.0http://id.loc.gov/authorities/names/n891385260http://viaf.org/viaf/sourceID/LC|n891385260/resolver/wikidata/lc/n8913852610aPreventing child maltreatment through social support :ba critical analysis /cRoss A. Thompson. aThousand Oaks, CA :bSage Publications,cc1995. axvi, 224 p. ;c24 cm. aIncludes bibliographical references and index. 0aChild abusexPrevention.0http://id.loc.gov/authorities/subjects/sh20070071970/resolver/wikidata/lc/sh2007007197 0aAbusive parentsxSocial networks.0http://id.loc.gov/authorities/subjects/sh870007800/resolver/wikidata/lc/sh870007800 bMUGcbosshHV6626.5i.T48 1995822614034340001161 a.b20861618 amugarb1c951002dmeaf-03379cam 22003378a 45000010018000000050017000180080039000350100016000740200064000900200058001540350096002120350096003080400023004040490009004270500019004362450083004552600046005382630010005843000025005944400044006195040051006635051725007146500101024396500101025407000145026417000149027868520049029359070015029849940012029999990030030119917722526000116120150312090249.0121103s2007 mau b 001 0 eng a20070356 95 a97814051802070http://www.isbnsearch.org/isbn/9781405180207 a140518020X0http://www.isbnsearch.org/isbn/140518020X a(OCoLC)1675157320http://www.worldcat.org/oclc/1675157320/resolver/wikidata/oclc/167515732 a(OCoLC)1675157320http://www.worldcat.org/oclc/1675157320/resolver/wikidata/oclc/167515732 aDLCcDLCdRMCdBOS aBOSS00aB53b.P45 200700aPhilosophy and the empirical /ceditors, Peter A. French, Howard K. Wettstein. aMalden, MA :bBlackwell Pub. Inc.,c2007. a0709. avi, 371 p. ;c23 cm.00aMidwest studies in philosophy ;vv. 31. aIncludes bibliographical references and index.0 aThe use of empirical evidence to assess and critique judicial decisions / Carl F. Cranor -- From My Lai to Abu Ghraib : the moral psychology of atrocity / John M. Doris and Dominic Murphy -- Render unto philosophy that which is philosophy's / Richard Fumerton -- Philosophical thought experiments, intuitions, and cognitive equilibrium / Tamar Szabo Gendler -- Reason explanation in folk psychology / Joshua Knobe -- The folk probably don't think what you think they think : experiments on causation by absence / Jonathan Livengood and Edouard Machery -- The epistemology of thought experiments : first person versus third person approaches / Kirk Ludwig -- Arguments from reference and the worry about dependence / Ron Mallon -- Intentional action, folk judgments, and stories : sorting things out / Alfred R. Mele and Fiery Cushman -- Folk intuitions, slippery slopes, and necessary fictions : an essay on Saul Smilansky's free will illusionism / Thomas Nadelhoffer and Adam Feltz -- Free will, moral responsibility, and mechanism : experiments on folk intuitions / Eddy Nahmias, D. Justin Coates, and Trevor Kvaran -- Do we have a coherent set of intuitions about moral responsibility? / Dana K. Nelkin -- The rise of compatibilism : a case study in the quantitative history of philosophy / Shaun Nichols -- Can moral obligations be empirically discovered? / Jesse J. Prinz -- Pragmatic abilities in autism spectrum disorder : a case study in philosophy and the empirical / Jessica De Villiers, Robert J. Stainton, and Peter Szatmari -- How to challenge intuitions empirically without risking skepticism / Jonathan M. Weinberg -- The cosmic ensemble : reflections on the nature-mathematics symbiosis / Joseph Almog. 0aPhilosophy.0http://id.loc.gov/authorities/subjects/sh851008490/resolver/wikidata/lc/sh85100849 0aEmpiricism.0http://id.loc.gov/authorities/subjects/sh850428510/resolver/wikidata/lc/sh850428511 aFrench, Peter A.0http://id.loc.gov/authorities/names/n790231780http://viaf.org/viaf/sourceID/LC|n790231780/resolver/wikidata/lc/n790231781 aWettstein, Howard K.0http://id.loc.gov/authorities/names/n790231800http://viaf.org/viaf/sourceID/LC|n790231800/resolver/wikidata/lc/n790231800 bMUGcbosshB53i.P45 2007822614136260001161 a.b27454605 aC0bBOS amugarb1c071017dmeaf-02204nam 2200373 a 45000010018000000050017000180080039000350100016000740150019000900160018001090200065001270350093001920400028002850420014003130430012003270490009003390500024003481110223003722450206005952600035008013000035008364400038008715000090009095040041009996500148010406510037011887000161012257000167013867000166015538520054017199070015017739940012017889990030018009917720320000116120150312090248.0121103s2004 enkab b 100 0 eng a20044849 16 aGBA4853352bnb7 a0130364322Uk a1841716359 (pbk.)0http://www.isbnsearch.org/isbn/1841716359 a(OCoLC)571687780http://www.worldcat.org/oclc/571687780/resolver/wikidata/oclc/57168778 aUKMbengcUKMdDLCdBOS alccopycat ae-gr--- aBOSS00aGT3271.G8bL58 20042 aLiverpool Interdisciplinary Symposium in Antiquityd(2002 :cUniversity of Liverpool)0http://id.loc.gov/authorities/names/no20050173720http://viaf.org/viaf/sourceID/LC|no20050173720/resolver/wikidata/lc/no200501737210aCult and death :bproceedings of the Third Annual Meeting of Postgraduate Researchers, the University of Liverpool, May 2002 /cedited by Danai-Christina Naoum, Georgina Muskett, Mercourios Georgiadis. aOxford :bArchaeopress,c2004. a86 p. :bill., 1 map ;c30 cm. 0aBAR international series ;v1282. aAt head of title page: LISA 2002, Liverpool Interdisciplinary Symposium in Antiquity. aIncludes bibliographical references. 0aFuneral rites and ceremonies, AncientzGreecevCongresses.0http://id.loc.gov/authorities/subjects/sh850523840/resolver/wikidata/lc/sh85052384 0aGreecexAntiquitiesvCongresses.1 aNaoum, Danai-Christina.0http://id.loc.gov/authorities/names/nb20043089550http://viaf.org/viaf/sourceID/LC|nb20043089550/resolver/wikidata/lc/nb20043089551 aMuskett, G. M.q(Georgina M.)0http://id.loc.gov/authorities/names/nb20020576090http://viaf.org/viaf/sourceID/LC|nb20020576090/resolver/wikidata/lc/nb20020576091 aGeorgiadis, M.q(Mercourios)0http://id.loc.gov/authorities/names/nb20020576070http://viaf.org/viaf/sourceID/LC|nb20020576070/resolver/wikidata/lc/nb20020576070 bMUGcbosshGT3271.G8iL58 2004822614074870001161 a.b25292547 aC0bBOS amugarb1c050725dmeaf-02578cam 22004094a 45000010018000000050017000180070015000350080039000500100016000890200084001050200078001890350096002670350096003630400052004590430012005110490015005230500022005381000152005602450098007122600043008103000034008535040054008876100168009416100175011096500101012846500132013856500124015176900026016417000178016677000155018458520052020008520050020529030009021029070015021119940012021269990030021389917721563000116120150312090247.0cr un|||||||||121103s2007 caua b 000 0 eng a20070232 11 a9780833041203 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9780833041203 a0833041207 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0833041207 a(OCoLC)1401081830http://www.worldcat.org/oclc/1401081830/resolver/wikidata/oclc/140108183 a(OCoLC)1401081830http://www.worldcat.org/oclc/1401081830/resolver/wikidata/oclc/140108183 aDLCcDLCdYDXdBAKERdBTCTAdSCTdCZLdTTUdBOS an-us--- aBOSSaBOTN00aUG1123b.M66 20071 aMoore, Nancy Y.,d1947-0http://id.loc.gov/authorities/names/n790964820http://viaf.org/viaf/sourceID/LC|n790964820/resolver/wikidata/lc/n7909648210aDeveloping tailored supply strategies /cNancy Y. Moore, Clifford A. Grammich, Robert Bickel. aSanta Monica, CA :bRand Corp.,c2007. axxv, 124 p. :bill. ;c26 cm. aIncludes bibliographical references (p. 117-124).10aUnited States.bAir ForcexProcurement.0http://id.loc.gov/authorities/names/n791268110http://viaf.org/viaf/sourceID/LC|n791268110/resolver/wikidata/lc/n7912681110aUnited States.bDept. of DefensexProcurement.0http://id.loc.gov/authorities/names/n790219460http://viaf.org/viaf/sourceID/LC|n790219460/resolver/wikidata/lc/n79021946 0aPurchasing.0http://id.loc.gov/authorities/subjects/sh851091630/resolver/wikidata/lc/sh85109163 0aIndustrial procurementzUnited States.0http://id.loc.gov/authorities/subjects/sh20091270730/resolver/wikidata/lc/sh2009127073 0aBusiness logisticszUnited States.0http://id.loc.gov/authorities/subjects/sh850183060/resolver/wikidata/lc/sh85018306 aElectronic resources.1 aGrammich, Clifford A.q(Clifford Anthony),d1963-0http://id.loc.gov/authorities/names/n980911630http://viaf.org/viaf/sourceID/LC|n980911630/resolver/wikidata/lc/n980911631 aBickel, Robert W.0http://id.loc.gov/authorities/names/no20031027230http://viaf.org/viaf/sourceID/LC|no20031027230/resolver/wikidata/lc/no20031027230 bMUGcbosshUG1123i.M66 20078226140904900011610 bBUcwebhUG1123i.M66 2007822614090430001161 aBOSS a.b2746328x aC0bBOS amultib2c071121dmeaf-03504cam 2200325 a 45000010018000000050017000180080039000350100016000740200085000900200079001750350093002540350093003470400056004400430012004960490009005080500022005171000157005392450076006962600051007723000047008235040064008705051745009346100146026796500130028256510114029558520052030699070015031219940012031369990030031489917721558000116120150312090246.0121103s2007 ilua b 001 0 eng a20060299 13 a9780226453699 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9780226453699 a0226453693 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0226453693 a(OCoLC)715521790http://www.worldcat.org/oclc/715521790/resolver/wikidata/oclc/71552179 a(OCoLC)715521790http://www.worldcat.org/oclc/715521790/resolver/wikidata/oclc/71552179 aDLCcDLCdBAKERdC#PdYDXCPdBTCTAdIXAdNLGGCdVP@ an-us--- aBOSS00aBL2525b.K75 20071 aKripal, Jeffrey John,d1962-0http://id.loc.gov/authorities/names/n941208230http://viaf.org/viaf/sourceID/LC|n941208230/resolver/wikidata/lc/n9412082310aEsalen :bAmerica and the religion of no religion /cJeffrey J. Kripal. aChicago :bUniversity of Chicago Press,c2007. axiii, 575 p. :bill. (some col.) ;c24 cm. aIncludes bibliographical references (p. 521-534) and index.0 aOpenings : Introduction: on wild facts and altered categories -- Geographic, historical, and literary orientations (1882-1962) -- Slate's Hot Springs : homestead, family spa, literary paradise -- The empowerment of the founders (1950-1960) -- The professor and the saint : the early inspirations of Michael Murphy -- Buddhism, breakdown, breakthrough : the early inspirations of Richard Price -- The outlaw era and the American counterculture (1960-1970) -- "Totally on fire" : the experience of founding Esalen -- Mind manifest : psychedelia at early Esalen and beyond -- Mesmer to Maslow : energy and the Freudian left -- Perls to Price: consciousness and the gestalt lineage -- Esalen goes to the city: the San Francisco center -- On ecstasy, education, and the end of sex : George Leonard and the human potential -- The serpent spine of spirit and sex : Don Hanlon Johnson and the somatics movement -- The occult imaginal and Cold War activism (1970-1985) -- The cosmic womb : Stanislav and Christina Grof and the counsels of spiritual emergence -- Golf in the kingdom : Plato and Ramakrishna for Republicans -- Jacob Atabet and the Tantra of physics -- Superpowers : Cold War psychics and citizen diplomats -- Sex with the angels : nonlocal mind, UFOs, and an end to ordinary history -- The Tao of Esalen : the spiritual art and intuitive business of managing emptiness -- Crisis and the religion of no religion (1985-1993) -- The religion of no religion : the Donovan era -- Realizing Darwin's dream : the transformation project and the future of the body -- Before and after the storm (1993-2006) -- After the storm : reassessment, disaster, and renewal -- (In)conclusion -- The future of the past and the mystical idea of "America."20aEsalen Institute.0http://id.loc.gov/authorities/names/n831444110http://viaf.org/viaf/sourceID/LC|n831444110/resolver/wikidata/lc/n83144411 0aReligion and culturezUnited States.0http://id.loc.gov/authorities/subjects/sh20101106350/resolver/wikidata/lc/sh2010110635 0aUnited StatesxReligion.0http://id.loc.gov/authorities/subjects/sh851404980/resolver/wikidata/lc/sh851404980 bMUGcbosshBL2525i.K75 2007822614090310001161 a.b27466309 aC0bBOS amugarb1c071130dmeaf-01391cam 22003014a 45000010018000000050017000180080039000350100016000740150019000900160018001090200084001270350093002110350093003040400054003970430012004510490009004630500025004721000154004972450060006512600055007113000034007665040064008006500113008648520055009779070015010329940012010479990030010599917711551000116120150312090243.0121103s2007 mdua b 001 0 eng a20060219 50 aGBA6A04442bnb7 a0136130472Uk a9780742554504 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9780742554504 a(OCoLC)702655570http://www.worldcat.org/oclc/702655570/resolver/wikidata/oclc/70265557 a(OCoLC)702655570http://www.worldcat.org/oclc/702655570/resolver/wikidata/oclc/70265557 aDLCcDLCdBAKERdUKMdBTCTAdC#PdYDXdYDXCPdMUQ aa-cc--- aBOSS00aPN1993.5.C4bX8 20071 aXu, Gary G.,d1968-0http://id.loc.gov/authorities/names/n20060513600http://viaf.org/viaf/sourceID/LC|n20060513600/resolver/wikidata/lc/n200605136010aSinascape :bcontemporary Chinese cinema /cGary G. Xu. aLanham :bRowman & Littlefield Publishers,cc2007. axii, 175 p. :bill. ;c23 cm. aIncludes bibliographical references (p. 159-169) and index. 0aMotion pictureszChina.0http://id.loc.gov/authorities/subjects/sh980053830/resolver/wikidata/lc/sh980053830 bMUGcbosshPN1993.5.C4iX8 2007822613770460001161 a.b2727990x aC0bBOS amugarb1c070727dmeaf-01970pam 2200349 a 45000010018000000050017000180080039000350100013000740200076000870350093001630400013002560430012002690490009002810500026002901000150003162450093004662600047005593000040006064400041006465040064006876500163007516500163009146510047010776510049011246510045011736510047012186510126012656510128013918520056015199070015015759990030015909917719380000116120150312090243.0121103s1998 nyuab b 001 0 eng a98021179 a0801434513 (acid-free paper)0http://www.isbnsearch.org/isbn/0801434513 a(OCoLC)389930310http://www.worldcat.org/oclc/389930310/resolver/wikidata/oclc/38993031 aDLCcDLC an-us-ny aBOSS00aF128.68.E53bS26 19981 aSanjek, Roger,d1944-0http://id.loc.gov/authorities/names/n871298060http://viaf.org/viaf/sourceID/LC|n871298060/resolver/wikidata/lc/n8712980614aThe future of us all :brace and neighborhood politics in New York City /cRoger Sanjek. aIthaca :bCornell University Press,c1998. axiv, 465 p. :bill., maps ;c24 cm. 0aAnthropology of contemporary issues. aIncludes bibliographical references (p. 427-449) and index. 0aMinoritieszNew York (State)zNew YorkxPolitical activityxCase studies.0http://id.loc.gov/authorities/subjects/sh850857920/resolver/wikidata/lc/sh85085792 0aImmigrantszNew York (State)zNew YorkxPolitical activityxCase studies.0http://id.loc.gov/authorities/subjects/sh850645170/resolver/wikidata/lc/sh85064517 0aElmhurst (New York, N.Y.)xRace relations. 0aElmhurst (New York, N.Y.)xEthnic relations. 0aCorona (New York, N.Y.)xRace relations. 0aCorona (New York (N.Y.)xEthnic relations. 0aNew York (N.Y.)xRace relations.0http://id.loc.gov/authorities/subjects/sh20081163300/resolver/wikidata/lc/sh2008116330 0aNew York (N.Y.)xEthnic relations.0http://id.loc.gov/authorities/subjects/sh20081163290/resolver/wikidata/lc/sh20081163290 bMUGcbosshF128.68.E53iS26 1998822614029100001161 a.b22204945 amugarb1c990120dmeaf-04374cam 22003854a 45000010018000000050017000180080041000350100016000760200064000920200058001560350096002140350096003100400076004060420008004820490009004900500023004991000149005222450181006712600055008523000030009074900026009375000189009635001825011525040049029776500133030266500124031596500117032837000157034007100152035578300182037098520048038919070010039399940007039499990032039569917711847000116120150312090242.0121103s2007 dcua b i000 0 eng c a20072988 56 a97815890662430http://www.isbnsearch.org/isbn/9781589066243 a15890662430http://www.isbnsearch.org/isbn/1589066243 a(OCoLC)1372623890http://www.worldcat.org/oclc/1372623890/resolver/wikidata/oclc/137262389 a(OCoLC)1372623890http://www.worldcat.org/oclc/1372623890/resolver/wikidata/oclc/137262389 aDBIcDBIdDLCdAFQdYLSdVP@dYDXCPdBAKERdNLGGCdMUQdBTCTAdIXAdBOS apcc aBOSS00aHG3851b.O845 20071 aÖtker, İnci.0http://id.loc.gov/authorities/names/no940089940http://viaf.org/viaf/sourceID/LC|no940089940/resolver/wikidata/lc/no94008 aMoving to greater exchange rate flexibility :boperational aspects based on lessons from detailed country experiences /cInci Otker-Robe and David Vavra, and a team of economis aWashington, DC :bInternational Monetary Fund,c20 avii, 84 p. :bill. ;c28  aOccasional paper ;v2 aDetailed country case studies were prepared by a team of experts consisting of Luis Ahumada, Fernando Barran, Andre Minella, Zbigniew Polanski, Piotr Szpunar, Barry Topf, and David Vav a"Many countries moved toward more flexible exchange rate regimes over the past decade, which reflects in part the belief that more flexible exchange rates provide a greater degree of monetary policy autonomy and flexibility in responding to external shocks, including large and volatile capital flows. There has often been a reluctance to let go of pegged exchange rates despite the benefits of flexible rates. The extensive institutional and operational requirements needed to support a floating exchange rate as well as difficulties in assessing the right time and manner to exit tend to be additional factors in this reluctance. This paper presents the concrete steps taken by certain countries in transitioning to greater exchange rate flexibility, with a view to elaborating on the operational ingredients that proved helpful in promoting successful and durable transitions. It attempts to provide a better understanding of how these various operational ingredients were established and coordinated with the exits, how their implementation interacted with macro and other conditions, and how they contributed to the smoothness of the exits. The material in this paper was originally prepared in connection with a workshop on moving to greater exchange rate flexibility conducted in Ukraine in April 2005. The detailed case studies prepared subsequently also aimed a providing a follow-up to a discussion by the International Monetary Fund's (IMF) Executive Board in Devember 2004 on "From Fixed to Float: Operational Asoects of Moving Toward Exchange Rate Flexibility" (IMF, 2004). In concluding the discussion, Directors asked for more guidance on the sequencing and order of importance of the operational elements, backed by analysis of more specific country experiences and cross-country studies" --Pref. ( aIncludes bibliographical references (p. 80-8 aForeign exchange administrationvCase studies.0http://id.loc.gov/authorities/subjects/sh850505000/resolver/wikidata/lc/sh85050 aForeign exchange ratesvCase studies.0http://id.loc.gov/authorities/subjects/sh910048930/resolver/wikidata/lc/sh91004 aMonetary policyvCase studies.0http://id.loc.gov/authorities/subjects/sh850867870/resolver/wikidata/lc/sh85086 aVávra, David,d1972-0http://id.loc.gov/authorities/names/nr20010207450http://viaf.org/viaf/sourceID/LC|nr20010207450/resolver/wikidata/lc/nr20010 aInternational Monetary Fund.0http://id.loc.gov/authorities/names/n810527550http://viaf.org/viaf/sourceID/LC|n810527550/resolver/wikidata/lc/n810 aOccasional paper (International Monetary Fund) ;vno. 256.0http://id.loc.gov/authorities/names/n420091200http://viaf.org/viaf/sourceID/LC|n420091200/resolver/wikidata/lc/n420 bMUGcbosshHG3851i.O845 20078226137611700 a.b272 aC0 bBOS amugarb1c080129dm01091pam 2200241 a 45000010018000000050017000180080039000350100013000740200071000870200078001580350093002360400013003290490009003420500026003511000156003772450079005332600057006123000026006695040053006958520056007489070015008049990030008199917719348000116120150312090242.0121103s1995 aru b 000 0 eng a95006773 a1557283133 (alk. paper)0http://www.isbnsearch.org/isbn/1557283133 a1557283141 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/1557283141 a(OCoLC)321661120http://www.worldcat.org/oclc/321661120/resolver/wikidata/oclc/32166112 aDLCcDLC aBOSS00aPS3543.I325bT53 19951 aViereck, Peter,d1916-2006.0http://id.loc.gov/authorities/names/n500196690http://viaf.org/viaf/sourceID/LC|n500196690/resolver/wikidata/lc/n5001966910aTide and continuities :blast and first poems, 1995-1938 /cPeter Viereck. aFayetteville :bUniversity of Arkansas Press,c1995. axix, 320 p. ;c25 cm. aIncludes bibliographical references (p. 319-320)0 bMUGcbosshPS3543.I325iT53 1995822614048070001161 a.b20863524 amugarb1c951031dmeaf-01912cam 2200349 a 45000010018000000050017000180080041000350150019000760200071000950200065001660350093002310350093003240400064004170420008004810490009004890900023004982450100005212500012006212600044006333000034006774400047007115040051007586500109008096500131009186500104010497000152011537000147013058520053014529070015015059940012015209990030015329917711977000116120150312090240.0121103s2007 ne a b 001 0 eng c aGBA6A58902bnb a9780444530936 (hbk.)0http://www.isbnsearch.org/isbn/9780444530936 a0444530932 (hbk.)0http://www.isbnsearch.org/isbn/0444530932 a(OCoLC)772566570http://www.worldcat.org/oclc/772566570/resolver/wikidata/oclc/77256657 a(OCoLC)772566570http://www.worldcat.org/oclc/772566570/resolver/wikidata/oclc/77256657 aUKMcUKMdOHXdBAKERdCNOdNDDdYUSdYDXCPdIXAdBTCTAdBOS apcc aBOSS aHB51b.F52 no. 28204aThe political economy of anititrust [sic] /cedited by Vivek Ghosal, John [i.e. Johan] Stennek. a1st ed. aAmsterdam ;aBoston :bElsevier,c2007. axvi, 489 p. :bill. ;c24 cm. 0aContributions to economic analysis ;v282. aIncludes bibliographical references and index. 0aRestraint of trade.0http://id.loc.gov/authorities/subjects/sh851132770/resolver/wikidata/lc/sh85113277 0aConsolidation and merger of corporations.0http://id.loc.gov/authorities/subjects/sh850312930/resolver/wikidata/lc/sh85031293 0aAntitrust law.0http://id.loc.gov/authorities/subjects/sh850057820/resolver/wikidata/lc/sh850057821 aGhosal, Vivek.0http://id.loc.gov/authorities/names/no20020452910http://viaf.org/viaf/sourceID/LC|no20020452910/resolver/wikidata/lc/no20020452911 aStennek, Johan.0http://id.loc.gov/authorities/names/nb980124690http://viaf.org/viaf/sourceID/LC|nb980124690/resolver/wikidata/lc/nb980124690 bMUGcbosshHB51i.F52 no. 282822613765710001161 a.b27291388 aC0bBOS amugarb1c070614dmeaf-01468pam 2200277 a 45000010018000000050017000180080039000350100013000740200078000870350093001650400023002580430012002810490009002930900022003021000154003242450121004782600072005993000040006714400067007115040064007786500125008426500126009678520052010939070015011459990030011609917717253000116120150312090239.0121103s1998 ohuab b s001 0 eng a98019136 a0896802035 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0896802035 a(OCoLC)391574770http://www.worldcat.org/oclc/391574770/resolver/wikidata/oclc/39157477 aDLCcDLCdYDXdBOS af-rh--- aBOSS aDT1b.F684 no. 691 aRubert, Steven C.,d1947-0http://id.loc.gov/authorities/names/n906774560http://viaf.org/viaf/sourceID/LC|n906774560/resolver/wikidata/lc/n9067745612aA most promising weed :ba history of tobacco farming and labor in colonial Zimbabwe, 1890-1945 /cSteven C. Rubert. aAthens :bOhio University Center for International Studies,cc1998. axvi, 255 p. :bill., maps ;c22 cm. 0aMonographs in international studies.pAfrica series ;vno. 69. aIncludes bibliographical references (p. 224-244) and index. 0aTobacco workerszZimbabwexHistory.0http://id.loc.gov/authorities/subjects/sh851357510/resolver/wikidata/lc/sh85135751 0aTobacco industryzZimbabwexHistory.0http://id.loc.gov/authorities/subjects/sh851357350/resolver/wikidata/lc/sh851357350 bMUGcbosshDT1i.F684 no. 69822613969010001161 a.b22207211 amugarb1c990105dmeaf-02571cam 22003854a 45000010018000000050017000180080039000350100016000740150019000900160018001090200085001270200079002120350093002910350093003840400054004770430012005310490009005430500021005521000150005732450050007232600052007733000027008255040056008525050398009086500131013066500136014376500131015736500124017046510120018286510129019488520051020779070015021289940012021439990030021559917711497000116120150312090238.0121103s2007 ilu b s000 0 eng a20061009 29 aGBA7282892bnb7 a0137153842Uk a9780252031663 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9780252031663 a0252031660 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0252031660 a(OCoLC)819165380http://www.worldcat.org/oclc/819165380/resolver/wikidata/oclc/81916538 a(OCoLC)819165380http://www.worldcat.org/oclc/819165380/resolver/wikidata/oclc/81916538 aDLCcDLCdBAKERdBTCTAdUKMdC#PdIXAdYDXCPdBOS an-us--- aBOSS00aE76.8b.C66 20071 aCook-Lynn, Elizabeth.0http://id.loc.gov/authorities/names/n822071860http://viaf.org/viaf/sourceID/LC|n822071860/resolver/wikidata/lc/n8220718610aNew Indians, old wars /cElizabeth Cook-Lynn. aUrbana :bUniversity of Illinois Press,cc2007. axiii, 226 p. ;c24 cm. aIncludes bibliographical references (p. [211]-226).0 aIntroduction -- To keep the plot moving -- An aside : how do we know about literary Indians? -- Warriors, still? -- The pitfalls of telling tribal histories : Lewis and Clark, colonial diaries, and fool soldiers -- Defensive, regulatory, and transformative functions of Indian studies -- The struggle for cultural heritage -- The ghosts of American history in art and literature -- Conclusion. 0aIndians of North AmericaxHistoriography.0http://id.loc.gov/authorities/subjects/sh850652870/resolver/wikidata/lc/sh85065287 0aIndians, Treatment ofzUnited StatesxHistory.0http://id.loc.gov/authorities/subjects/sh850650750/resolver/wikidata/lc/sh85065075 0aIndians of North AmericaxPublic opinion.0http://id.loc.gov/authorities/subjects/sh850653610/resolver/wikidata/lc/sh85065361 0aPublic opinionzUnited States.0http://id.loc.gov/authorities/subjects/sh20101052790/resolver/wikidata/lc/sh2010105279 0aUnited StatesxRace relations.0http://id.loc.gov/authorities/subjects/sh851404940/resolver/wikidata/lc/sh85140494 0aUnited StatesxPolitics and government.0http://id.loc.gov/authorities/subjects/sh851404100/resolver/wikidata/lc/sh851404100 bMUGcbosshE76.8i.C66 2007822613788500001161 a.b27287695 aC0bBOS amugarb1c070627dmeaf-02397cam 22003374a 45000010018000000050017000180080039000350100016000740200085000900200079001750200084002540200078003380350093004160350093005090400054006020490009006560500024006651000180006892450081008692600051009503000033010015040063010345050545010976500118016426500149017606510039019098520054019489070015020029940012020179990030020299917711770000116120150312090234.0121103s2007 ilua b 001 0 eng a20060269 23 a9780226429724 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9780226429724 a0226429725 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0226429725 a9780226429731 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9780226429731 a0226429733 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0226429733 a(OCoLC)710067100http://www.worldcat.org/oclc/710067100/resolver/wikidata/oclc/71006710 a(OCoLC)710067100http://www.worldcat.org/oclc/710067100/resolver/wikidata/oclc/71006710 aDLCcDLCdBAKERdC#PdBTCTAdIXAdOUNdYDXCPdBOS aBOSS00aRC451.A42bK45 20071 aKeller, Richard C.q(Richard Charles),d1969-0http://id.loc.gov/authorities/names/n20021511350http://viaf.org/viaf/sourceID/LC|n20021511350/resolver/wikidata/lc/n200215113510aColonial madness :bpsychiatry in French North Africa /cRichard C. Keller. aChicago :bUniversity of Chicago Press,c2007. axi, 294 p. :bill. ;c23 cm. aIncludes bibliographical references (p.257-285) and index.0 aPinel in the maghreb : liberation and confinement in a landscape of sickness -- Shaping colonial psychiatry : geographies of innovation and economies of care -- Spaces of experimentation, sites of contestation : doctors, patients, and treatments -- Between clinical and useful knowledge : race, ethnicity, and the conquest of the primitive -- Violence, resistance, and the poetics of suffering : colonial madness between Fanon and Kateb Yacine -- Underdevelopment, migration, and dislocation : postcolonial histories of colonial psychiatry. 0aPsychiatryzAfricaxHistory.0http://id.loc.gov/authorities/subjects/sh851083810/resolver/wikidata/lc/sh85108381 0aPsychoanalysis and colonialismzAfrica, NorthxHistory.0http://id.loc.gov/authorities/subjects/sh20050008690/resolver/wikidata/lc/sh2005000869 0aFrancexColonieszAfricaxHistory.0 bMUGcbosshRC451.A42iK45 2007822613778390001161 a.b27282041 aC0bBOS amugarb1c070705dmeaf-02030cam 22003374a 45000010018000000050017000180080039000350100016000740200079000900200085001690350093002540350093003470400044004400420008004840490009004920500022005012450100005232600051006233000033006744400062007075000104007695040053008735050195009266500148011217000148012697100166014178520052015839070015016359940012016509990030016629917711464000116120150312090233.0121103s2007 ilua b 101 0 eng a20060445 30 a0226107264 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0226107264 a9780226107264 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9780226107264 a(OCoLC)682214790http://www.worldcat.org/oclc/682214790/resolver/wikidata/oclc/68221479 a(OCoLC)682214790http://www.worldcat.org/oclc/682214790/resolver/wikidata/oclc/68221479 aDLCcDLCdBAKERdBTCTAdC#PdYDXCPdBOS apcc aBOSS00aHG3882b.G25 200700aG7 current account imbalances :bsustainability and adjustment /cedited by Richard H. Clarida. aChicago :bUniversity of Chicago Press,c2007. aix, 507 p. :bill. ;c24 cm. 2aA National Bureau of Economic Research conference report. a"The papers were ... were presented at a conference in Newport, Rhode Island in June 2005"--Introd. aIncludes bibliographical references and indexes.0 aOrigins of G7 current account imbalances -- Empirical studies of G7 current account and exchange rate adjustment -- Theoretical perspectives on current account sustainability and adjustment. 0aBalance of paymentszGroup of Seven countriesvCongresses.0http://id.loc.gov/authorities/subjects/sh850111270/resolver/wikidata/lc/sh850111271 aClarida, Richard H.0http://id.loc.gov/authorities/names/n868484590http://viaf.org/viaf/sourceID/LC|n868484590/resolver/wikidata/lc/n868484592 aNational Bureau of Economic Research.0http://id.loc.gov/authorities/names/n791392860http://viaf.org/viaf/sourceID/LC|n791392860/resolver/wikidata/lc/n791392860 bMUGcbosshHG3882i.G25 2007822613787360001161 a.b27286848 aC0bBOS amugarb1c070613dmeaf-02331cam 22003734a 45000010018000000050017000180080041000350200058000760200064001340350093001980350093002910400025003840420008004090430012004170490009004290500028004381000156004662400048006222450189006702600044008593000036009035000117009395040047010566500116011036500120012196500127013396500136014666500122016026500130017248520055018549070012019099940009019219990027019309917711410000116120150312090227.0121103s2007 is ac b 001 0 eng c a96522938650http://www.isbnsearch.org/isbn/9652293865 a97896522938620http://www.isbnsearch.org/isbn/9789652293862 a(OCoLC)855645160http://www.worldcat.org/oclc/855645160/resolver/wikidata/oclc/85564516 a(OCoLC)855645160http://www.worldcat.org/oclc/855645160/resolver/wikidata/oclc/85564516 aUUMcUUMdOSUdBAKER apcc ae-hu--- aBOSS 4aDS135.H93bA147313 20071 aGur, David,d1926-0http://id.loc.gov/authorities/names/no20050593380http://viaf.org/viaf/sourceID/LC|no20050593380/resolver/wikidata/lc/no200505933810aAhÌ£im le-hitnagdut ule-hatsalahlEnglish aBrothers for resistance and rescue :bthe underground Zionist youth movement in Hungary during World War II /cDavid Gur ; edited by Eli Netzer ; transl. by Pamela Segev & Avri Fischer aJerusalem ;aNew York :bGefen,c[2007] a270 p. :bill., ports. ;c28 cm a"Copyright ̧The Society for the Research of the History of the Zionist Yorth Movement in Hungary."--T.p. ver aIncludes bibliography (p. 261-264) and ind aJewszHungaryvBiography.0http://id.loc.gov/authorities/subjects/sh20081061060/resolver/wikidata/lc/sh2008106 aJewish youthzHungaryvBiography.0http://id.loc.gov/authorities/subjects/sh851493570/resolver/wikidata/lc/sh85149 aZionismzHungaryxHistoryy20th century.0http://id.loc.gov/authorities/subjects/sh851498860/resolver/wikidata/lc/sh85149 aWorld War, 1939-1945xJewish resistancezHungary.0http://id.loc.gov/authorities/subjects/sh851482730/resolver/wikidata/lc/sh85148 aJews, HungarianzIsraelvBiography.0http://id.loc.gov/authorities/subjects/sh850704950/resolver/wikidata/lc/sh85070 aHolocaust survivorszIsraelvBiography.0http://id.loc.gov/authorities/subjects/sh20081057240/resolver/wikidata/lc/sh2008105 bMUGcbosshDS135.H93iA147313 2007822613785550001 a.b27292 aC0b amugarb1c070605dmea01583cam 22003134a 45000010018000000050017000180080039000350100016000740150019000900160018001090200084001270200078002110350093002890350093003820400054004750490009005290500021005381000148005592450102007072600046008093000034008555040064008896500102009536500106010558520051011619070015012129940012012279990030012399917711706000116120150312090227.0121103s2007 coua b 001 0 eng a20060358 85 aGBA6A62782bnb7 a0136296192Uk a9780813343501 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9780813343501 a081334350X (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/081334350X a(OCoLC)745693340http://www.worldcat.org/oclc/745693340/resolver/wikidata/oclc/74569334 a(OCoLC)745693340http://www.worldcat.org/oclc/745693340/resolver/wikidata/oclc/74569334 aDLCcDLCdYDXdBAKERdUKMdYDXCPdBTCTAdIAYdBOS aBOSS00aN7572b.L47 20071 aLeppert, Richard D.0http://id.loc.gov/authorities/names/n770121670http://viaf.org/viaf/sourceID/LC|n770121670/resolver/wikidata/lc/n7701216714aThe nude :bthe cultural rhetoric of the body in the art of Western modernity /cRichard Leppert. aBoulder, Colo. :bWestview Press,cc2007. axvi, 318 p. :bill. ;c23 cm. aIncludes bibliographical references (p. 291-308) and index. 0aNude in art.0http://id.loc.gov/authorities/subjects/sh850931690/resolver/wikidata/lc/sh85093169 0aArt and society.0http://id.loc.gov/authorities/subjects/sh850079750/resolver/wikidata/lc/sh850079750 bMUGcbosshN7572i.L47 2007822613775870001161 a.b27278220 aC0bBOS amugarb1c070618dmeaf-03023cam 2200373 a 45000010018000000050017000180080039000350100016000740150019000900160018001090200071001270200077001980350093002750350093003680400049004610430012005100490009005220500021005311000158005522450075007102600048007853000049008335040066008825050956009486500126019046500139020306500121021696500128022906510123024188520051025419070015025929940012026079990030026199917707794000116120150312090225.0121103s2007 ctua b 001 0 eng a20060177 65 aGBA6621292bnb7 a0135115712Uk a0300110618 (alk. paper)0http://www.isbnsearch.org/isbn/0300110618 a9780300110616 (alk. paper)0http://www.isbnsearch.org/isbn/9780300110616 a(OCoLC)700629420http://www.worldcat.org/oclc/700629420/resolver/wikidata/oclc/70062942 a(OCoLC)700629420http://www.worldcat.org/oclc/700629420/resolver/wikidata/oclc/70062942 aDLCcDLCdBAKERdUKMdBTCTAdC#PdYDXCPdBOS ae-uk--- aBOSS00aDA110b.A44 20071 aAlexander, Michael,d1941-0http://id.loc.gov/authorities/names/nr900104140http://viaf.org/viaf/sourceID/LC|nr900104140/resolver/wikidata/lc/nr9001041410aMedievalism :bthe Middle Ages in modern England /cMichael Alexander. aNew Haven :bYale University Press,cc2007. axxviii, 306 p. :bill. (some col.) ;c25 cm. aIncludes bibliographical references (p. [284]-289) and index.0 aIntroduction -- The advent of the Goths : the medieval in the 1760s -- Chivalry, romances and revival : Chaucer into Scott : The lay of the last minstrel and Ivanhoe -- Dim religious lights -- The lay, Christabel and 'The eve of St Agnes' -- 'Residences for the poor' : the Pugin of Contrasts -- Back to the future in the 1840s : Carlyle, Ruskin, Sybil, Newman -- 'The death of Arthur was the favourite volume' : Malory into Tennyson -- History, the revival and the PRB -- Westminster, Ivanhoe, visions and revisions -- History and legend : the subjects of poetry and painting -- The working men and the common good : Madox Brown, Maurice, Morris, Hopkins -- Among the lilies and the weeds : Hopkins, Whistler, Burne-Jones, Beardsley -- 'I have seen-- a white horse' : Chesterton, Yeats, Ford, Pound -- Modernist medievalism : Eliot, Pound, Jones -- Twentieth-century Christendom : Waugh, Auden, Inklings, Hill -- Epilogue : 'riding through the glen.' 0aMedievalismzGreat BritainxHistory.0http://id.loc.gov/authorities/subjects/sh860061190/resolver/wikidata/lc/sh86006119 0aGothic revival (Architecture)zGreat Britain.0http://id.loc.gov/authorities/subjects/sh20081182570/resolver/wikidata/lc/sh2008118257 0aCivilization, Medieval, in art.0http://id.loc.gov/authorities/subjects/sh960110540/resolver/wikidata/lc/sh96011054 0aCivilization, Medieval, in literature.0http://id.loc.gov/authorities/subjects/sh940037780/resolver/wikidata/lc/sh94003778 0aGreat BritainxIntellectual life.0http://id.loc.gov/authorities/subjects/sh850568500/resolver/wikidata/lc/sh850568500 bMUGcbosshDA110i.A44 2007822613635760001161 a.b27278219 aC0bBOS amugarb1c070608dmeaf-01139cam 2200229 a 45000010018000000050017000180080041000350200058000760350093001340400033002270490009002600900025002691000030002942450054003242600031003783000018004095050390004278520048008179070008008659940005008739990031008789917704377000116120150312090224.0121103s1999 gw 000 1 ger d a34920416470http://www.isbnsearch.org/isbn/3492041647 a(OCoLC)422121480http://www.worldcat.org/oclc/422121480/resolver/wikidata/oclc/42212148 aOHXbgercOHXdRCEdWYUdBOS aBOSS aPT2685.O34bS39 19991 aWohmann, Gabriele,d1932-10aSchwestern :bErzählungen /cGabriele Wohmann aMünchen :bPiper,cc19 a229 p. ;c21  aFiktive Wertangaben -- Im Atemholen sind zweierlei Gnaden -- Über Geld reden -- Malven -- Der Briefkastenhund -- Martha und Ottilie -- Venuswaschbecken -- Aber es ist noch zu früh -- Maxi kam bis Beethoven -- Heiss, kalt - eiskalt! -- Das war wohl auch wieder nichts -- Es geht mir schon viel besser -- And now: Twistle -- Haben sie bei uns was vermisst? -- Menschenrechte --  bMUGcbosshPT2685.O34iS39 199982261354291 a.b2 aE0bBOS amugarb1c000215d01596cam 22003134a 45000010018000000050017000180080039000350100016000740200085000900200079001750350093002540350093003470400049004400490009004890500021004982450097005192600064006163000035006804400023007155040051007385040073007896500111008627000050009737000151010238520051011749070015012259940012012409990030012529917707255000116120150312090222.0121103s2007 inuc b 011 0 eng a20060398 11 a9780268031039 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9780268031039 a0268031037 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0268031037 a(OCoLC)769398900http://www.worldcat.org/oclc/769398900/resolver/wikidata/oclc/76939890 a(OCoLC)769398900http://www.worldcat.org/oclc/769398900/resolver/wikidata/oclc/76939890 aDLCcDLCdBAKERdBTCTAdC#PdIXAdYDXCPdBOS aBOSS00aB721b.L335 200700aLaudemus viros gloriosos :bessays in honor of Armand Maurer, CSB /cedited by R. E. Houser. aNotre Dame, Ind. :bUniversity of Notre Dame Press,cc2007. avii, 395 p. :bport. ;c24 cm. 0aThomistic studies. aIncludes bibliographical references and index. a"Bibliography of the writings of Armand A. Maurer, CSB": p. 373-378. 0aPhilosophy, Medieval.0http://id.loc.gov/authorities/subjects/sh851009560/resolver/wikidata/lc/sh851009561 aMaurer, Armand A.q(Armand Augustine),d1915-1 aHouser, R. E.0http://id.loc.gov/authorities/names/nb20030915680http://viaf.org/viaf/sourceID/LC|nb20030915680/resolver/wikidata/lc/nb20030915680 bMUGcbosshB721i.L335 2007822613657950001161 a.b27282272 aC0bBOS amugarb1c070620dmeaf-02799cam 22003494a 45000010018000000050017000180080039000350100016000740150019000900160018001090200088001270200082002150200084002970200078003810350096004590350096005550400049006510490009007000500025007092450104007342600064008383000033009025040064009355050918009996000143019176500124020607000157021848520054023419070014023959940011024099990029024209917691203000116120150312090220.0121103s2007 enka b 001 0 eng a20070164 69 aGBA7556122bnb7 a0137951612Uk a9780521866279 (hardback : alk. paper)0http://www.isbnsearch.org/isbn/9780521866279 a0521866278 (hardback : alk. paper)0http://www.isbnsearch.org/isbn/0521866278 a9780521685344 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9780521685344 a0521685346 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0521685346 a(OCoLC)1237670500http://www.worldcat.org/oclc/1237670500/resolver/wikidata/oclc/123767050 a(OCoLC)1237670500http://www.worldcat.org/oclc/1237670500/resolver/wikidata/oclc/123767050 aDLCcDLCdBAKERdBTCTAdUKMdYDXCPdC#PdBOS aBOSS00aB1649.S264bJ65 200700aJohn Searle's philosophy of language :bforce, meaning, and mind /cedited by Savas L. Tsohatzidis. aCambridge ;aNew York :bCambridge University Press,c2007. aix, 297 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 285-293) and index.0 aIntroduction / Savas L. Tsohatzidis -- What is language : some preliminary remarks / John R. Searle -- From mind to meaning -- Content, mode, and self-reference / François Recanati -- Searle against the world : how can experiences find their objects? / Kent Bach -- Seeing what is there / Robin Jeshion -- Intentionalism, descriptivism, and proper names / Wayne A. Davis -- On the alleged priority of thought over language / Christopher Gauker -- Rule skepticism : Searle's criticism of Kripke's Wittgenstein / Martin Kusch -- From meaning to force -- How to say things with words / Kepa Korta and John Perry -- Semantics without the distinction between sense and force / Stephen J. Barker -- Dynamic discourse semantics for embedded speech acts / Nicholas Asher -- Yes-no questions and the myth of content invariance / Savas L. Tsohatzidis -- How do speech acts express psychological states? / Mitchell Green aSearle, John R.0http://id.loc.gov/authorities/names/n790556560http://viaf.org/viaf/sourceID/LC|n790556560/resolver/wikidata/lc/n7905565 aLanguage and languagesxPhilosophy.0http://id.loc.gov/authorities/subjects/sh850745740/resolver/wikidata/lc/sh8507457 aTsohatzidis, Savas L.,d1955-0http://id.loc.gov/authorities/names/n881642680http://viaf.org/viaf/sourceID/LC|n881642680/resolver/wikidata/lc/n8816426 bMUGcbosshB1649.S264iJ65 200782261312189000116 a.b2753838 aC0bBO amugarb1c080110dmeaf01936cam 22003014a 45000010018000000050017000180080039000350100016000740200085000900200079001750350093002540350093003470400049004400490009004890500025004981000147005232450071006702600058007413000027007994400035008265040066008615050454009276500141013818520055015229070015015779940012015929990030016049917711322000116120150312090219.0121103s2007 enk b 001 0 eng a20060232 16 a9780195309966 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9780195309966 a0195309960 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0195309960 a(OCoLC)707755740http://www.worldcat.org/oclc/707755740/resolver/wikidata/oclc/70775574 a(OCoLC)707755740http://www.worldcat.org/oclc/707755740/resolver/wikidata/oclc/70775574 aDLCcDLCdBAKERdBTCTAdC#PdYDXCPdIXAdBOS aBOSS00aPA3022.S28bR67 20071 aRosen, Ralph Mark.0http://id.loc.gov/authorities/names/n878113960http://viaf.org/viaf/sourceID/LC|n878113960/resolver/wikidata/lc/n8781139610aMaking mockery :bthe poetics of ancient satire /cRalph M. Rosen. aOxford ;aNew York :bOxford University Press,c2007. axiii, 294 p. ;c25 cm. 0aClassical culture and society. aIncludes bibliographical references (p. 269-285) and indexes.0 aThe dynamics of ancient satirical poetry -- Two paradigms of mockery in Greek myth : Iambe and Demeter, Heracles and the Cercopes -- Where the blame lies : the question of Thersites -- Shifting perspectives of comic abjection : Odysseus and Polyphemus as figures of satire -- Satiric authenticity in Callimachus's iambi -- Mockery, self-mockery, and the didactic ruse : Juvenal, satires 9 and 5 -- Archilochus, Critias, and the poetics of abjection. 0aVerse satire, ClassicalxHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20060054190/resolver/wikidata/lc/sh20060054190 bMUGcbosshPA3022.S28iR67 2007822613782280001161 a.b27287592 aC0bBOS amugarb1c070625dmeaf-02836cam 2200385 a 45000010018000000050017000180080039000350100016000740200089000900200083001790350093002620350093003550400044004480420009004920430012005010490009005130500028005222450153005502600054007033000028007575040064007855200383008496000158012326500135013906500128015256500122016536500109017756510151018847000149020357000151021848520058023359070015023939940012024089990030024209917707212000116120150312090218.0121103s2007 mou b s001 0beng a20061020 13 a9780826217165 (hardcover : alk. paper)0http://www.isbnsearch.org/isbn/9780826217165 a0826217168 (hardcover : alk. paper)0http://www.isbnsearch.org/isbn/0826217168 a(OCoLC)774765870http://www.worldcat.org/oclc/774765870/resolver/wikidata/oclc/77476587 a(OCoLC)774765870http://www.worldcat.org/oclc/774765870/resolver/wikidata/oclc/77476587 aDLCcDLCdBAKERdBTCTAdC#PdYDXCPdBOS alcac an-us--- aBOSS00aPS3515.U274bZ6845 200700aMontage of a dream :bthe art and life of Langston Hughes /cedited by John Edgar Tidwell and Cheryl R. Ragar ; with a foreword by Arnold Rampersad. aColumbia :bUniversity of Missouri Press,cc2007. axviii, 351 p. ;c25 cm. aIncludes bibliographical references (p. 319-334) and index. a"Contributors reexamine the continuing relevance of Langston Hughes's work and life to American, African American, and diasporic literatures and cultures. Includes fresh perspectives on the often overlooked "Luani of the Jungles," Black Magic, and works for children, as well as Hughes's more familiar fiction, poetry, essays, dramas, and other writings"--Provided by publisher.10aHughes, Langston,d1902-1967.0http://id.loc.gov/authorities/names/n800149560http://viaf.org/viaf/sourceID/LC|n800149560/resolver/wikidata/lc/n80014956 0aPoets, Americany20th centuryvBiography.0http://id.loc.gov/authorities/subjects/sh20081092670/resolver/wikidata/lc/sh2008109267 0aAfrican American poetsvBiography.0http://id.loc.gov/authorities/subjects/sh20071007490/resolver/wikidata/lc/sh2007100749 0aAfrican Americans in literature.0http://id.loc.gov/authorities/subjects/sh850020090/resolver/wikidata/lc/sh85002009 0aHarlem Renaissance.0http://id.loc.gov/authorities/subjects/sh850589290/resolver/wikidata/lc/sh85058929 0aHarlem (New York, N.Y.)xIntellectual lifey20th century.0http://id.loc.gov/authorities/subjects/sh20081153210/resolver/wikidata/lc/sh20081153211 aTidwell, John Edgar.0http://id.loc.gov/authorities/names/n886107610http://viaf.org/viaf/sourceID/LC|n886107610/resolver/wikidata/lc/n886107611 aRagar, Cheryl R.0http://id.loc.gov/authorities/names/n20060948110http://viaf.org/viaf/sourceID/LC|n20060948110/resolver/wikidata/lc/n20060948110 bMUGcbosshPS3515.U274iZ6845 2007822613656570001161 a.b27287658 aC0bBOS amugarb1c070628dmeaf-01812cam 2200337 a 45000010018000000050017000180080039000350100016000740200075000900200081001650200069002460200075003150350093003900350093004830400059005760430012006350490009006470500022006561000161006782450110008392600066009493000016010154400035010315040057010666500158011236500104012818520045013859070008014309940005014389990031014439917711009000116120150312090218.0121103s2006 sp b 000 0 spa a20074027 34 a8484892751 (Iberoamericana)0http://www.isbnsearch.org/isbn/8484892751 a9788484892755 (Iberoamericana)0http://www.isbnsearch.org/isbn/9788484892755 a3865272975 (Vervuert)0http://www.isbnsearch.org/isbn/3865272975 a9783865272973 (Vervuert)0http://www.isbnsearch.org/isbn/9783865272973 a(OCoLC)794476500http://www.worldcat.org/oclc/794476500/resolver/wikidata/oclc/79447650 a(OCoLC)794476500http://www.worldcat.org/oclc/794476500/resolver/wikidata/oclc/79447650 aDLCcDLCdOHXdPL#dUABdOCLCQdC3LdYDXCPdBTCTAdBOS ae-sp--- aBOSS00aPQ6066b.F43 20061 aFernández Mosquera, Santiago.0http://id.loc.gov/authorities/names/n940566430http://viaf.org/viaf/sourceID/LC|n940566430/resolver/wikidata/lc/n9405664 aLa tormenta en el Siglo de Oro :bvariaciones funcionales de un tópico /cSantiago Fernández Mosq aMadrid :bIberoamericana ;aFrankfurt amd Main :bVervuert,c a191 p. ;c2 aBiblioteca Aurea hispánica v43. aIncludes bibliographical references (p. [181 aSpanish literatureyClassical period, 1500-1700xHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20081121200/resolver/wikidata/lc/sh200 aStorms in literature.0http://id.loc.gov/authorities/subjects/sh940088140/resolver/wikidata/lc/sh9 bMUGcbosshPQ6066i.F43 200682261372095 a.b2 aC0bBOS amugarb1c080703d02761cam 22003734a 45000010018000000050017000180080039000350100016000740200075000900200069001650350093002340350093003270400044004200430012004640490009004760500023004851000152005082450083006602600064007433000024008075040064008315050461008956500122013566500138014786500130016166500107017466500142018536510144019956510138021398520053022779070015023309940012023459990030023579917709788000116120150312090215.0121103s2007 enk b 001 0 eng a20060391 95 a9780521875165 (hardback)0http://www.isbnsearch.org/isbn/9780521875165 a0521875161 (hardback)0http://www.isbnsearch.org/isbn/0521875161 a(OCoLC)768641890http://www.worldcat.org/oclc/768641890/resolver/wikidata/oclc/76864189 a(OCoLC)768641890http://www.worldcat.org/oclc/768641890/resolver/wikidata/oclc/76864189 aDLCcDLCdBAKERdBTCTAdC#PdYDXCPdBOS an-us--- aBOSS00aHV6432b.H653 20071 aHolmes, Stephen,d1948-0http://id.loc.gov/authorities/names/n822756270http://viaf.org/viaf/sourceID/LC|n822756270/resolver/wikidata/lc/n8227562714aThe matador's cape :bAmerica's reckless response to terror /cStephen Holmes. aCambridge ;aNew York :bCambridge University Press,c2007. ax, 367 p. ;c25 cm. aIncludes bibliographical references (p. 333-356) and index.0 aIntroduction -- Did religious extremism cause 9/11? -- Why military superiority breeds illusions -- How the war was lost -- Radicals trapped in the past -- A self-inflicted wound -- Searching for a new enemy after the Cold War -- Humanitarianism with teeth -- The war of the liberals -- The neo-conservative intifada -- Liberalism strangled by war -- The unilateralist curse -- Battling lawlessness with lawlessness -- The infallibility trap -- Conclusion. 0aWar on Terrorism, 2001-2009.0http://id.loc.gov/authorities/subjects/sh20010001480/resolver/wikidata/lc/sh2001000148 0aTerrorismxGovernment policyzUnited States.0http://id.loc.gov/authorities/subjects/sh20081127990/resolver/wikidata/lc/sh2008112799 0aTerrorismxReligious aspectsxIslam.0http://id.loc.gov/authorities/subjects/sh20020030170/resolver/wikidata/lc/sh2002003017 0aAnti-Americanism.0http://id.loc.gov/authorities/subjects/sh880035430/resolver/wikidata/lc/sh88003543 0aSeptember 11 Terrorist Attacks, 2001xInfluence.0http://id.loc.gov/authorities/subjects/sh20040055130/resolver/wikidata/lc/sh2004005513 0aUnited StatesxPolitics and governmenty2001-2009.0http://id.loc.gov/authorities/subjects/sh20010020710/resolver/wikidata/lc/sh2001002071 0aUnited StatesxForeign relationsy2001-2009.0http://id.loc.gov/authorities/subjects/sh20010001150/resolver/wikidata/lc/sh20010001150 bMUGcbosshHV6432i.H653 2007822613707920001161 a.b27287610 aC0bBOS amugarb1c070612dmeaf-01489cam 2200277 a 45000010018000000050017000180080039000350100013000740200076000870350093001630400028002560490009002840500021002932450112003142600058004263000026004844400039005105040066005496500127006156500111007426500113008537000149009668520051011159070015011669990030011819917694198000116120150312090213.0121103s1996 enk b 001 0 eng a95045298 a019828036X (acid-free paper)0http://www.isbnsearch.org/isbn/019828036X a(OCoLC)333350120http://www.worldcat.org/oclc/333350120/resolver/wikidata/oclc/33335012 aDLCcDLCdIAYdC#PdBOS aBOSS00aJC421b.I56 199604aThe international dimensions of democratization :bEurope and the Americas /cedited by Laurence Whitehead. aOxford ;aNew York :bOxford University Press,c1996. axii, 431 p. ;c24 cm. 0aOxford studies in democratization. aIncludes bibliographical references (p. [413]-420) and index. 0aDemocracyxHistoryy20th century.0http://id.loc.gov/authorities/subjects/sh20081021730/resolver/wikidata/lc/sh2008102173 0aWorld politicsy1989-0http://id.loc.gov/authorities/subjects/sh900041730/resolver/wikidata/lc/sh90004173 0aComparative government.0http://id.loc.gov/authorities/subjects/sh850292980/resolver/wikidata/lc/sh850292981 aWhitehead, Laurence.0http://id.loc.gov/authorities/names/n790182080http://viaf.org/viaf/sourceID/LC|n790182080/resolver/wikidata/lc/n790182080 bMUGcbosshJC421i.I56 1996822613224120001161 a.b21301037 amugarb1c961028dmeaf-02604cam 2200373 a 45000010018000000050017000180080039000350100016000740150019000900160018001090200077001270200071002040350093002750350093003680400051004610490009005120500024005211000152005452450072006972600058007693000034008275040066008615050479009276500161014066500116015676500109016836500110017926500116019026500101020188520054021199070015021739940012021889990030022009917711571000116120150312090212.0121103s2007 enka b 001 0 eng a20060363 72 aGBA6854372bnb7 a0135724842Uk a9780199206605 (alk. paper)0http://www.isbnsearch.org/isbn/9780199206605 a0199206600 (alk. paper)0http://www.isbnsearch.org/isbn/0199206600 a(OCoLC)728680150http://www.worldcat.org/oclc/728680150/resolver/wikidata/oclc/72868015 a(OCoLC)728680150http://www.worldcat.org/oclc/728680150/resolver/wikidata/oclc/72868015 aDLCcDLCdUKMdBAKERdBTCTAdBWKUKdYDXCPdBOS aBOSS00aPR428.A74bS35 20071 aSchwyzer, Philip.0http://id.loc.gov/authorities/names/n20030413110http://viaf.org/viaf/sourceID/LC|n20030413110/resolver/wikidata/lc/n200304131110aArchaeologies of English Renaissance literature /cPhilip Schwyzer. aOxford ;aNew York :bOxford University Press,c2007. axii, 227 p. :bill. ;c23 cm. aIncludes bibliographical references (p. [205]-222) and index.0 aIntimate disciplines : archaeology, literary criticism, and the traces of the dead -- Exhumation and ethnic conflict : colonial archaeology from St Erkenwald to Spenser in Ireland -- Dissolving images : monastic ruins in Elizabethan poetry -- Charnel knowledge : open graves in Shakespeare and Donne -- 'Mummy is become merchandise' : cannibals and commodities in the seventeenth century -- Readers of the lost urns : desire and disintegration in Thomas Browne's Urn-burial. 0aEnglish literatureyEarly modern, 1500-1700xHistory and criticism.0http://id.loc.gov/authorities/subjects/sh20081195810/resolver/wikidata/lc/sh2008119581 0aArchaeology in literature.0http://id.loc.gov/authorities/subjects/sh930084140/resolver/wikidata/lc/sh93008414 0aDead in literature.0http://id.loc.gov/authorities/subjects/sh940045300/resolver/wikidata/lc/sh94004530 0aRuins in literature.0http://id.loc.gov/authorities/subjects/sh851157940/resolver/wikidata/lc/sh85115794 0aAntiquities in literature.0http://id.loc.gov/authorities/subjects/sh930084000/resolver/wikidata/lc/sh93008400 0aExhumation.0http://id.loc.gov/authorities/subjects/sh850463610/resolver/wikidata/lc/sh850463610 bMUGcbosshPR428.A74iS35 2007822613771150001161 a.b27277835 aC0bBOS amugarb1c070613dmeaf-02779cam 2200445 a 45000010018000000050017000180080039000350100016000740150019000900160018001090190014001270200069001410200075002100200065002850200071003500350186004210350093006070400049007000430012007490490009007610500024007701000144007942450097009382600064010353000042010994400047011415040064011885050145012526100158013976500112015556500109016676500110017766500120018866500099020066500117021058520054022229070015022769940012022919990030023039917710158000116120150312090206.0121103s2007 enkab b s001 0 eng a20060302 28 aGBA7242142bnb7 a0137043982Uk a122283303 a0521872367 (hardback)0http://www.isbnsearch.org/isbn/0521872367 a9780521872362 (hardback)0http://www.isbnsearch.org/isbn/9780521872362 a0521694116 (pbk.)0http://www.isbnsearch.org/isbn/0521694116 a9780521694117 (pbk.)0http://www.isbnsearch.org/isbn/9780521694117 a(OCoLC)71350489z(OCoLC)1222833030http://www.worldcat.org/oclc/713504890/resolver/wikidata/oclc/713504890http://www.worldcat.org/oclc/1222833030/resolver/wikidata/oclc/122283303 a(OCoLC)713504890http://www.worldcat.org/oclc/713504890/resolver/wikidata/oclc/71350489 aDLCcDLCdBAKERdBTCTAdC#PdYDXCPdUKMdBOS as-ag--- aBOSS00aHV6485.A7bA94 20071 aAuyero, Javier.0http://id.loc.gov/authorities/names/n941189600http://viaf.org/viaf/sourceID/LC|n941189600/resolver/wikidata/lc/n9411896010aRoutine politics and violence in Argentina :bthe gray zone of state power /cJavier Auyero. aCambridge ;aNew York :bCambridge University Press,c2007. axviii, 190 p. :bill., maps ;c24 cm. 0aCambridge studies in contentious politics. aIncludes bibliographical references (p. 167-183) and index.0 aThe gray zone -- Party politics and everyday life -- Food lootings -- Moreno and La Matanza lootings -- Making sense of collective violence.20aPartido Peronista (Argentina)0http://id.loc.gov/authorities/names/n853862920http://viaf.org/viaf/sourceID/LC|n853862920/resolver/wikidata/lc/n85386292 0aFood riotszArgentina.0http://id.loc.gov/authorities/subjects/sh980018320/resolver/wikidata/lc/sh98001832 0aPillagezArgentina.0http://id.loc.gov/authorities/subjects/sh851021390/resolver/wikidata/lc/sh85102139 0aViolencezArgentina.0http://id.loc.gov/authorities/subjects/sh851435140/resolver/wikidata/lc/sh85143514 0aPolitical violencezArgentina.0http://id.loc.gov/authorities/subjects/sh950057270/resolver/wikidata/lc/sh95005727 0aPeronism.0http://id.loc.gov/authorities/subjects/sh851000250/resolver/wikidata/lc/sh85100025 0aLaw enforcementzArgentina.0http://id.loc.gov/authorities/subjects/sh850753020/resolver/wikidata/lc/sh850753020 bMUGcbosshHV6485.A7iA94 2007822613752060001161 a.b27288018 aC0bBOS amugarb1c070710dmeaf-02241cam 2200373 a 45000010018000000050017000180080039000350100016000740200064000900200071001540350093002250350093003180400057004110430012004680490009004800500023004891000157005122450093006692500009007622600052007713000024008235040061008475050109009086500130010176500138011476500121012856510131014066510115015376510117016528520050017699070012018199940009018319990027018409917710139000116120150312090204.0121103s2007 nyu b 001 0 eng a20060489 82 a97800601904390http://www.isbnsearch.org/isbn/9780060190439 a0060190434 (alk. paper)0http://www.isbnsearch.org/isbn/0060190434 a(OCoLC)706603690http://www.worldcat.org/oclc/706603690/resolver/wikidata/oclc/70660369 a(OCoLC)706603690http://www.worldcat.org/oclc/706603690/resolver/wikidata/oclc/70660369 aDLCcDLCdGK8dYDXCPdZS3dC#PdBTCTAdYBMdIXAdBOS ae-gx--- aBOSS00aD804.3b.F753 20071 aFriedländer, Saul,d1932-0http://id.loc.gov/authorities/names/n791059060http://viaf.org/viaf/sourceID/LC|n791059060/resolver/wikidata/lc/n7910590 aThe years of extermination :bNazi Germany and the Jews, 1939-1945 /cSaul Friedländ a1st  aNew York, NY :bHarper Collins Publishers,cc20 axxvi, 870 p. ;c24  aIncludes bibliographic references (p. [795]-848) and ind aTerror (Fall 1939-Summer 1941) -- Mass murder (Summer 1941-Summer 1942) -- Shoah (Summer 1942-Spring 194 aHolocaust, Jewish (1939-1945)zGermany.0http://id.loc.gov/authorities/subjects/sh20081056930/resolver/wikidata/lc/sh2008105 aJewszPersecutionszGermanyxHistoryy20th century.0http://id.loc.gov/authorities/subjects/sh850703610/resolver/wikidata/lc/sh85070 aJewszGermanyxHistoryy1933-1945.0http://id.loc.gov/authorities/subjects/sh850704660/resolver/wikidata/lc/sh85070 aGermanyxPolitics and governmenty1933-1945.0http://id.loc.gov/authorities/subjects/sh850546400/resolver/wikidata/lc/sh85054 aGermanyxHistoryy1933-1945.0http://id.loc.gov/authorities/subjects/sh850545940/resolver/wikidata/lc/sh85054 aGermanyxEthnic relations.0http://id.loc.gov/authorities/subjects/sh20081052630/resolver/wikidata/lc/sh2008105 bMUGcbosshD804.3i.F753 2007822613751400001 a.b27278 aC0b amugarb1c070626dmea02142cam 2200337 a 45000010018000000050017000180080039000350100013000740200066000870200066001530350093002190400023003120430030003350490009003650500021003741000149003952450113005442600051006573000034007085040066007426500124008086500117009326500124010496500104011736500146012776500139014236500146015628520051017089070015017599990030017749917697637000116120150312090200.0121103s1996 nyua b 001 0 eng a96010966 a0231104847 (cloth)0http://www.isbnsearch.org/isbn/0231104847 a0231104855 (paper)0http://www.isbnsearch.org/isbn/0231104855 a(OCoLC)343577510http://www.worldcat.org/oclc/343577510/resolver/wikidata/oclc/34357751 aDLCcDLCdC#PdOCL an-us---an-cn---ae-uk--- aBOSS00aRA393b.R84 19961 aRuggie, Mary,d1945-0http://id.loc.gov/authorities/names/n822527350http://viaf.org/viaf/sourceID/LC|n822527350/resolver/wikidata/lc/n8225273510aRealignments in the welfare state :bhealth policy in the United States, Britain, and Canada /cMary Ruggie. aNew York :bColumbia University Press,cc1996. axiv, 298 p. :bill. ;c24 cm. aIncludes bibliographical references (p. [273]-290) and index. 0aMedical policyzUnited States.0http://id.loc.gov/authorities/subjects/sh20081072750/resolver/wikidata/lc/sh2008107275 0aMedical policyzCanada.0http://id.loc.gov/authorities/subjects/sh20081076050/resolver/wikidata/lc/sh2008107605 0aMedical policyzGreat Britain.0http://id.loc.gov/authorities/subjects/sh20081076180/resolver/wikidata/lc/sh2008107618 0aWelfare state.0http://id.loc.gov/authorities/subjects/sh851460370/resolver/wikidata/lc/sh85146037 0aMedical carexFinancexGovernment policyzUnited States.0http://id.loc.gov/authorities/subjects/sh850828710/resolver/wikidata/lc/sh85082871 0aMedical carexFinancexGovernment policyzCanada.0http://id.loc.gov/authorities/subjects/sh850828710/resolver/wikidata/lc/sh85082871 0aMedical carexFinancexGovernment policyzGreat Britain.0http://id.loc.gov/authorities/subjects/sh850828710/resolver/wikidata/lc/sh850828710 bMUGcbosshRA393i.R84 1996822613317900001161 a.b21299705 amugarb1c961203dmeaf-01975cam 2200361 a 45000010018000000050017000180080039000350100016000740150019000900160018001090200066001270200072001930200065002650200071003300350093004010350093004940400061005870420008006480490009006560500025006651000143006902450125008332600081009583000033010395040065010726500109011376500113012467000142013598520055015019070015015569940012015719990030015839917710091000116120150312090159.0121103s2005 enka b 001 0 eng a20050432 89 aGBA5422552bnb7 a0132004002Uk a1403921202 (cloth)0http://www.isbnsearch.org/isbn/1403921202 a9781403921208 (cloth)0http://www.isbnsearch.org/isbn/9781403921208 a1403921210 (pbk.)0http://www.isbnsearch.org/isbn/1403921210 a9781403921215 (pbk.)0http://www.isbnsearch.org/isbn/9781403921215 a(OCoLC)577308070http://www.worldcat.org/oclc/577308070/resolver/wikidata/oclc/57730807 a(OCoLC)577308070http://www.worldcat.org/oclc/577308070/resolver/wikidata/oclc/57730807 aDLCcDLCdBAKERdUKMdC#PdCOOdNLGGCdBTCTAdYDXCPdLVB apcc aBOSS00aLB1139.L3b.M45 20051 aMenyuk, Paula.0http://id.loc.gov/authorities/names/n500369980http://viaf.org/viaf/sourceID/LC|n500369980/resolver/wikidata/lc/n5003699810aLanguage development and education :bchildren with varying language experiences /cPaula Menyuk and Maria Estela Brisk. aHoundmills, Basingstoke, Hampshire ;aNew York :bPalgrave Macmillan,c2005. axi, 220 p. :bill. ;c23 cm. aIncludes bibliographical references ( p. 208-216) and index. 0aChildrenxLanguage.0http://id.loc.gov/authorities/subjects/sh850234540/resolver/wikidata/lc/sh85023454 0aLanguage and education.0http://id.loc.gov/authorities/subjects/sh850745150/resolver/wikidata/lc/sh850745151 aBrisk, Maria.0http://id.loc.gov/authorities/names/n851783610http://viaf.org/viaf/sourceID/LC|n851783610/resolver/wikidata/lc/n851783610 bMUGcbosshLB1139.L3i.M45 2005822613698380001161 a.b27289333 aC0bBOS amugarb1c070531dmeaf-02371cam 2200373 a 45000010018000000050017000180080039000350100016000740200085000900200079001750350096002540350096003500400049004460430021004950490009005160500021005251000157005462450066007032600058007693000034008275000020008616000157008816500109010386500105011476500133012526500124013856500147015096510123016566510110017798520051018899070015019409940012019559990030019679917693010000116120150312090155.0121103s2007 nmua s001 0deng a20070150 80 a9780826342928 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9780826342928 a0826342922 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0826342922 a(OCoLC)1230297630http://www.worldcat.org/oclc/1230297630/resolver/wikidata/oclc/123029763 a(OCoLC)1230297630http://www.worldcat.org/oclc/1230297630/resolver/wikidata/oclc/123029763 aDLCcDLCdBTCTAdBAKERdC#PdBWXdYDXCPdIXA anc-----an-mx--- aBOSS00aF1435b.P38 20071 aPatterson, Don,d1942-0http://id.loc.gov/authorities/names/n20070248830http://viaf.org/viaf/sourceID/LC|n20070248830/resolver/wikidata/lc/n200702488310aJourney to Xibalba :ba life in archaeology /cDon Patterson. aAlbuquerque :bUniversity of New Mexico Press,c2007. avii, 304 p. :bill. ;c24 cm. aIncludes index.10aPatterson, Don,d1942-0http://id.loc.gov/authorities/names/n20070248830http://viaf.org/viaf/sourceID/LC|n20070248830/resolver/wikidata/lc/n2007024883 0aMayasxAntiquities.0http://id.loc.gov/authorities/subjects/sh850824100/resolver/wikidata/lc/sh85082410 0aMaya mythology.0http://id.loc.gov/authorities/subjects/sh940003580/resolver/wikidata/lc/sh94000358 0aExcavations (Archaeology)zCentral America.0http://id.loc.gov/authorities/subjects/sh850461050/resolver/wikidata/lc/sh85046105 0aExcavations (Archaeology)zMexico.0http://id.loc.gov/authorities/subjects/sh850461580/resolver/wikidata/lc/sh85046158 0aArchaeologistszMexicozSan Miguel de AllendevBiography.0http://id.loc.gov/authorities/subjects/sh850065050/resolver/wikidata/lc/sh85006505 0aCentral AmericaxAntiquities.0http://id.loc.gov/authorities/subjects/sh20081146070/resolver/wikidata/lc/sh2008114607 0aMexicoxAntiquities.0http://id.loc.gov/authorities/subjects/sh850845380/resolver/wikidata/lc/sh850845380 bMUGcbosshF1435i.P38 2007822613135780001161 a.b27547188 aC0bBOS amugarb1c080103dmeaf-01377cam 22002658a 45000010018000000050017000180080039000350100013000740200079000870200078001660350093002440400023003370490009003600500020003692450121003892600053005103000033005635040051005966500113006476500111007607000145008718520050010169070015010669990030010819917695807000116120150312090153.0121103s1996 wiu b s001 0 eng a96018066 a029915100X (cloth : alk. paper)0http://www.isbnsearch.org/isbn/029915100X a0299151042 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0299151042 a(OCoLC)346042380http://www.worldcat.org/oclc/346042380/resolver/wikidata/oclc/34604238 aDLCcDLCdIUPdBOS aBOSS00aJF51b.P65 199600aPostwar politics in the G-7 :borders and eras in comparative perspective /cedited by Byron E. Shafer ... [et al.]. aMadison :bUniversity of Wisconsin Press,c1996. aix, 326 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aComparative government.0http://id.loc.gov/authorities/subjects/sh850292980/resolver/wikidata/lc/sh85029298 0aWorld politicsy1989-0http://id.loc.gov/authorities/subjects/sh900041730/resolver/wikidata/lc/sh900041731 aShafer, Byron E.0http://id.loc.gov/authorities/names/n810047540http://viaf.org/viaf/sourceID/LC|n810047540/resolver/wikidata/lc/n810047540 bMUGcbosshJF51i.P65 1996822613231720001161 a.b21301311 amugarb1c961028dmeaf-02150cam 2200373 a 45000010018000000050017000180080039000350100016000740150019000900160018001090200083001270200089002100200083002990200089003820350093004710350093005640400049006570490009007060500022007151000147007372450073008842600054009573000029010115040064010406500114011046500105012186500115013236500114014386500115015528520052016679070015017199940012017349990030017469917692907000116120150312090148.0121103s2007 caua b 001 0 eng a20060266 23 aGBA6824272bnb7 a0135633232Uk a1598740229 (hardcover : alk. paper)0http://www.isbnsearch.org/isbn/1598740229 a9781598740226 (hardcover : alk. paper)0http://www.isbnsearch.org/isbn/9781598740226 a1598740237 (paperback : alk. paper)0http://www.isbnsearch.org/isbn/1598740237 a9781598740233 (paperback : alk. paper)0http://www.isbnsearch.org/isbn/9781598740233 a(OCoLC)710443440http://www.worldcat.org/oclc/710443440/resolver/wikidata/oclc/71044344 a(OCoLC)710443440http://www.worldcat.org/oclc/710443440/resolver/wikidata/oclc/71044344 aDLCcDLCdBAKERdUKMdYDXCPdC#PdBTCTAdHDM aBOSS00aCC77.H5bL58 20071 aLittle, Barbara J.0http://id.loc.gov/authorities/names/n910990290http://viaf.org/viaf/sourceID/LC|n910990290/resolver/wikidata/lc/n9109902910aHistorical archaeology :bwhy the past matters /cBarbara J. Little. aWalnut Creek, Calif. :bLeft Coast Press,cc2007. a207 p. :bill. ;c23 cm. aIncludes bibliographical references (p. 193-198) and index. 0aArchaeology and history.0http://id.loc.gov/authorities/subjects/sh850065130/resolver/wikidata/lc/sh85006513 0aHistoric sites.0http://id.loc.gov/authorities/subjects/sh850611150/resolver/wikidata/lc/sh85061115 0aExcavations (Archaeology)0http://id.loc.gov/authorities/subjects/sh850461050/resolver/wikidata/lc/sh85046105 0aArchaeologyxPhilosophy.0http://id.loc.gov/authorities/subjects/sh850065100/resolver/wikidata/lc/sh85006510 0aArchaeologyxMethodology.0http://id.loc.gov/authorities/subjects/sh850065090/resolver/wikidata/lc/sh850065090 bMUGcbosshCC77.H5iL58 2007822613132440001161 a.b27547036 aC0bBOS amugarb1c080103dmeaf-02960cam 2200385 a 45000010018000000050017000180080039000350100013000740200066000870200066001530350093002190400018003120430030003300490009003600500027003691100168003962450273005642600113008373000046009505040064009966100178010606500113012386500153013516500120015046500128016246500123017526500131018756500136020066510035021427000145021777000150023228520057024729070015025299990030025449917698933000116120150312090144.0121103s1996 nyua bc 001 0 eng a95034638 a0195097149 (paper)0http://www.isbnsearch.org/isbn/0195097149 a0195097130 (cloth)0http://www.isbnsearch.org/isbn/0195097130 a(OCoLC)328530550http://www.worldcat.org/oclc/328530550/resolver/wikidata/oclc/32853055 aDLCcDLCdC#P aa-cc-tiaa-mp---an-us-ny aBOSS00aN8193.3.T36bC628 19962 aJacques Marchais Museum of Tibetan Art.0http://id.loc.gov/authorities/names/n950664180http://viaf.org/viaf/sourceID/LC|n950664180/resolver/wikidata/lc/n9506641810aTreasures of Tibetan art :bcollections of the Jacques Marchais Museum of Tibetan art /cBarbara Lipton and Nima Dorjee Ragnubs ; essay on Tibetan Buddhism by Donald S. Lopez, Jr. ; photographs by Geoffrey Clements ; foreword by His Holiness the Fourteenth Dalai Lama. aStaten Island, N.Y. :bJacques Marchais Museum of Tibetan Art ;aNew York :bOxford University Press,c1996. axix, 295 p. :bill. (some col.) ;c29 cm. aIncludes bibliographical references (p. 277-284) and index.20aJacques Marchais Museum of Tibetan ArtxCatalogs.0http://id.loc.gov/authorities/names/n950664180http://viaf.org/viaf/sourceID/LC|n950664180/resolver/wikidata/lc/n95066418 0aArt, TibetanxCatalogs.0http://id.loc.gov/authorities/subjects/sh850079240/resolver/wikidata/lc/sh85007924 0aTantric-Buddhist artzChinazTibet Autonomous RegionxCatalogs.0http://id.loc.gov/authorities/subjects/sh850079190/resolver/wikidata/lc/sh85007919 0aArt, TibetanzChinaxCatalogs.0http://id.loc.gov/authorities/subjects/sh850079240/resolver/wikidata/lc/sh85007924 0aTantric-Buddhist artzChinaxCatalogs.0http://id.loc.gov/authorities/subjects/sh850079190/resolver/wikidata/lc/sh85007919 0aArt, TibetanzMongoliaxCatalogs.0http://id.loc.gov/authorities/subjects/sh850079240/resolver/wikidata/lc/sh85007924 0aTantric-Buddhist artzMongoliaxCatalogs.0http://id.loc.gov/authorities/subjects/sh850079190/resolver/wikidata/lc/sh85007919 0aArtzNew York (State)zNew YorkxCatalogs.0http://id.loc.gov/authorities/subjects/sh20071013790/resolver/wikidata/lc/sh2007101379 0aStaten Island (New York, N.Y.)1 aLipton, Barbara.0http://id.loc.gov/authorities/names/n842246210http://viaf.org/viaf/sourceID/LC|n842246210/resolver/wikidata/lc/n842246211 aRagnubs, Nima Dorjee.0http://id.loc.gov/authorities/names/n950664260http://viaf.org/viaf/sourceID/LC|n950664260/resolver/wikidata/lc/n950664260 bMUGcbosshN8193.3.T36iC628 1996822613336000001161 a.b21306023 amugarb1c961223dmeaf-01358cam 22002658a 45000010018000000050017000180080039000350100013000740200070000870350093001570400018002500430012002680490009002800500021002891000175003102450081004852600034005663000032006005040051006326000175006836510138008588520051009969070015010479990030010629917693729000116120150312090143.0121103s1996 nyua b 001 0 eng a95036732 a0415022096 (hardcover)0http://www.isbnsearch.org/isbn/0415022096 a(OCoLC)329241030http://www.worldcat.org/oclc/329241030/resolver/wikidata/oclc/32924103 aDLCcDLCdGZM amm----- aBOSS00aDF568b.E83 19961 aEvans, J. A. S.q(James Allan Stewart),d1931-0http://id.loc.gov/authorities/names/n810571680http://viaf.org/viaf/sourceID/LC|n810571680/resolver/wikidata/lc/n8105716814aThe age of Justinian :bthe circumstances of imperial power /cJ.A.S. Evans. aNew York :bRoutledge,c1996. ax, 345 p. :bill. ;c23 cm. aIncludes bibliographical references and index.00aJustinianbI,cEmperor of the East,d483?-565.0http://id.loc.gov/authorities/names/n790322020http://viaf.org/viaf/sourceID/LC|n790322020/resolver/wikidata/lc/n79032202 0aByzantine EmpirexHistoryyJustinian I, 527-565.0http://id.loc.gov/authorities/subjects/sh850184870/resolver/wikidata/lc/sh850184870 bMUGcbosshDF568i.E83 1996822613173790001161 a.b21297368 amugarb1c970109dmeaf-01099cam 22002418a 45000010018000000050017000180080039000350100013000740200058000870350093001450400013002380490009002510500026002601000160002862450103004462600048005493000024005975000020006216500115006418520056007569070015008129990030008279917698904000116120150312090142.0121103s1996 nyu 001 0 eng a96004976 a01950831720http://www.isbnsearch.org/isbn/0195083172 a(OCoLC)341500330http://www.worldcat.org/oclc/341500330/resolver/wikidata/oclc/34150033 aDLCcDLC aBOSS00aRC569.5.B64bP48 19961 aPhillips, Katherine A.0http://id.loc.gov/authorities/names/no20091677930http://viaf.org/viaf/sourceID/LC|no20091677930/resolver/wikidata/lc/no200916779314aThe broken mirror :bunderstanding and treating body dysmorphic disorder /cKatherine A. Phillips. aNew York :bOxford University Press,c1996. ax, 357 p. ;c24 cm. aIncludes index. 0aBody dysmorphic disorder.0http://id.loc.gov/authorities/subjects/sh960002570/resolver/wikidata/lc/sh960002570 bMUGcbosshRC569.5.B64iP48 1996822613335160001161 a.b21303009 amugarb1c961203dmeaf-02686cam 22003494a 45000010018000000050017000180080039000350100016000740200083000900200089001730200078002620200084003400350096004240350096005200400044006160490009006600500022006691000143006912450114008342500012009482600043009603000024010035040066010275050778010936500132018716500127020036500101021308520051022319070014022829940011022969990029023079917690707000116120150312090140.0121103s2007 nyu b 001 0 eng a20070184 66 a0230600859 (hardcover : alk. paper)0http://www.isbnsearch.org/isbn/0230600859 a9780230600850 (hardcover : alk. paper)0http://www.isbnsearch.org/isbn/9780230600850 a0230600867 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0230600867 a9780230600867 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9780230600867 a(OCoLC)1240362770http://www.worldcat.org/oclc/1240362770/resolver/wikidata/oclc/124036277 a(OCoLC)1240362770http://www.worldcat.org/oclc/1240362770/resolver/wikidata/oclc/124036277 aDLCcDLCdBAKERdBTCTAdC#PdYDXCPdBOS aBOSS00aJZ6387b.G37 20071 aGardner, Hall.0http://id.loc.gov/authorities/names/n930800760http://viaf.org/viaf/sourceID/LC|n930800760/resolver/wikidata/lc/n9308007610aAverting global war :bregional challenges, overextension, and options for American strategy /cHall Gardner. a1st ed. aNew York :bPalgrave Macmillan,c2007. ax, 284 p. ;c25 cm. aIncludes bibliographical references (p. [271]-276) and index.0 aIntroduction : "Crying wolf" once again? -- Triptych of terrorism -- The uncoordinated NATO-EU "double enlargement" : toward the isolation of Russia? -- Iraq : sinking deeper into Mesopotamian quicksand -- Iran : nuclear high tension and Holocaust polemics -- Israel and Palestine fratricide : beyond the "two state solution"? -- An ever-widening zone of conflict, terrorism, and black market activities : from Central Asia to Sub-Saharan Africa -- North Korea : beyond "backdoor" multilateralism -- China and blue-water dreams : toward a Sino-Russian alliance? -- Three dimensions of "Montezuma's revenge" : Hugo Chávez's Bolivarian vision, "war on drugs," and "illegal" immigration -- American hypertrophy and strategic options : toward a geostrategy for global peace aWarxPreventionxInternational cooperation.0http://id.loc.gov/authorities/subjects/sh851451140/resolver/wikidata/lc/sh8514511 aConflict managementvCase studies.0http://id.loc.gov/authorities/subjects/sh20081177310/resolver/wikidata/lc/sh200811773 aGeopolitics.0http://id.loc.gov/authorities/subjects/sh850541920/resolver/wikidata/lc/sh8505419 bMUGcbosshJZ6387i.G37 200782261307226000116 a.b2753811 aC0bBO amugarb1c080102dmeaf02122cam 22003494a 45000010018000000050017000180080039000350100016000740200084000900200078001740350096002520350096003480400049004440430012004930490009005050500021005141000149005352450065006842600051007493000025008005040054008255050206008796000149010856500122012346500102013566500105014586510101015638520051016649070015017159940012017309990030017429917690239000116120150312090135.0121103s2007 azu b 000 0deng a20070255 08 a9780816525768 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9780816525768 a0816525765 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0816525765 a(OCoLC)1457329110http://www.worldcat.org/oclc/1457329110/resolver/wikidata/oclc/145732911 a(OCoLC)1457329110http://www.worldcat.org/oclc/1457329110/resolver/wikidata/oclc/145732911 aDLCcDLCdBAKERdBTCTAdC#PdYDXCPdIXAdBOS an-us--- aBOSS00aHQ503b.G22 20071 aGaard, Greta Claire.0http://id.loc.gov/authorities/names/n906876540http://viaf.org/viaf/sourceID/LC|n906876540/resolver/wikidata/lc/n9068765414aThe nature of home :btaking root in a place /cGreta Gaard. aTucson :bUniversity of Arizona Press,cc2007. aix, 213 p. ;c23 cm. aIncludes bibliographical references (p. 207-209).0 aLooking for home -- Women/water -- Family of land -- Whatcom Creek -- Wilderness -- Climbing -- Silver Lake -- Explosion -- Body, midlife -- Food and shelter -- The dance -- Epilogue -- The headwaters.10aGaard, Greta Claire.0http://id.loc.gov/authorities/names/n906876540http://viaf.org/viaf/sourceID/LC|n906876540/resolver/wikidata/lc/n90687654 0aHomexPsychological aspects.0http://id.loc.gov/authorities/subjects/sh20091264860/resolver/wikidata/lc/sh2009126486 0aEcofeminism.0http://id.loc.gov/authorities/subjects/sh910016010/resolver/wikidata/lc/sh91001601 0aSocial justice.0http://id.loc.gov/authorities/subjects/sh851239690/resolver/wikidata/lc/sh85123969 0aWest (U.S.)0http://id.loc.gov/authorities/subjects/sh851461400/resolver/wikidata/lc/sh851461400 bMUGcbosshHQ503i.G22 2007822613095730001161 a.b2754476x aC0bBOS amugarb1c080116dmeaf-01754cam 22003494a 45000010018000000050017000180080039000350100013000740200071000870350093001580400023002510420008002740430012002820490009002940500025003031000023003282450089003512460030004402600056004703000059005265000045005855040064006306500108006946500120008026500122009226500113010446510135011578520055012929070015013479940012013629990030013749917703064000116120150312090135.0121103s1999 cauabf b s001 0 eng a99013924 a0520220056 (alk. paper)0http://www.isbnsearch.org/isbn/0520220056 a(OCoLC)407443870http://www.worldcat.org/oclc/407443870/resolver/wikidata/oclc/40744387 aDLCcDLCdC#PdBOS apcc aa-cb--- aBOSS00aHV8599.C16bC48 19991 aChandler, David P.10aVoices from S-21 :bterror and history in Pol Pot's secret prison /cDavid Chandler.3 aVoices from S-twenty-one. aBerkeley :bUniversity of California Press,cc1999. axiii, 238 p., [14] p. of plates :bill., map ;c24 cm. a"A Philip E. Lilienthal book"--Half t.p. aIncludes bibliographical references (p. 207-232) and index. 0aTorturezCambodia.0http://id.loc.gov/authorities/subjects/sh851361900/resolver/wikidata/lc/sh85136190 0aPolitical prisonerszCambodia.0http://id.loc.gov/authorities/subjects/sh851044220/resolver/wikidata/lc/sh85104422 0aPolitical persecutionzCambodia.0http://id.loc.gov/authorities/subjects/sh851043760/resolver/wikidata/lc/sh85104376 0aGenocidezCambodia.0http://id.loc.gov/authorities/subjects/sh20091257490/resolver/wikidata/lc/sh2009125749 0aCambodiaxPolitics and governmenty1975-1979.0http://id.loc.gov/authorities/subjects/sh850190950/resolver/wikidata/lc/sh850190950 bMUGcbosshHV8599.C16iC48 1999822613448940001161 a.b22609854 aE0bBOS amugarb1c000110dmeaf-01888cam 2200349 a 45000010018000000050017000180080039000350100016000740200070000900200076001600200065002360200071003010350093003720350093004650400047005580420008006050430012006130490009006250500025006341000150006592450067008092600047008763000042009235040066009655050209010316500135012406510051013758520055014269070015014819940012014969990030015089917673080000116120150312090134.0121103s2007 njuab b 001 0 eng a20060043 59 a159221472X (hardcover)0http://www.isbnsearch.org/isbn/159221472X a9781592214723 (hardcover)0http://www.isbnsearch.org/isbn/9781592214723 a1592214738 (pbk.)0http://www.isbnsearch.org/isbn/1592214738 a9781592214730 (pbk.)0http://www.isbnsearch.org/isbn/9781592214730 a(OCoLC)638078930http://www.worldcat.org/oclc/638078930/resolver/wikidata/oclc/63807893 a(OCoLC)638078930http://www.worldcat.org/oclc/638078930/resolver/wikidata/oclc/63807893 aDLCcDLCdBTCTAdYDXdYDXCPdIAYdOBEdBOS apcc af-nr--- aBOSS00aDT515.836b.U24 20071 aUchendu, Egodi.0http://id.loc.gov/authorities/names/n20060093040http://viaf.org/viaf/sourceID/LC|n20060093040/resolver/wikidata/lc/n200600930410aWomen and conflict in the Nigerian civil war /cEgodi Uchendu. aTrenton, NJ :bAfrica World Press,cc2007. axviii, 307 p. :bill., maps ;c22 cm. aIncludes bibliographical references (p. [281]-296) and index.0 aIntroduction -- Anioma and its people -- From independence to war -- Anioma as a theater of war -- Women during the occupation -- Women and surviving the war -- Handling post-war challenges -- Conclusion. 0aWomen, IgboxSocial conditionsy20th century.0http://id.loc.gov/authorities/subjects/sh851473750/resolver/wikidata/lc/sh85147375 0aNigeriaxHistoryyCivil War, 1967-1970xWomen.0 bMUGcbosshDT515.836i.U24 2007822612482870001161 a.b27297330 aC0bBOS amugarb1c070611dmeaf-01628pam 22003254a 45000010018000000050017000180080039000350100013000740150015000870200083001020350093001850400023002780420008003010490009003090500023003181000144003412450089004852600042005743000035006165000023006515040066006746500109007406500116008496500123009656500104010888520053011929070015012459940012012609990030012729917681157000116120150312090132.0121103s2000 maua b 001 0 eng a99030174 aGBA0-26186 a0262024675 (hardcover : alk. paper)0http://www.isbnsearch.org/isbn/0262024675 a(OCoLC)414316450http://www.worldcat.org/oclc/414316450/resolver/wikidata/oclc/41431645 aDLCcDLCdUKMdBOS apcc aBOSS00aBD418.3b.B63 20001 aBogdan, Radu J.0http://id.loc.gov/authorities/names/n801311380http://viaf.org/viaf/sourceID/LC|n801311380/resolver/wikidata/lc/n8013113810aMinding minds :bevolving a reflexive mind by interpreting others /cRadu J. Bogdan. aCambridge, Mass. :bMIT Press,c2000. axiii, 215 p. :bill. ;c24 cm. a"A Bradford book." aIncludes bibliographical references (p. [199]-212) and index. 0aPhilosophy of mind.0http://id.loc.gov/authorities/subjects/sh890043400/resolver/wikidata/lc/sh89004340 0aSelf-knowledge, Theory of.0http://id.loc.gov/authorities/subjects/sh851197660/resolver/wikidata/lc/sh85119766 0aOther minds (Theory of knowledge)0http://id.loc.gov/authorities/subjects/sh850960280/resolver/wikidata/lc/sh85096028 0aMetacognition.0http://id.loc.gov/authorities/subjects/sh850840240/resolver/wikidata/lc/sh850840240 bMUGcbosshBD418.3i.B63 2000822612789710001161 a.b22662510 aE0bBOS amugarb1c000420dmeaf-01474cam 22003134a 45000010018000000050017000180080039000350100013000740150015000870200066001020200066001680350093002340400028003270420008003550490009003630500022003721000143003942450050005372600053005873000025006405040051006656500114007166500105008306500116009358520052010519070015011039940012011189990030011309917702992000116120150312090132.0121103s1999 nyu b 001 0 eng a99023804 aGB99-W0369 a0801436567 (cloth)0http://www.isbnsearch.org/isbn/0801436567 a0801486238 (paper)0http://www.isbnsearch.org/isbn/0801486238 a(OCoLC)412849700http://www.worldcat.org/oclc/412849700/resolver/wikidata/oclc/41284970 aDLCcDLCdUKMdC#PdBOS apcc aBOSS00aJZ1318b.Y68 19991 aYoung, Oran R.0http://id.loc.gov/authorities/names/n790954670http://viaf.org/viaf/sourceID/LC|n790954670/resolver/wikidata/lc/n7909546710aGovernance in world affairs /cOran R. Young. aIthaca, N.Y. :bCornell University Press,c1999. axv, 224 p. ;c24 cm. aIncludes bibliographical references and index. 0aInternational relations.0http://id.loc.gov/authorities/subjects/sh850674350/resolver/wikidata/lc/sh85067435 0aWorld politics.0http://id.loc.gov/authorities/subjects/sh851482160/resolver/wikidata/lc/sh85148216 0aInternational cooperation.0http://id.loc.gov/authorities/subjects/sh850673850/resolver/wikidata/lc/sh850673850 bMUGcbosshJZ1318i.Y68 1999822613466630001161 a.b2260148x aE0bBOS amugarb1c000113dmeaf-02182pam 22003614a 45000010018000000050017000180080039000350100016000740200078000900350093001680400045002610420008003060430030003140490009003440500022003531000149003752450084005242600074006083000035006825040041007176100160007586100168009186500123010866500141012096500140013506500122014906500050016126500049016628520052017119070015017639940012017789990030017909917672846000116120150312090129.0121103s2005 caua b 000 0 eng a20050230 31 a0833038427 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/0833038427 a(OCoLC)612612670http://www.worldcat.org/oclc/612612670/resolver/wikidata/oclc/61261267 aDLCcDLCdYDXdSCTdYUSdBAKERdTTUdBOS apcc aa-af---an-us---aa-iq--- aBOSS00aV874.3b.L43 20051 aLambeth, Benjamin S.0http://id.loc.gov/authorities/names/n801319730http://viaf.org/viaf/sourceID/LC|n801319730/resolver/wikidata/lc/n8013197310aAmerican carrier air power at the dawn of a new century /cBenjamin S. Lambeth. aSanta Monica, CA :bRAND, National Defense Research Institute,c2005. axxiv, 113 p. :bill. ;c23 cm. aIncludes bibliographical references.10aUnited States.bNavyxAviation.0http://id.loc.gov/authorities/names/n790590510http://viaf.org/viaf/sourceID/LC|n790590510/resolver/wikidata/lc/n7905905110aUnited States.bMarine CorpsxAviation.0http://id.loc.gov/authorities/names/n780953280http://viaf.org/viaf/sourceID/LC|n780953280/resolver/wikidata/lc/n78095328 0aAircraft carrierszUnited States.0http://id.loc.gov/authorities/subjects/sh850027360/resolver/wikidata/lc/sh85002736 0aAfghan War, 2001-xAerial operations, American.0http://id.loc.gov/authorities/subjects/sh20040044600/resolver/wikidata/lc/sh2004004460 0aAfghan War, 2001-xNaval operations, American.0http://id.loc.gov/authorities/subjects/sh20040044600/resolver/wikidata/lc/sh2004004460 0aWar on Terrorism, 2001-2009.0http://id.loc.gov/authorities/subjects/sh20010001480/resolver/wikidata/lc/sh2001000148 0aIraq War, 2003-xAerial operations, American. 0aIraq War, 2003-xNaval operations, American.0 bMUGcbosshV874.3i.L43 2005822612495430001161 a.b25979620 aC0bBOS amugarb1c060303dmeaf-02352cam 22003734a 45000010018000000050017000180080039000350100016000740200084000900200078001740200085002520200079003370350096004160350096005120400044006080430012006520490009006640500024006731000142006972450078008392600058009173000051009756000142010266300039011686500133012076500148013406500142014886500123016306500114017538520054018679070015019219940012019369990030019489917692597000116120150312090129.0121103s2007 mauaf s000 0aeng a20070202 04 a9781558496217 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/9781558496217 a1558496211 (pbk. : alk. paper)0http://www.isbnsearch.org/isbn/1558496211 a9781558496200 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/9781558496200 a1558496203 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/1558496203 a(OCoLC)1349902440http://www.worldcat.org/oclc/1349902440/resolver/wikidata/oclc/134990244 a(OCoLC)1349902440http://www.worldcat.org/oclc/1349902440/resolver/wikidata/oclc/134990244 aDLCcDLCdBAKERdBTCTAdC#PdYDXCPdBOS an-us-ma aBOSS00aHQ75.4.H65bA3 20071 aHoffman, Amy.0http://id.loc.gov/authorities/names/n960852190http://viaf.org/viaf/sourceID/LC|n960852190/resolver/wikidata/lc/n9608521913aAn army of ex-lovers :bmy life at the Gay community news /cAmy Hoffman. aAmherst :bUniversity of Massachusetts Press,cc2007. axvi, 166 p., 10 p. of plates :bill. ;c24 cm.10aHoffman, Amy.0http://id.loc.gov/authorities/names/n960852190http://viaf.org/viaf/sourceID/LC|n960852190/resolver/wikidata/lc/n9608521900aGay community news (Boston, Mass.) 0aLesbianszMassachusettszBostonvBiography.0http://id.loc.gov/authorities/subjects/sh850761600/resolver/wikidata/lc/sh85076160 0aWomen newspaper editorszMassachusettszBostonvBiography.0http://id.loc.gov/authorities/subjects/sh930012980/resolver/wikidata/lc/sh93001298 0aNewspaper editorszMassachusettszBostonvBiography.0http://id.loc.gov/authorities/subjects/sh900033230/resolver/wikidata/lc/sh90003323 0aGay presszMassachusettszBoston.0http://id.loc.gov/authorities/subjects/sh940089230/resolver/wikidata/lc/sh94008923 0aGay liberation movement.0http://id.loc.gov/authorities/subjects/sh850535800/resolver/wikidata/lc/sh850535800 bMUGcbosshHQ75.4.H65iA3 2007822613142290001161 a.b27538072 aC0bBOS amugarb1c080102dmeaf-02218pam 22003374a 45000010018000000050017000180080039000350100016000740200071000900200077001610350096002380350096003340400044004300430012004740490009004860500024004951000157005192450099006762600069007753000034008444400057008785040064009355050414009996500126014136500124015396510106016638520054017699070015018239940012018389990030018509917691392000116120150312090129.0121103s2007 enkb b 001 0 eng a20070254 99 a0230555268 (alk. paper)0http://www.isbnsearch.org/isbn/0230555268 a9780230555266 (alk. paper)0http://www.isbnsearch.org/isbn/9780230555266 a(OCoLC)1453965950http://www.worldcat.org/oclc/1453965950/resolver/wikidata/oclc/145396595 a(OCoLC)1453965950http://www.worldcat.org/oclc/1453965950/resolver/wikidata/oclc/145396595 aDLCcDLCdYDXdBAKERdBTCTAdYDXCPdBOS af-za--- aBOSS00aTN446.Z33bB88 20071 aButler, L. J.q(Lawrence J.)0http://id.loc.gov/authorities/names/n970881610http://viaf.org/viaf/sourceID/LC|n970881610/resolver/wikidata/lc/n9708816110aCopper empire :bmining and the colonial state in Northern Rhodesia, c.1930-64 /cL.J. Butler. aBasingstoke, Hampshire ;aNew York :bPalgrave Macmillan,c2007. axii, 426 p. :bmaps ;c23 cm. 0aCambridge imperial and post-colonial studies series. aIncludes bibliographical references (p. 395-412) and index.0 aThe colonial state and the development of the Copperbelt -- Wartime mobilisation -- The post-war commodity boom (1946-1953) -- The debate on controlling the mining industry (1939-1952) -- The copperbelt and the Central African Federation (1949-1957) -- The demise of the Federation -- The mining industry and Zambian independence -- Postscript: Northern Rhodesian copper mining: the prospects at independence. 0aCopper mines and miningzZambia.0http://id.loc.gov/authorities/subjects/sh20090016140/resolver/wikidata/lc/sh2009001614 0aCopper industry and tradezZambia.0http://id.loc.gov/authorities/subjects/sh850323660/resolver/wikidata/lc/sh85032366 0aZambiaxHistory.0http://id.loc.gov/authorities/subjects/sh851496020/resolver/wikidata/lc/sh851496020 bMUGcbosshTN446.Z33iB88 2007822613128320001161 a.b27542749 aC0bBOS amugarb1c080125dmeaf-01342pam 22002894a 45000010018000000050017000180080039000350100016000740150015000900200079001050350093001840400023002770420008003000490009003080500022003171000143003392450084004822600059005663000026006255040066006516500117007176500109008348520052009439070015009959940012010109990030010229917683687000116120150312090129.0121103s2002 nju b 001 0 eng a20020703 74 aGBA2-55588 a0691096082 (cloth : alk. paper)0http://www.isbnsearch.org/isbn/0691096082 a(OCoLC)497193480http://www.worldcat.org/oclc/497193480/resolver/wikidata/oclc/49719348 aDLCcDLCdYDXdUKM apcc aBOSS00aBJ1401b.N45 20021 aNeiman, Susan.0http://id.loc.gov/authorities/names/n910620590http://viaf.org/viaf/sourceID/LC|n910620590/resolver/wikidata/lc/n9106205910aEvil in modern thought :ban alternative history of philosophy /cSusan Neiman. aPrinceton, N.J. :bPrinceton University Press,cc2002. axii, 358 p. ;c24 cm. aIncludes bibliographical references (p. [337]-343) and index. 0aGood and evilxHistory.0http://id.loc.gov/authorities/subjects/sh20091259890/resolver/wikidata/lc/sh2009125989 0aPhilosophy, Modern.0http://id.loc.gov/authorities/subjects/sh851009600/resolver/wikidata/lc/sh851009600 bMUGcbosshBJ1401i.N45 2002822612840710001161 a.b24452415 aE0bBOS amugarb1c021220dmeaf-deprecate.t100644000765000024 172014137142137 20743 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/tuse strict; use warnings; use Test::More; use Test::Warnings ':all'; use Catmandu::Importer::MARC; use Catmandu::Exporter::MARC; # USMARC as alias for ISO my $importer; like( warning { $importer = Catmandu::Importer::MARC->new( file => "t/camel.mrc", type => "USMARC" ) }, qr/is deprecated/i, 'deprecation warning importer'); ok($importer, "create importer USMARC"); my $records = $importer->to_array(); ok( @$records == 10, "import records" ); my $xml = ''; my $exporter; like( warning { $exporter = Catmandu::Exporter::MARC->new( file => \$xml, type => "USMARC" ) }, qr/is deprecated/i, 'deprecation warning exporter'); ok($exporter, "create exporter USMARC"); $exporter->add({ _id => '1' , record => [ ['001', undef, undef, '_', 'rec001'], ['100', ' ', ' ', 'a', 'Davis, Miles' , 'c' , 'Test'], ] }); ok($xml =~ /^00080 2200049 4500001000700000100002300007rec001 aDavis, MilescTest$/, "export records"); done_testing();rug01.aleph100644000765000024 76514137142137 20563 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t000000002 FMT L BK 000000002 LDR L 00000nam^a2200301^i^4500 000000002 001 L 000000002 000000002 008 L 050601s1921^^^^xx^||||||||||||||^||dut^^ 000000002 24510 L $$aCatmandu Test 000000002 650 0 L $$aPerl 000000002 650 0 L $$aMARC$$aMARC2 000000002 650 0 L $$a加德滿都 000000003 FMT L BK 000000003 LDR L 00000nam^a2200301^i^4500 000000003 001 L 000000003 000000003 24510 L $$aCatmandu Test 000000003 650 0 L $$aPerl 000000003 650 0 L $$aMARC$$aMARC2 000000003 650 0 L $$a加德滿都 sample1.lif100644000765000024 27414137142137 20643 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/tLDR00180nam 22 2 4500^ 008891207s19xx xxu 00010 eng d^ 040 _cIMchF^ 245 0_aAll about whales.^ 260 _bHoliday,_c1987.^ 300 _a[ ] p.^ 900 _aALL^ 952 _a20571_cR_dALL^` inline-fix.t100644000765000024 652714137142137 21063 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/tuse strict; use warnings; use Catmandu::Util; use Test::More; use Catmandu::Fix::Inline::marc_map qw(marc_map); use Catmandu::Fix::Inline::marc_add qw(marc_add); use Catmandu::Fix::Inline::marc_set qw(marc_set); use Catmandu::Fix::Inline::marc_remove qw(marc_remove); use Catmandu::Importer::JSON; my $importer = Catmandu::Importer::JSON->new( file => 't/old_new.json' ); my $fixer = Catmandu::Fix->new(fixes => [ q|add_field(my.deep.field,foo)|, q|add_field(my.deep.array.$append,red)|, q|add_field(my.deep.array.$append,green)|, q|add_field(my.deep.array.$append,blue)|, ]); my $records = $fixer->fix($importer)->to_array; ok(@$records == 2 , "Found 2 records"); { is scalar marc_map($records->[0],'245a'), q|ActivePerl with ASP and ADO /|, q|marc_map(245a)|; is scalar marc_map($records->[0],'001') , q|fol05731351| , q|marc_map(001)|; ok ! defined(scalar marc_map($records->[0],'191')) , q|marc_map(191) not defined|; ok ! defined(scalar marc_map($records->[0],'245x')) , q|marc_map(245x) not defined|; } { my @res = marc_map($records->[0],'630'); is_deeply \@res , [ 'Active server pages.' , 'ActiveX.' ] , q|marc_map(630) as array|; my $res = marc_map($records->[0],'630'); is $res , 'Active server pages.ActiveX.' , q|marc_map(630) as string|; my $res2 = marc_map($records->[0],'630', -join => "; "); is $res2 , 'Active server pages.; ActiveX.' , q|marc_map(630) as string joined|; } { my $rec = marc_add($records->[0],'900', a => 'test'); is scalar marc_map($rec,'900a'), q|test|, q|marc_add(900)|; } { my $rec = marc_add($records->[0],'901', a => '$.my.deep.field'); is scalar marc_map($rec,'901a'), q|foo|, q|marc_add(901)|; } { my $rec = marc_add($records->[0],'902', a => '$.my.deep.array'); is scalar marc_map($rec,'902a'), q|redgreenblue|, q|marc_add(902)|; } { my $rec = marc_set($records->[0],'010b', 'test'); is scalar marc_map($rec,'010b'), q|test|, q|marc_set(010)|; } { my $rec = marc_set($records->[0],'010b', '$.my.deep.field'); is scalar marc_map($rec,'010b'), q|foo|, q|marc_set(010)|; } { my $rec = marc_remove($records->[0],'900'); ok ! defined scalar marc_map($rec,'900a') , q|marc_map(900) removed|; } { my $f050 = marc_map($records->[0],'050ba',-pluck=>1); is $f050 , "M33 2000QA76.73.P22" , q|pluck test|; } { my $f260c = marc_map($records->[0],'260c',-value=>'OK'); is $f260c , "OK" , q|value test|; } { my $f260h = marc_map($records->[0],'260h',-value=>'BAD'); ok ! $f260h , q|value test|; } { my @arr = marc_map($records->[0],'245a/0-3',-split=>1); is $arr[0][0] , q|Acti|; } { my @arr = marc_map($records->[0],'630',-split=>1); ok @arr == 2; is ref($arr[0]) , 'ARRAY' , 'got an array of arrays'; } { my @arr = marc_map($records->[0],'630',-split=>1, '-nested_arrays' => 0); ok @arr == 2; is ref($arr[0]) , '' , 'got an array of strings'; } { my @arr = marc_map($records->[1],'020a',-split=>1); ok @arr == 2; } { my @arr = marc_map($records->[1],'300bxa', -split=>1 , -pluck=>1); is_deeply \@arr , [[ 'ill. ;' , undef , 'xxi, 289 p. :', ]] , 'marc_map(300bxa, split:1 , pluck: 1)'; } { my @arr = marc_map($records->[1],'630xa', -split=>1 , -pluck=>1); is_deeply \@arr , [ [ undef , 'Active server pages.', ] , [ undef, 'ActiveX.' ] , ] , 'marc_map(630xa, split:1 , pluck:1)'; } done_testing; inlineable.t100644000765000024 476214137142137 21122 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/tuse strict; use warnings; use Catmandu::Util; use Test::More tests => 16; use Catmandu::Fix::marc_map as => 'marc_map'; use Catmandu::Fix::marc_add as => 'marc_add'; use Catmandu::Fix::marc_set as => 'marc_set'; use Catmandu::Fix::marc_remove as => 'marc_remove'; use Catmandu::Fix::marc_xml as => 'marc_xml'; use Catmandu::Importer::JSON; my $importer = Catmandu::Importer::JSON->new( file => 't/old_new.json' ); my $fixer = Catmandu::Fix->new(fixes => [ q|add_field(my.deep.field,foo)|, q|add_field(my.deep.array.$append,red)|, q|add_field(my.deep.array.$append,green)|, q|add_field(my.deep.array.$append,blue)|, ]); my $records = $fixer->fix($importer)->to_array; ok(@$records == 2 , "Found 2 records"); { is marc_map($records->[0],'245a','title')->{title}, q|ActivePerl with ASP and ADO /|, q|marc_map(245a)|; is marc_map($records->[0],'001','id')->{id} , q|fol05731351| , q|marc_map(001)|; ok ! defined(scalar marc_map($records->[0],'191','test')->{test}) , q|marc_map(191) not defined|; ok ! defined(scalar marc_map($records->[0],'245x','test')->{test}) , q|marc_map(245x) not defined|; } { my $res = marc_map($records->[0],'630','test.$append')->{test}; ok(Catmandu::Util::is_array_ref($res), q|marc_map(630)|); } { marc_add($records->[0],'900', a => 'test'); is scalar marc_map($records->[0],'900a','test')->{test}, q|test|, q|marc_add(900)|; } { marc_add($records->[0],'901', a => '$.my.deep.field'); is scalar marc_map($records->[0],'901a','test2')->{test2}, q|foo|, q|marc_add(901)|; } { marc_add($records->[0],'902', a => '$.my.deep.array'); is scalar marc_map($records->[0],'902a','test3')->{test3}, q|redgreenblue|, q|marc_add(902)|; } { marc_set($records->[0],'010b', 'test'); is scalar marc_map($records->[0],'010b','test4')->{test4}, q|test|, q|marc_set(010)|; } { marc_set($records->[0],'010b', '$.my.deep.field'); is scalar marc_map($records->[0],'010b','test5')->{test5}, q|foo|, q|marc_set(010)|; } { marc_remove($records->[0],'900'); ok ! defined scalar marc_map($records->[0],'900a','test6')->{test6} , q|marc_map(900) removed|; } { my $f050 = marc_map($records->[0],'050ba','test7',-pluck=>1)->{test7}; is $f050 , "M33 2000QA76.73.P22" , q|pluck test|; } { my $f260c = marc_map($records->[0],'260c','test8',-value=>'OK')->{test8}; is $f260c , "OK" , q|value test|; } { my $f260h = marc_map($records->[0],'260h','test9',-value=>'BAD')->{test9}; ok ! $f260h , q|value test|; } { my $xml = marc_xml($records->[0],'record')->{record}; like $xml , qr/.*xmlns.*/ , q|marc_xml|; } marc_spec2.t100644000765000024 114214137142137 21023 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t#!perl use strict; use warnings; use Test::More; use Catmandu; note " --- ".'blahmarc_spec(...{^1=\1}{^2=\0} indicators10: "Cross-platform Perl /Eric F. Johnson."'; { my $importer = Catmandu->importer( 'MARC', file => 't/camel9.mrc', type => 'ISO', fix => 'marc_spec("...{^1=\1}{^2=\0}", indicators10.$append); retain_field(indicators10)' ); my $record = $importer->first; is_deeply $record->{indicators10}, ['Cross-platform Perl /Eric F. Johnson.'], q|fix: marc_spec('...{^1=\1}{^2=\0}', indicators10.$append);|; } done_testing; old_new.json100644000765000024 375714137142137 21160 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t{"record":[["FMT"," "," ","_","BK"],["LDR"," "," ","_","00755cam 22002414a 4500"],["001"," "," ","_","fol05731351"],["003"," "," ","_","IMchF"],["005"," "," ","_","20000613133448.0"],["008"," "," ","_","000107s2000 nyua 001 0 eng"],["010"," "," ","a"," 00020737"],["020"," "," ","a","0471383147 (paper/cd-rom : alk. paper)"],["040"," "," ","a","DLC","c","DLC","d","DLC"],["042"," "," ","a","pcc"],["050","0","0","a","QA76.73.P22","b","M33 2000"],["082","0","0","a","005.13/3","2","21"],["100","1"," ","a","Martinsson, Tobias,","d","1976-"],["245","1","0","a","ActivePerl with ASP and ADO /","c","Tobias Martinsson."],["260"," "," ","a","New York :","b","John Wiley & Sons,","c","2000."],["300"," "," ","a","xxi, 289 p. :","b","ill. ;","c","23 cm. +","e","1 computer laser disc (4 3/4 in.)"],["500"," "," "],["650"," ","0","a","Perl (Computer program language)"],["630","0","0","a","Active server pages."],["630","0","0","a","ActiveX."]],"_id":"000000000"} {"_id":"000000001","record":[["FMT"," "," ","_","BK"],["LDR"," "," ","_","00755cam 22002414a 4500"],["001"," "," ","_","fol05731351"],["003"," "," ","_","IMchF"],["005"," "," ","_","20000613133448.0"],["008"," "," ","_","000107s2000 nyua 001 0 eng"],["010"," "," ","a"," 00020737"],["020"," "," ","a","0471383147 (paper/cd-rom : alk. paper)"],["020"," "," ","a","1234567890","a","9876543210"],["040"," "," ","a","DLC","c","DLC","d","DLC"],["042"," "," ","a","pcc"],["050","0","0","a","QA76.73.P22","b","M33 2000"],["082","0","0","a","005.13/3","2","21"],["100","1"," ","a","Martinsson, Tobias,","d","1976-"],["245","1","0","a","ActivePerl with ASP and ADO /","c","Tobias Martinsson."],["260"," "," ","a","New York :","b","John Wiley & Sons,","c","2000."],["300"," "," ","a","xxi, 289 p. :","b","ill. ;","c","23 cm. +","e","1 computer laser disc (4 3/4 in.)"],["500"," "," ","a","\"Wiley Computer Publishing.\""],["650"," ","0","a","Perl (Computer program language)"],["630","0","0","a","Active server pages."],["630","0","0","a","ActiveX."]]} code4lib.line100644000765000024 31014137142137 21132 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t00251nas a2200121 c 4500 001 987874829 007 cr|||||||||||| 022 $a 1940-5758 041 $a eng 245 00 $a Code4Lib journal $b C4LJ 246 3 $a C4LJ 362 0 $a 1.2007 - 856 4 $u http://journal.code4lib.org/ marc_spec.fix100644000765000024 376514137142137 21301 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/tmarc_spec('001', my.id) marc_spec('000', my.no.field, value:'nofield') marc_spec('666', my.references.$append) add_field(my.references2.$first, 'first') marc_map('003', my.references2.$append); marc_spec('245', my.title.all) marc_spec('245', my.title.default, value:'the title') marc_spec('650', my.subjects.all) marc_spec('650', my.subjects.joined, join:'###') marc_spec('650', my.append.subjects.$append) marc_spec('650', my.split.subjects, split:1) marc_spec('650', my.append.split.subjects.$append, split:1) marc_spec('...{^1=\1}{^2=\0}', my.fields.indicators10.$append) marc_spec('...{^2=\0}', my.fields.indicators_0, split:1) marc_spec('LDR', my.ldr.all) marc_spec('LDR/0-3', my.firstcharpos.ldr) marc_spec('LDR/#-3', my.lastcharpos.ldr) marc_spec('245$a', my.title.proper) marc_spec('245$a{^1=\1}{^2=\0}', my.title.indicator.proper) marc_spec('245$a/0-1', my.title.charpos) marc_spec('650[1]', my.second.subject) marc_spec('650[#]', my.last.subject) marc_spec('650[0-1]', my.two.split.subjects, split:1) marc_spec('650[#-1]', my.two.join.subjects, join:'###') marc_add('020', 'a', '0491001304', 'a', 'test0491001304', 'q', 'black leather', 'q', 'blue pigskin', 'q', 'easel binding') marc_spec('020$a', my.isbn.number) marc_spec('020$a[0]', my.isbn.numbers) marc_spec('020$q[0]', my.isbn.qual.first) marc_spec('020[0]$q[0]', my.isbn.qual.none) marc_spec('020$q[1]', my.isbn.qual.second) marc_spec('020$q[#]', my.isbn.qual.last) marc_spec('020$q$a', my.isbns.all, split:1) marc_spec('020$q$a', my.isbns.pluck.all, split:1, pluck:1) marc_spec('020$q[#]$a[1]', my.isbn.qual.other, split:1) marc_spec('020$q[#-1]$a[0-1]', my.isbn.qual.range, split:1) marc_spec('020$q[#]/0-4$a[1]/#-0', my.isbn.qual.substring.other, split:1) marc_spec('260[#]$b$a', my.level3.inverted, invert:1) marc_spec('020$a$q[#]', my.level2.inverted, invert:1) marc_spec('020[#]$a$q[#]/1-5', my.level1.inverted, invert:1) marc_spec('020[#]$a$q[0]/1-5$q[1]/1-5$q[2]/1-5', my.multi.level1.inverted, invert:1) marc_spec('008/0', my.nullvalue) Catmandu000755000765000024 014137142137 20216 5ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/tMARC.t100644000765000024 25314137142137 21245 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::MARC'; use_ok $pkg; } require_ok $pkg; done_testing; mapping_rules.t100644000765000024 4145414137142137 21704 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/tuse strict; use warnings; use Test::More; use Catmandu; my $mrc = <<'MRC'; Title / Name A B C D Alpha Beta Gamma X Y Z MRC note 'marc_map(245,title) title: "Title / Name"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(245,title); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, 'Title / Name', 'marc_map(245,title)'; } note 'marc_map(245a,title) title: "Title / "'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(245a,title); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, 'Title / ', 'marc_map(245a,title)'; } note 'marc_map(245$a,title) title: "Title / "'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(245$a,title); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, 'Title / ', 'marc_map(245$a,title)'; } note 'marc_map(245ac,title) title: "Title / Name"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(245ac,title); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, 'Title / Name', 'marc_map(245ac,title)'; } note 'marc_map(245$a$c,title) title: "Title / Name"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(245$a$c,title); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, 'Title / Name', 'marc_map(245$a$c,title)'; } note 'marc_map(245ca,title) title: "Title / Name"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(245ca,title); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, 'Title / Name', 'marc_map(245ca,title)'; } note 'marc_map(245ca,title,pluck:1) title: "NameTitle / "'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(245ca,title,pluck:1); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, 'NameTitle / ', 'marc_map(245ca,title,pluck:1)'; } note 'marc_map(245ca,title,pluck:1,join:" ") title: "NameTitle / "'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(245ca,title,pluck:1,join:" "); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, 'Name Title / ', 'marc_map(245ca,title,pluck:1,join:" ")'; } note 'marc_map(245,title.$append) title: [ "Title / Name" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(245,title.$append); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, ['Title / Name'], 'marc_map(245.$append,title)'; } note 'marc_map(245a,title.$append) title: [ "Title / " ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(245a,title.$append); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, ['Title / '], 'marc_map(245a.$append,title)'; } note 'marc_map(245,title, split:1) title: [ "Title / ", "Name" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(245,title, split:1); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, [ 'Title / ', 'Name' ], 'marc_map(245,title, split:1)'; } note 'marc_map(245, title, split:1, nested_arrays:1) title: [[ "Title / ", "Name" ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(245, title, split:1, nested_arrays:1); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, [ [ 'Title / ', 'Name' ] ], 'marc_map(245, title, split:1, nested_arrays:1)'; } note 'marc_map(500,note) note: "ABCD"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(500,note); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, 'ABCD', 'marc_map(500,note)'; } note 'marc_map(500a,note) note: "ABC"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(500a,note); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, 'ABC', 'marc_map(500a,note)'; } note 'marc_map(500,note.$append) note: [ "ABCD" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => ' marc_map(500,note.$append); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, ['ABCD'], ' marc_map(500,note.$append)'; } note 'marc_map(500a,note.$append) note: [ "ABC" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => ' marc_map(500a,note.$append); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, ['ABC'], ' marc_map(500a,note.$append)'; } note 'marc_map(500,note, split:1) note: [ "A" , "B" , "C" , "D" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(500,note, split:1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, [ 'A', 'B', 'C', 'D' ], 'marc_map(500,note, split:1)'; } note 'marc_map(500a,note, split:1) note: [ "A" , "B" , "C" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(500a,note, split:1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, [ 'A', 'B', 'C' ], 'marc_map(500a,note, split:1)'; } note 'marc_map(500a,note, split:1, nested_arrays:1) note: [[ "A" , "B" , "C" ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(500,note, split:1, nested_arrays:1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, [ [ 'A', 'B', 'C', 'D' ] ], 'marc_map(500,note, split:1, nested_arrays:1)'; } note 'marc_map(500a,note.$append, split:1) note : [[ "A" , "B" , "C" ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(500a,note.$append, split:1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, [ [ 'A', 'B', 'C' ] ], 'marc_map(500a,note.$append, split:1)'; } note 'marc_map(500a,note.$append, split:1, nested_arrays: 1) note : [[[ "A" , "B" , "C" ]]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(500a,note.$append, split:1, nested_arrays: 1) ; retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, [ [ [ 'A', 'B', 'C' ] ] ], 'marc_map(500a,note.$append, split:1, nested_arrays: 1)'; } note 'marc_map(650,subject) subject: "AlphaBetaGamma"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(650,subject); retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, 'AlphaBetaGamma', 'marc_map(650,subject)'; } note 'marc_map(650a,subject) subject: "AlphaBetaGamma"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(650a,subject) ; retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, 'AlphaBetaGamma', 'marc_map(650a,subject)'; } note 'marc_map(650a,subject.$append) subject: [ "Alpha", "Beta" , "Gamma" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(650a,subject.$append); retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, [ 'Alpha', 'Beta', 'Gamma' ], 'marc_map(650a,subject.$append)'; } note 'marc_map(650a,subject, split:1) subject: [ "Alpha", "Beta" , "Gamma" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(650a,subject, split:1); retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, [ 'Alpha', 'Beta', 'Gamma' ], 'marc_map(650a,subject, split:1)'; } note 'marc_map(650a,subject.$append, split:1) subject: [[ "Alpha" , "Beta" , "Gamma" ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(650a,subject.$append, split:1) ; retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, [ [ 'Alpha', 'Beta', 'Gamma' ] ], 'marc_map(650a,subject.$append, split:1) '; } note 'marc_map(650a,subject, split:1, nested_arrays:1) subject: [["Alpha"], ["Beta"] , ["Gamma"]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(650a,subject, split:1, nested_arrays:1); retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, [ ['Alpha'], ['Beta'], ['Gamma'] ], 'marc_map(650a,subject, split:1, nested_arrays:1)'; } note 'marc_map(650a,subject.$append, split:1, nested_arrays:1) subject: [[["Alpha"], ["Beta"] , ["Gamma"]]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(650a,subject.$append, split:1, nested_arrays:1); retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, [ [ ['Alpha'], ['Beta'], ['Gamma'] ] ], 'marc_map(650a,subject.$append, split:1, nested_arrays:1)'; } note 'marc_map(999,local) local: "XYZ"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(999,local); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, 'XYZ', 'marc_map(999,local)'; } note 'marc_map(999a,local) local: "XYZ"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(999a,local); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, 'XYZ', 'marc_map(999a,local)'; } note 'marc_map(999a,local.$append) local: [ "XY", "Z" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(999a,local.$append); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ 'XY', 'Z' ], 'marc_map(999a,local.$append)'; } note 'marc_map(999a,local, split:1) local: [ "X" , "Y", "Z" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(999a,local, split:1); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ 'X', 'Y', 'Z' ], 'marc_map(999a,local, split:1)'; } note 'marc_map(999a,local.$append, split:1) local: [[ "X" , "Y", "Z" ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(999a,local.$append, split:1); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ [ 'X', 'Y', 'Z' ] ], 'marc_map(999a,local.$append, split:1)'; } note 'marc_map(999a,local, split:1, nested_arrays:1) local: [ ["X" , "Y"] , ["Z"] ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(999a,local, split:1, nested_arrays:1); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ [ 'X', 'Y' ], ['Z'] ], 'marc_map(999a,local, split:1, nested_arrays:1) '; } note 'marc_map(999a,local.$append, split:1, nested_arrays:1) local: [[ ["X" , "Y"] , ["Z"] ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_map(650a,local.$append, split:1, nested_arrays:1); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ [ ['Alpha'], ['Beta'], ['Gamma'] ] ], 'marc_map(650a,local.$append, split:1, nested_arrays:1)'; } note 'marc_map(...,all) all: "Title / NameABCDAlphaBetaGammaXYZ"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_remove(LDR); marc_map(...,all); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, 'Title / NameABCDAlphaBetaGammaXYZ', 'marc_map(...,all)'; } note 'marc_map(...a,all) all: "Title / ABCAlphaBetaGammaXYZ"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_remove(LDR); marc_map(...a,all); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, 'Title / ABCAlphaBetaGammaXYZ', 'marc_map(...a,all)'; } note 'marc_map(...a,all.$append) all: [ "Title / " , "ABC", "Alpha" , "Beta" , "Gamma" , "XY", "Z" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_remove(LDR); marc_map(...a,all.$append); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, [ "Title / " , "ABC", "Alpha" , "Beta" , "Gamma" , "XY", "Z" ], 'marc_map(...a,all.$append)'; } note 'marc_map(...a,all, split:1) all: [ "Title / " , "A" , "B" , "C", "Alpha" , "Beta" , "Gamma" , "X" , "Y", "Z" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_remove(LDR); marc_map(...a,all, split:1); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, [ 'Title / ', 'A', 'B', 'C', 'Alpha', 'Beta', 'Gamma', 'X', 'Y', 'Z' ], 'marc_map(...a,all, split:1)'; } note 'marc_map(...a,all, split:1, nested_arrays:1) all: [ ["Title / "] , ["A" , "B" , "C"], ["Alpha"] , ["Beta"] , ["Gamma"] , ["X" , "Y"], ["Z"] ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_remove(LDR); marc_map(...a,all, split:1, nested_arrays:1); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, [ ['Title / '], [ 'A', 'B', 'C' ], ['Alpha'], ['Beta'], ['Gamma'], [ 'X', 'Y' ], ['Z'] ], 'marc_map(...a,all, split:1, nested_arrays:1)'; } done_testing; oschrift_me.mrc100644000765000024 677314137142137 21644 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t03579cam a22003138i 45000010017000000030009000170050017000260060019000430070015000620080041000770200018001180350015001360400013001511100060001642450351002242600037005753000025006125202060006376500027026976500015027246500016027396500010027556500026027657100020027917100034028117750211028457750145030568560064032019789264310032-arFR-PaOEC20201001000000.0a o d i cr || |||m|n||181201s2019 ||| o i|0| 0 ara d a9789264310032 a(FR-PaOEC) aFR-PaOEC2 aOrganisation for Economic Co-operation and Development.10aمنطقة الشرق الأوسط وشمال أفريقيا المتوسطية 2018h[electronic resource]:bالتقييم المرحلي للإصلاحات المتعلقة بالمشاريع الصغيرة والمتوسطة الحجم /cOrganisation for Economic Co-operation and Development, European Union and European Training Foundation aParis :bOECD Publishing,c2019. a148 p. ;c21 x 28cm.3 aيقدم هذا التقرير تحليلاً معمقاً للإصلاحات الرئيسية التي أجريت بين 2014 و2018 التي تهدف إلى تشجيع تنمية المشاريع المتناهية الصغر والصغيرة والمتوسطة الحجم في الجزائر ومصر وإسرائيل والأردن ولبنان والمغرب والأراضي الفلسطينية وتونس. يركز التقرير على خمس مجالات استراتيجية لصياغة سياسات المشاريع الصغيرة والمتوسطة الحجم: تعاريف المشاريع الصغيرة والمتوسطة الحجم والإحصاءات والمؤسسات المتعلقة بها؛ تحسين بيئات العمل للمشاريع الصغيرة والمتوسطة الحجم ورواد الأعمال؛ تعزيز الوصول إلى التمويل؛ رعاية نمو الشركات الناشئة والمشاريع الصغيرة والمتوسطة الحجم؛ وتنمية رأس المال البشري الريادي. يهدف التقرير إلى عرض الممارسات الجيدة والإشارة إلى المناطق التي تحتاج إلى بذل المزيد من الجهود. ويوفر إرشادات قيمة للحكومات ومنظمات القطاع الخاص والهيئات المتعددة الأطراف وغيرها من أصحاب المصلحة لتكثيف الجهود لدعم المشاريع الصغيرة والمتوسطة الحجم كأدوات أساسية لخلق الوظائف والقدرة التنافسية. ويكتسي ذلك أهمية خاصة في منطقة تسعى إلى تعزيز التنوع الاقتصادي وخلق فرص العمل وإشراك الشباب والنساء في الاقتصاد. إن التقرير هو نتيجة لعملية تعاون وثيق بين الحكومات، ومنظمة التعاون والتنمية الاقتصادية، ومؤسسة التدريب الأوروبية والمفوضية الأوروبية 4aFinance and Investment 4aGovernance 4aDevelopment 4aTrade 4aIndustry and Services2 aEuropean Union.2 aEuropean Training Foundation.0 tPolitiques en faveur des PME : Moyen-Orient méditerranéen et Afrique du Nord 2018 : Évaluation intermédiaire des principales réformes en faveur des PMEz9789264307612z9789264308305z9789264308299efre0 tThe Mediterranean Middle East and North Africa 2018: Interim Assessment of Key SME Reformsz9789264304161z9789264306653z9789264306646eeng40aoecd-ilibrary.orguhttps://doi.org/10.1787/9789264310032-arLICENSE-bu_bibs.txt100644000765000024 4456014137142137 21636 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271The file t/bu_bibs.mrc exported from an Alma system was provided by Boston University Library with a CC-BY license. The license text follows below: Attribution 4.0 International ======================================================================= Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC- licensed material, or material used under an exception or limitation to copyright. More considerations for licensors: wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason--for example, because of any applicable exception or limitation to copyright--then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More_considerations for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= Creative Commons Attribution 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part; and b. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication. Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. Catmandu000755000765000024 014137142137 20521 5ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/libMARC.pm100644000765000024 12760514137142137 22014 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandupackage Catmandu::MARC; use Catmandu::Sane; use Catmandu::Util; use Catmandu::Exporter::MARC::XML; use MARC::Spec::Parser; use List::Util; use Memoize; use Carp; use Moo; with 'MooX::Singleton'; memoize('compile_marc_path'); memoize('parse_marc_spec'); memoize('_get_index_range'); our $VERSION = '1.271'; sub marc_map { my $self = $_[0]; # $_[2] : marc_path my $context = ref( $_[2] ) ? $_[2] : $self->compile_marc_path( $_[2], subfield_wildcard => 1 ); confess "invalid marc path" unless $context; # $_[1] : data record my $record = $_[1]->{'record'}; return wantarray ? () : undef unless ( defined $record && ref($record) eq 'ARRAY' ); # $_[3] : opts my $split = $_[3]->{'-split'} // 0; my $join_char = $_[3]->{'-join'} // ''; my $pluck = $_[3]->{'-pluck'} // 0; my $value_set = $_[3]->{'-value'} // undef; my $nested_arrays = $_[3]->{'-nested_arrays'} // 0; my $append = $_[3]->{'-force_array'} // undef; # Do an implicit split for nested_arrays , except when no-implicit-split is set if ( $nested_arrays == 1 ) { $split = 1 unless $_[3]->{'-no-implicit-split'}; } my $vals; for my $field (@$record) { next if ( ( $context->{is_regex_field} == 0 && $field->[0] ne $context->{field} ) || ( defined $context->{ind1} && ( !defined $field->[1] || $field->[1] ne $context->{ind1} ) ) || ( defined $context->{ind2} && ( !defined $field->[2] || $field->[2] ne $context->{ind2} ) ) || ( $context->{is_regex_field} == 1 && $field->[0] !~ $context->{field_regex} ) ); my $v; if ($value_set) { for ( my $i = 3; $i < @{$field}; $i += 2 ) { my $subfield_regex = $context->{subfield_regex}; if ( $field->[$i] =~ $subfield_regex ) { $v = $value_set; last; } } } else { $v = []; if ($pluck) { # Treat the subfield as a hash index my $_h = {}; for ( my $i = $context->{start}; $i < @{$field}; $i += 2 ) { push @{ $_h->{ $field->[$i] } }, $field->[ $i + 1 ]; } my $subfield = $context->{subfield}; $subfield =~ s{[^a-zA-Z0-9]}{}g; for my $c ( split( '', $subfield ) ) { my $val = $_h->{$c} // [undef]; push @$v, @{$val}; } } else { for ( my $i = $context->{start}; $i < @{$field}; $i += 2 ) { my $subfield_regex = $context->{subfield_regex}; if ( $field->[$i] =~ $subfield_regex ) { push( @$v, $field->[ $i + 1 ] ); } } } if (@$v) { if ( !$split ) { my @defined_values = grep { defined($_) } @$v; $v = join $join_char, @defined_values; } if ( defined( my $off = $context->{from} ) ) { if ( ref $v eq 'ARRAY' ) { my @defined_values = grep { defined($_) } @$v; $v = join $join_char, @defined_values; } my $len = $context->{len}; if ( length( ${v} ) > $off ) { $v = substr( $v, $off, $len ); } else { $v = undef; } } } else { $v = undef; } } if ( defined $v ) { if ($split) { $v = [$v] unless ( defined($v) && ref($v) eq 'ARRAY' ); if ( defined($vals) && ref($vals) eq 'ARRAY' ) { # With the nested arrays option a split will # always return an array of array of values. # This was the old behavior of Inline marc_map functions if ( $nested_arrays == 1 ) { push @$vals, $v; } else { push @$vals, @$v; } } else { if ( $nested_arrays == 1 ) { $vals = [$v]; } else { $vals = [@$v]; } } } else { push @$vals, $v; } } } if ( $split && defined $vals ) { $vals = [$vals]; } elsif ($append) { # we got a $append } elsif ( defined $vals ) { $vals = join $join_char, @$vals; } else { # no result } $vals; } sub marc_add { my ( $self, $data, $marc_path, @subfields ) = @_; my %subfields = @subfields; my $marc = $data->{'record'} // []; if ( $marc_path =~ /^\w{3}$/ ) { my @field = (); push @field, $marc_path; push @field, $subfields{ind1} // ' '; push @field, $subfields{ind2} // ' '; for ( my $i = 0; $i < @subfields; $i += 2 ) { my $code = $subfields[$i]; next unless length $code == 1; my $value = $subfields[ $i + 1 ]; if ( $value =~ /^\$\.(\S+)$/ ) { my $path = $1; $value = Catmandu::Util::data_at( $path, $data ); } if ( Catmandu::Util::is_array_ref $value) { for (@$value) { push @field, $code; push @field, $_; } } elsif ( Catmandu::Util::is_hash_ref $value) { for ( keys %$value ) { push @field, $code; push @field, $value->{$_}; } } elsif ( Catmandu::Util::is_value($value) && length($value) > 0 ) { push @field, $code; push @field, $value; } } push @{$marc}, \@field if @field > 3; } $data->{'record'} = $marc; $data; } sub marc_append { my ( $self, $data, $marc_path, $value ) = @_; my $record = $data->{'record'}; return $data unless defined $record; if ( $value =~ /^\$\.(\S+)/ ) { my $path = $1; $value = Catmandu::Util::data_at( $path, $data ); } if ( Catmandu::Util::is_array_ref $value) { $value = $value->[-1]; } elsif ( Catmandu::Util::is_hash_ref $value) { my $last; for ( keys %$value ) { $last = $value->{$_}; } $value = $last; } my $context = $self->compile_marc_path($marc_path); confess "invalid marc path" unless $context; for my $field (@$record) { my ( $tag, $ind1, $ind2, @subfields ) = @$field; if ( $context->{is_regex_field} ) { next unless $tag =~ $context->{field_regex}; } else { next unless $tag eq $context->{field}; } if ( defined $context->{ind1} ) { if ( !defined $ind1 || $ind1 ne $context->{ind1} ) { next; } } if ( defined $context->{ind2} ) { if ( !defined $ind2 || $ind2 ne $context->{ind2} ) { next; } } if ( $context->{subfield} ) { for ( my $i = 0; $i < @subfields; $i += 2 ) { if ( $subfields[$i] =~ $context->{subfield} ) { $field->[ $i + 4 ] .= $value; } } } else { $field->[-1] .= $value; } } $data; } sub marc_replace_all { my ( $self, $data, $marc_path, $regex, $value ) = @_; my $record = $data->{'record'}; return $data unless defined $record; if ( $value =~ /^\$\.(\S+)/ ) { my $path = $1; $value = Catmandu::Util::data_at( $path, $data ); } if ( Catmandu::Util::is_array_ref $value) { $value = $value->[-1]; } elsif ( Catmandu::Util::is_hash_ref $value) { my $last; for ( keys %$value ) { $last = $value->{$_}; } $value = $last; } my $context = $self->compile_marc_path( $marc_path, subfield_wildcard => 1 ); confess "invalid marc path" unless $context; for my $field (@$record) { my ( $tag, $ind1, $ind2, @subfields ) = @$field; if ( $context->{is_regex_field} ) { next unless $tag =~ $context->{field_regex}; } else { next unless $tag eq $context->{field}; } if ( defined $context->{ind1} ) { if ( !defined $ind1 || $ind1 ne $context->{ind1} ) { next; } } if ( defined $context->{ind2} ) { if ( !defined $ind2 || $ind2 ne $context->{ind2} ) { next; } } for ( my $i = 0; $i < @subfields; $i += 2 ) { if ( $subfields[$i] =~ $context->{subfield} ) { # Trick to double eval the right hand side $field->[ $i + 4 ] =~ s{$regex}{"\"$value\""}eeg; } } } $data; } sub marc_set { my ( $self, $data, $marc_path, $value, %opts ) = @_; my $record = $data->{'record'}; return $data unless defined $record; if ( $value =~ /^\$\.(\S+)/ ) { my $path = $1; $value = Catmandu::Util::data_at( $path, $data ); } if ( Catmandu::Util::is_array_ref $value) { $value = $value->[-1]; } elsif ( Catmandu::Util::is_hash_ref $value) { my $last; for ( keys %$value ) { $last = $value->{$_}; } $value = $last; } my $context = $self->compile_marc_path( $marc_path, subfield_default => 1 ); confess "invalid marc path" unless $context; for my $field (@$record) { my ( $tag, $ind1, $ind2, @subfields ) = @$field; if ( $context->{is_regex_field} ) { next unless $tag =~ $context->{field_regex}; } else { next unless $tag eq $context->{field}; } if ( defined $context->{ind1} ) { if ( !defined $ind1 || $ind1 ne $context->{ind1} ) { next; } } if ( defined $context->{ind2} ) { if ( !defined $ind2 || $ind2 ne $context->{ind2} ) { next; } } my $found = 0; for ( my $i = 0; $i < @subfields; $i += 2 ) { if ( $subfields[$i] =~ $context->{subfield} ) { if ( defined $context->{from} ) { substr( $field->[ $i + 4 ], $context->{from}, $context->{len} ) = $value; } else { $field->[ $i + 4 ] = $value; } $found = 1; } } if ( $found == 0 ) { push( @$field, $context->{subfield}, $value ); } } $data; } sub marc_remove { my ( $self, $data, $marc_path, %opts ) = @_; my $record = $data->{'record'}; my $new_record; my $context = $self->compile_marc_path($marc_path); confess "invalid marc path" unless $context; for my $field (@$record) { my $field_size = int(@$field); if (( $context->{is_regex_field} == 0 && $field->[0] eq $context->{field} ) || ( $context->{is_regex_field} == 1 && $field->[0] =~ $context->{field_regex} ) ) { my $ind_match = undef; if ( defined $context->{ind1} && defined $context->{ind2} ) { $ind_match = 1 if ( defined $field->[1] && $field->[1] eq $context->{ind1} && defined $field->[2] && $field->[2] eq $context->{ind2} ); } elsif ( defined $context->{ind1} ) { $ind_match = 1 if ( defined $field->[1] && $field->[1] eq $context->{ind1} ); } elsif ( defined $context->{ind2} ) { $ind_match = 1 if ( defined $field->[2] && $field->[2] eq $context->{ind2} ); } else { $ind_match = 1; } if ( $ind_match && !defined $context->{subfield_regex} ) { next; } if ( defined $context->{subfield_regex} ) { my $subfield_regex = $context->{subfield_regex}; my $new_subf = []; for ( my $i = $context->{start}; $i < $field_size; $i += 2 ) { unless ( $field->[$i] =~ $subfield_regex ) { push @$new_subf, $field->[$i]; push @$new_subf, $field->[ $i + 1 ]; } } splice @$field, $context->{start}, int(@$field), @$new_subf if $ind_match; } } push @$new_record, $field; } $data->{'record'} = $new_record; return $data; } sub marc_spec { my $self = $_[0]; # $_[1] : data record my $data = $_[1]; my $record = $data->{'record'}; # $_[2] : spec my ( $ms, $spec ); if ( ref $_[2] ) { $ms = $_[2]; $spec = $ms->to_string(); } else { $ms = $self->parse_marc_spec( $_[2] ); # memoized $spec = $_[2]; } my $EMPTY = q{}; # $_[3] : opts my $split = $_[3]->{'-split'} // 0; my $join_char = $_[3]->{'-join'} // $EMPTY; my $pluck = $_[3]->{'-pluck'} // 0; my $value_set = $_[3]->{'-value'} // undef; my $invert = $_[3]->{'-invert'} // 0; my $nested_arrays = $_[3]->{'-nested_arrays'} // 0; my $append = $_[3]->{'-force_array'} // 0; if ($nested_arrays) { $split = 1; } # filter by tag my @fields = (); my $field_spec = $ms->field; my $tag_spec = $field_spec->tag; @fields = grep { $_->[0] =~ /$tag_spec/ } @{$record}; return unless @fields; # calculate char start my $chst = sub { my ($sp) = @_; my $char_start; if ( $sp->has_char_start ) { $char_start = ( '#' eq $sp->char_start ) ? $sp->char_length * -1 : $sp->char_start; } return $char_start; }; # vars we need only for subfields my ( @sf_spec, $invert_level, $codes, $invert_chars ); if ( $ms->has_subfields ) { # set the order of subfields @sf_spec = map {$_} @{ $ms->subfields }; unless ($pluck) { @sf_spec = sort { $a->code cmp $b->code } @sf_spec; } # set invert level default $invert_level = 4; if ($invert) { $codes = '[^'; $codes .= join $EMPTY, map { $_->code } @sf_spec; $codes .= ']'; } $invert_chars = sub { my ( $str, $start, $length ) = @_; for ( substr $str, $start, $length ) { $_ = $EMPTY; } return $str; }; } else { # return $value_set ASAP return $value_set if defined $value_set; } # vars we need for fields and subfields my ( $referred, $char_start, $prev_tag, $index_range ); my $current_tag = $EMPTY; my $tag_index = 0; my $index_start = $field_spec->index_start; my $index_end = $field_spec->index_end; my $to_referred = sub { my (@values) = @_; if ($nested_arrays) { push @{$referred}, \@values; } elsif ($split) { push @{$referred}, @values; } else { push @{$referred}, join $join_char, @values; } }; if ( defined $field_spec->index_start ) { $index_range = _get_index_range( $field_spec->index_start, $field_spec->index_end, $#fields ); } # iterate over fields for my $field (@fields) { $prev_tag = $current_tag; $current_tag = $field->[0]; $tag_index = ( $prev_tag eq $current_tag and defined $tag_index ) ? ++$tag_index : 0; #: $field_spec->index_start; # filter by index if ( defined $index_range ) { next unless ( Catmandu::Util::array_includes( $index_range, $tag_index ) ); } # filter field by subspec if ( $field_spec->has_subspecs ) { my $valid = $self->_it_subspecs( $data, $current_tag, $field_spec->subspecs, $tag_index ); next unless $valid; } my @subfields = (); if ( $ms->has_subfields ) { # now we dealing with subfields for my $sf (@sf_spec) { # set invert level if ( $invert && !$sf->has_subspecs ) { if ( -1 == $sf->index_length && !$sf->has_char_start ) { next if ( $invert_level == 3 ) ; # skip subfield spec it's already covered $invert_level = 3; } elsif ( $sf->has_char_start ) { $invert_level = 1; } else { $invert_level = 2; } } my @subfield = (); my $code = ( $invert_level == 3 ) ? $codes : $sf->code; $code = qr/$code/; for ( my $i = 3; $i < @{$field}; $i += 2 ) { if ( $field->[$i] =~ /$code/ ) { push @subfield, $field->[ $i + 1 ]; } } if ( $invert_level == 3 ) { # no index or charpos if (@subfield) { push @subfields, @subfield; } if ( $referred && $value_set ) { # return $value_set ASAP return $value_set; } next; } next unless (@subfield); # filter by index if ( defined $sf->index_start ) { my $sf_range = _get_index_range( $sf->index_start, $sf->index_end, $#subfield ); if ( $invert_level == 2 ) { # inverted @subfield = map { Catmandu::Util::array_includes( $sf_range, $_ ) ? () : $subfield[$_]; } 0 .. $#subfield; } else { # without invert @subfield = map { defined $subfield[$_] ? $subfield[$_] : (); } @{$sf_range}; } next unless (@subfield); } # return $value_set ASAP return $value_set if $value_set; # filter subfield by subspec if ( $sf->has_subspecs ) { my $valid = $self->_it_subspecs( $data, $field_spec->tag, $sf->subspecs, $tag_index ); next unless $valid; } # get substring $char_start = $chst->($sf); if ( defined $char_start ) { if ( $invert_level == 1 ) { # inverted @subfield = map { $invert_chars->( $_, $char_start, $sf->char_length ); } @subfield; } else { @subfield = map { substr $_, $char_start, $sf->char_length; } @subfield; } } next unless @subfield; push @subfields, @subfield; } # end of subfield iteration $to_referred->(@subfields) if @subfields; } # end of subfield handling elsif ( $ms->has_indicator ) { # filter field by subspec if ( $ms->indicator->has_subspecs ) { my $valid = $self->_it_subspecs( $data, $current_tag, $ms->indicator->subspecs, $tag_index ); next unless $valid; } my @indicators = (); push @indicators, $field->[ $ms->indicator->position ] if defined $field->[ $ms->indicator->position ]; $to_referred->(@indicators); } else { # no particular subfields requested my @contents = (); for ( my $i = 4; $i < @{$field}; $i += 2 ) { # get substring $char_start = $chst->($field_spec); my $content = ( defined $char_start ) ? substr $field->[$i], $char_start, $field_spec->char_length : $field->[$i]; push @contents, $content; } next unless (@contents); $to_referred->(@contents); } # end of field handling } # end of field iteration return unless ($referred); if ($append) { return [$referred] if $split; return $referred; } elsif ($split) { return [$referred]; } return join $join_char, @{$referred}; } sub _it_subspecs { my ( $self, $data, $tag, $subspecs, $tag_index ) = @_; my $set_index = sub { my ($subspec) = @_; foreach my $side ( ( 'left', 'right' ) ) { next if ( ref $subspec->$side eq 'MARC::Spec::Comparisonstring' ); # only set new index if subspec field tag equals spec field tag!! my $spec_tag = $subspec->$side->field->tag; next unless ( $tag =~ /$spec_tag/ ); $subspec->$side->field->set_index_start_end($tag_index); } }; my $valid = 1; foreach my $subspec ( @{$subspecs} ) { if ( ref $subspec eq 'ARRAY' ) { # chained subSpecs (OR) foreach my $or_subspec ( @{$subspec} ) { $set_index->($or_subspec); $valid = $self->_validate_subspec( $or_subspec, $data, $tag ); # at least one of them is true (OR) last if $valid; } } else { # repeated SubSpecs (AND) $set_index->($subspec); $valid = $self->_validate_subspec( $subspec, $data, $tag ); # all of them have to be true (AND) last unless $valid; } } return $valid; } sub _validate_subspec { my ( $self, $subspec, $data, $tag ) = @_; my ( $left_subterm, $right_subterm ); if ( '!' ne $subspec->operator && '?' ne $subspec->operator ) { if ( ref $subspec->left ne 'MARC::Spec::Comparisonstring' ) { my $new_spec = $subspec->left->to_string(); $new_spec =~ s/^\.\.\./$tag/; $left_subterm = $self->marc_spec( $data, $new_spec, { '-split' => 1 } ) ; # split should result in an array ref return 0 unless defined $left_subterm; } else { push @{$left_subterm}, $subspec->left->comparable; } } if ( ref $subspec->right ne 'MARC::Spec::Comparisonstring' ) { my $new_spec = $subspec->right->to_string(); $new_spec =~ s/^\.\.\./$tag/; $right_subterm = $self->marc_spec( $data, $new_spec, { '-split' => 1 } ) ; # split should result in an array ref unless ( defined $right_subterm ) { $right_subterm = []; } } else { push @{$right_subterm}, $subspec->right->comparable; } if ( $subspec->operator eq '?' ) { return ( @{$right_subterm} ) ? 1 : 0; } if ( $subspec->operator eq '!' ) { return ( @{$right_subterm} ) ? 0 : 1; } if ( $subspec->operator eq '=' ) { foreach my $v ( @{ $left_subterm->[0] } ) { return 1 if List::Util::any { $v eq $_ } @{$right_subterm}; } } if ( $subspec->operator eq '!=' ) { foreach my $v ( @{ $left_subterm->[0] } ) { return 0 if List::Util::any { $v eq $_ } @{$right_subterm}; } return 1; } if ( $subspec->operator eq '~' ) { foreach my $v ( @{ $left_subterm->[0] } ) { return 1 if List::Util::any { $v =~ /$_/ } @{$right_subterm}; } } if ( $subspec->operator eq '!~' ) { foreach my $v ( @{ $left_subterm->[0] } ) { return 0 if List::Util::any { $v =~ /$_/ } @{$right_subterm}; } return 1; } return 0; } sub parse_marc_spec { my ( $self, $marc_spec ) = @_; return MARC::Spec::Parser->new($marc_spec)->marcspec; } sub _get_index_range { my ( $index_start, $index_end, $last_index ) = @_; if ( '#' eq $index_start ) { if ( '#' eq $index_end or 0 == $index_end ) { return [$last_index]; } $index_start = $last_index; $index_end = $last_index - $index_end; if ( 0 > $index_end ) { $index_end = 0; } } else { if ( $last_index < $index_start ) { return [$index_start]; } # this will result to no hits } if ( '#' eq $index_end or $index_end > $last_index ) { $index_end = $last_index; } return ( $index_start <= $index_end ) ? [ $index_start .. $index_end ] : [ $index_end .. $index_start ]; } sub marc_xml { my ( $self, $data, %opts ) = @_; if ( $opts{reverse} ) { my $record = Catmandu->import_from_string( $data, 'MARC', type => 'XML' ); return $record->[0]->{record} if $record; return undef; } else { my $xml; my $exporter = Catmandu::Exporter::MARC::XML->new( file => \$xml, xml_declaration => 0, collection => 0 ); $exporter->add( { record => $data } ); $exporter->commit; return $xml; } } sub marc_record_to_json { my ( $self, $data, %opts ) = @_; if ( my $marc = delete $data->{'record'} ) { for my $field (@$marc) { my ( $tag, $ind1, $ind2, @subfields ) = @$field; if ( $tag eq 'LDR' ) { shift @subfields; $data->{leader} = join "", @subfields; } elsif ( $tag eq 'FMT' || substr( $tag, 0, 2 ) eq '00' ) { shift @subfields; push @{ $data->{fields} ||= [] }, { $tag => join "", @subfields }; } else { my @sf; my $start = !defined( $subfields[0] ) || $subfields[0] eq '_' ? 2 : 0; for ( my $i = $start; $i < @subfields; $i += 2 ) { push @sf, { $subfields[$i] => $subfields[ $i + 1 ] }; } push @{ $data->{fields} ||= [] }, { $tag => { subfields => \@sf, ind1 => $ind1, ind2 => $ind2 } }; } } } $data; } sub marc_json_to_record { my ( $self, $data, %opts ) = @_; my $record = []; if ( Catmandu::Util::is_string( $data->{leader} ) ) { push @$record, [ 'LDR', undef, undef, '_', $data->{leader} ],; } if ( Catmandu::Util::is_array_ref( $data->{fields} ) ) { for my $field ( @{ $data->{fields} } ) { next unless Catmandu::Util::is_hash_ref($field); my ($tag) = keys %$field; my $val = $field->{$tag}; if ( $tag eq 'FMT' || substr( $tag, 0, 2 ) eq '00' ) { push @$record, [ $tag, undef, undef, '_', $val ],; } elsif ( Catmandu::Util::is_hash_ref($val) ) { my $ind1 = $val->{ind1}; my $ind2 = $val->{ind2}; next unless Catmandu::Util::is_array_ref( $val->{subfields} ); my $sfs = [ '_', '' ]; for my $sf ( @{ $val->{subfields} } ) { next unless Catmandu::Util::is_hash_ref($sf); my ($code) = keys %$sf; my $sval = $sf->{$code}; push @$sfs, [ $code, $sval ]; } push @$record, [ $tag, $ind1, $ind2, @$sfs ]; } } } if ( @$record > 0 ) { delete $data->{fields}; delete $data->{leader}; $data->{'record'} = $record; } $data; } sub marc_decode_dollar_subfields { my ( $self, $data, %opts ) = @_; my $old_record = $data->{'record'}; my $new_record = []; for my $field (@$old_record) { my ( $tag, $ind1, $ind2, @subfields ) = @$field; my $fixed_field = [ $tag, $ind1, $ind2 ]; for ( my $i = 0; $i < @subfields; $i += 2 ) { my $code = $subfields[$i]; my $value = $subfields[ $i + 1 ]; # If a subfield contains fields coded like: data$xmore$yevenmore # chunks = (data,x,y,evenmore) my @chunks = split( /\$([a-z])/, $value ); my $real_value = shift @chunks; push @$fixed_field, ( $code, $real_value ); while (@chunks) { push @$fixed_field, ( splice @chunks, 0, 2 ); } } push @$new_record, $fixed_field; } $data->{'record'} = $new_record; $data; } sub compile_marc_path { my ( $self, $marc_path, %opts ) = @_; my ($field, $field_regex, $ind1, $ind2, $subfield, $subfield_regex, $from, $to, $len, $is_regex_field ); my $MARC_PATH_REGEX = qr/(\S{1,3})(\[([^,])?,?([^,])?\])?([\$_a-z0-9^-]+)?(\/([0-9]+)(-([0-9]+))?)?/; if ( $marc_path =~ $MARC_PATH_REGEX ) { $field = $1; $ind1 = $3; $ind2 = $4; $subfield = $5; $field = "0" x ( 3 - length($field) ) . $field; # fixing 020 treated as 20 bug if ( defined($subfield) ) { $subfield =~ s{\$}{}g; unless ( $subfield =~ /^[a-zA-Z0-9]$/ ) { $subfield = "[$subfield]"; } } elsif ( $opts{subfield_default} ) { $subfield = $field =~ /^0|LDR|FMT/ ? '_' : 'a'; } elsif ( $opts{subfield_wildcard} ) { $subfield = '[a-z0-9_]'; } if ( defined($subfield) ) { $subfield_regex = qr/^(?:${subfield})$/; } $from = $7; $to = $9; $len = defined $to ? $to - $from + 1 : 1; } else { return undef; } if ( $field =~ /[\*\.]/ ) { $field_regex = $field; $field_regex =~ s/[\*\.]/(?:[A-Z0-9])/g; $is_regex_field = 1; $field_regex = qr/^$field_regex$/; } else { $is_regex_field = 0; } return { field => $field, field_regex => $field_regex, is_regex_field => $is_regex_field, subfield => $subfield, subfield_regex => $subfield_regex, ind1 => $ind1, ind2 => $ind2, start => 3, from => $from, to => $to, len => $len }; } sub marc_copy { my $self = $_[0]; my $data = $_[1]; my $marc_path = $_[2]; my $marc_value = $_[3]; my $is_cut = $_[4]; # $_[2] : marc_path my $context = ref($marc_path) ? $marc_path : $self->compile_marc_path( $_[2], subfield_wildcard => 0 ); confess "invalid marc path" unless $context; # $_[1] : data record my $record = $data->{'record'}; return wantarray ? () : undef unless ( defined $record && ref($record) eq 'ARRAY' ); # When is_cut is on, we need to create a new record containing the remaining fields my @new_record = (); my $fields = []; for my $field (@$record) { my ( $tag, $ind1, $ind2, @subfields ) = @$field; if (( $context->{is_regex_field} == 0 && $tag ne $context->{field} ) || ( $context->{is_regex_field} == 1 && $tag !~ $context->{field_regex} ) ) { push @new_record, $field if $is_cut; next; } if ( defined $context->{ind1} ) { if ( !defined $ind1 || $ind1 ne $context->{ind1} ) { push @new_record, $field if $is_cut; next; } } if ( defined $context->{ind2} ) { if ( !defined $ind2 || $ind2 ne $context->{ind2} ) { push @new_record, $field if $is_cut; next; } } if ( $context->{subfield} ) { my $found = 0; for ( my $i = 0; $i < @subfields; $i += 2 ) { if ( $subfields[$i] =~ $context->{subfield} ) { if ( defined($marc_value) ) { $found = 1 if $subfields[ $i + 1 ] =~ /$marc_value/; } else { $found = 1; } } } unless ($found) { push @new_record, $field if $is_cut; next; } } else { if ( defined($marc_value) ) { my @sf = (); for ( my $i = 0; $i < @subfields; $i += 2 ) { push @sf, $subfields[ $i + 1 ]; } my $string = join "", @sf; unless ( $string =~ /$marc_value/ ) { push @new_record, $field if $is_cut; next; } } } my $f = {}; $f->{tag} = $field->[0]; # indicator 1 if ( defined $field->[1] ) { $f->{ind1} = $field->[1]; } else { $f->{ind1} = undef; } # indicator 2 if ( defined $field->[2] ) { $f->{ind2} = $field->[2]; } else { $f->{ind2} = undef; } # fixed fields if ( $field->[3] eq '_' ) { $f->{content} = $field->[4]; push( @$fields, $f ); next; } # subfields for ( my $i = $context->{start}; $i < @{$field}; $i += 2 ) { push( @{ $f->{subfields} }, { $field->[$i] => $field->[ $i + 1 ] } ); } push( @$fields, $f ); } if ($is_cut) { $data->{record} = \@new_record; } [$fields]; } sub marc_paste { my $self = $_[0]; my $data = $_[1]; my $json_path = $_[2]; my $marc_path = $_[3]; my $marc_value = $_[4]; my $value = Catmandu::Util::data_at( $json_path, $data ); return $data unless Catmandu::Util::is_array_ref($value) || Catmandu::Util::is_hash_ref($value); $value = [$value] unless Catmandu::Util::is_array_ref($value); my @new_parts; for my $part (@$value) { return $data unless Catmandu::Util::is_hash_ref($part) && exists $part->{tag} && exists $part->{ind1} && exists $part->{ind2} && ( exists $part->{content} || exists $part->{subfields} ); my $tag = $part->{tag}; my $ind1 = $part->{ind1} // ' '; my $ind2 = $part->{ind2} // ' '; my $content = $part->{content}; my $subfields = $part->{subfields}; if ( defined($content) ) { push @new_parts, [ $tag, $ind1, $ind2, '_', $content ]; } elsif ( defined($subfields) && Catmandu::Util::is_array_ref($subfields) ) { my @tmp = ( $tag, $ind1, $ind2 ); for my $sf (@$subfields) { while ( my ( $key, $value ) = each %$sf ) { push @tmp, $key, $value; } } push @new_parts, [@tmp]; } else { # Illegal input return $data; } } if ( defined($marc_path) ) { my $context = $self->compile_marc_path( $marc_path, subfield_wildcard => 0 ); confess "invalid marc path" unless $context; my @record = @{ $data->{record} }; my $found_match = undef; my $field_position = -1; for my $field (@record) { $field_position++; my ( $tag, $ind1, $ind2, @subfields ) = @$field; if ( $context->{is_regex_field} ) { next unless $tag =~ $context->{field_regex}; } else { next unless $tag eq $context->{field}; } if ( defined $context->{ind1} ) { if ( !defined $ind1 || $ind1 ne $context->{ind1} ) { next; } } if ( defined $context->{ind2} ) { if ( !defined $ind2 || $ind2 ne $context->{ind2} ) { next; } } if ( $context->{subfield} ) { for ( my $i = 0; $i < @subfields; $i += 2 ) { if ( $subfields[$i] =~ $context->{subfield} ) { if ( defined($marc_value) ) { $found_match = $field_position if $subfields[ $i + 1 ] =~ /$marc_value/; } else { $found_match = $field_position; } } } } else { if ( defined($marc_value) ) { my @sf = (); for ( my $i = 0; $i < @subfields; $i += 2 ) { push @sf, $subfields[ $i + 1 ]; } my $string = join "", @sf; if ( $string =~ /$marc_value/ ) { $found_match = $field_position; } else { # don't match anything } } else { $found_match = $field_position; } } } if ( defined $found_match ) { my @new_record = ( @record[ 0 .. $found_match ], @new_parts, @record[ $found_match + 1 .. $#record ] ); $data->{record} = \@new_record; } } else { push @{ $data->{record} }, @new_parts; } $data; } sub marc_sort { my ( $self, $data ) = @_; if ( defined $data->{record} ) { my @record = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, $_->[0] =~ m/^FMT$/ ? 0.1 : $_->[0] =~ m/^LDR$/ ? 0.2 : $_->[0] =~ m/^[A-Z]/ ? 99 . ord( substr( $_->[0], 0 ) ) : $_->[0] ] } @{ $data->{record} }; $data->{record} = \@record; } return $data; } 1; __END__ =head1 NAME Catmandu::MARC - Catmandu modules for working with MARC data =begin markdown # STATUS [![Build Status](https://travis-ci.org/LibreCat/Catmandu-MARC.svg?branch=master)](https://travis-ci.org/LibreCat/Catmandu-MARC) [![Coverage](https://coveralls.io/repos/LibreCat/Catmandu-MARC/badge.png?branch=master)](https://coveralls.io/r/LibreCat/Catmandu-MARC) [![CPANTS kwalitee](http://cpants.cpanauthors.org/dist/Catmandu-MARC.png)](http://cpants.cpanauthors.org/dist/Catmandu-MARC) =end markdown =head1 SYNOPSIS # On the command line $ catmandu convert MARC to JSON < data.mrc $ catmandu convert MARC --type MiJ to YAML < data.marc_in_json $ catmandu convert MARC --fix "marc_map(245,title)" < data.mrc $ catmandu convert MARC --fix myfixes.txt < data.mrc myfixes: marc_map("245a", title) marc_map("5**", note.$append) marc_map('710','my.authors.$append') marc_map('008_/35-35','my.language') remove_field(record) add_field(my.funny.field,'test123') $ catmandu import MARC --fix myfixes.txt to ElasticSearch --index_name 'catmandu' < data.marc # In perl use Catmandu; my $importer = Catmandu->importer('MARC', file => 'data.mrc' ); my $fixer = Catmandu->fixer('myfixes.txt'); my $store = Catmandu->store('ElasticSearch', index_name => 'catmandu'); $store->add_many( $fixer->fix($importer) ); =head1 MODULES =over =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =back =head1 DESCRIPTION With Catmandu, LibreCat tools abstract digital library and research services as data warehouse processes. As stores we reuse MongoDB or ElasticSearch providing us with developer friendly APIs. Catmandu works with international library standards such as MARC, MODS and Dublin Core, protocols such as OAI-PMH, SRU and open repositories such as DSpace and Fedora. And, of course, we speak the evolving Semantic Web. Follow us on L and read an introduction into Catmandu data processing at L. =head1 SEE ALSO L, L, L, L, L =head1 AUTHOR Patrick Hochstenbach, C<< >> =head1 CONTRIBUTORS =over =item * Nicolas Steenlant, C<< >> =item * Nicolas Franck, C<< >> =item * Johann Rolschewski, C<< jorol at cpan.org >> =item * Chris Cormack =item * Robin Sheat =item * Carsten Klee, C<< klee at cpan.org >> =back =head1 COPYRIGHT Copyright 2012- Patrick Hochstenbach , Carsten Klee, Johann Rolschewski =head1 LICENSE This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See L for more information. =cut author-pod-syntax.t100644000765000024 45414137142137 22400 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t#!perl BEGIN { unless ($ENV{AUTHOR_TESTING}) { print qq{1..0 # SKIP these tests are for testing by the author\n}; exit } } # This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests. use strict; use warnings; use Test::More; use Test::Pod 1.41; all_pod_files_ok(); dollar_subfields.mrc100644000765000024 463114137142137 22646 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t01101nas1 22001813i 450 0010006000000050017000061000041000231010008000641020007000721060006000791100016000852000264001014630206003657120075005717120086006468010097007328010090008291216220050527101033.0 a20050527c m y0grey50 ga0 aeng aGR ar aayuzad 1yy01 aInternational Conference on Environmental Science and Technology h$f: 3-6 September 2001$e: Ermoupolis, Syros Island, Greece)fUniversity of the Aegean.Department of Environmental StudiesfGlobal Network for Environmental Science and Technology-(Global Nest )_010011216112001 aProceedings of the 7th international conference on environmental science and technology nce and technologyeErmoupolis, Syros Island, Greece, 3-6 September 2001 1fT. D. Lekkas, editor023UA.DES4650aUNIVERSITY OF AEGEANbDEPARTMENT OF ENVIRONMENTAL STUDIES023GNEST4650aGlobal Network for Environmental Science and Technology (Global Nest) 0aGRbΔΗΜΟΣΙΑ ΚΕΝΤΡΙΚΗ ΒΙΒΛΙΟΘΗΚΗ ΜΥΤΙΛΗΝΗΣc20050527gAACR2 1aGRbΔΗΜΟΣΙΑ ΚΕΝΤΡΙΚΗ ΒΙΒΛΙΟΘΗΚΗ ΜΥΤΙΛΗΝΗΣc2005052701356nam 2200277 i 450 0010006000000050017000060100018000231000041000411010008000821020007000901050018000971060006001152000309001212100035004302150041004652250049005064100065005556060033006206060031006536060045006846760018007297000091007477120053008388010097008918010090009881525020010629121549.0 a960-211-082-1 a20080409d1991 |||y0grey50 ga0 agre aGR aa z 000yy ar1 aΨειρολογίαeήτοι, πραγματεία περί των οχληρών ζουζουνίων της πάλαι ποτέ ελληνικής κατοικίας, και, των μέσων καταπολεμήσεως αυτών $f Ηλία ΠετρόπουλουfΗλία Πετρόπουλου aΑθήναcΝεφέληd1991 a165 σ.cεικ. , φωτ.d21 εκ.2 aΗλία Πετρόπουλου Άπαντα_01001602112001 aΗλία Πετρόπουλου Άπαντα1 3__ΕΝΤΟΜΑaΕΝΤΟΜΑ1 3ΨΕΙΡΕΣaΨΕΙΡΕΣ1 3__ΛΑΟΓΡΑΦΙΑaΛαογραφία a398.24 ΠΕΤ 13ΠΕΤΡΟΠΟΥΛΟΣ, ΗΛΙΑΣ4070aΠΕΤΡΟΠΟΥΛΟΣbΗΛΙΑΣf1928-2003023ΝΕΦΕΛΗ4650aΕΚΔΟΣΕΙΣ ΝΕΦΕΛΗ 0aGRbΔΗΜΟΣΙΑ ΚΕΝΤΡΙΚΗ ΒΙΒΛΙΟΘΗΚΗ ΜΥΤΙΛΗΝΗΣc20080409gAACR2 1aGRbΔΗΜΟΣΙΑ ΚΕΝΤΡΙΚΗ ΒΙΒΛΙΟΘΗΚΗ ΜΥΤΙΛΗΝΗΣc20080409mapping_rules_spec.t100644000765000024 6117514137142137 22720 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/tuse strict; use warnings; use Test::More; use Catmandu; my $mrc = <<'MRC'; Title / Name A B C D Alpha a Beta b Gamma c X Y Z MRC note " --- ".'marc_spec(245,title) title: "Title / Name"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(245,title); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, 'Title / Name', 'marc_spec(245,title)'; } note " --- ".'marc_spec(245$a,title) title: "Title / "'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(245$a,title); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, 'Title / ', 'marc_spec(245$a,title)'; } note " --- ".'marc_spec(245,title.$append) title: [ "Title / Name" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(245,title.$append); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, ['Title / Name'], 'marc_spec(245,title.$append)'; } note " --- ".'marc_spec(245$a$c,title.$append) title: [ "Title / Name" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(245$a$c,title.$append); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, ['Title / Name'], 'marc_spec(245$a$c,title.$append)'; } note " --- ".'add_field(title.$first, "first"); marc_spec(245,title.$append) title: ["first", "Title / Name" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'add_field(title.$first, "first"); marc_spec(245,title.$append); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, ['first', 'Title / Name'], 'marc_spec(245,title.$append)'; } note " --- ".'marc_spec(245$a,title.$append) title: [ "Title / " ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(245$a,title.$append); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, ['Title / '], 'marc_spec(245$a.$append,title)'; } note " --- ".'marc_spec(245,title, split:1) title: [ "Title / ", "Name" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(245,title, split:1); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, [ 'Title / ', 'Name' ], 'marc_spec(245,title, split:1)'; } note " --- ".'marc_spec(245,title.$append, split:1) title: [ [ "Title / ", "Name" ] ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(245,title.$append, split:1); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, [[ 'Title / ', 'Name' ]], 'marc_spec(245a,title.$append,split:1)'; } note " --- ".'marc_spec(245,title, split:1, nested_arrays:1) title: [ [ "Title / ", "Name" ] ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(245,title, split:1, nested_arrays:1); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, [[ 'Title / ', 'Name' ]], 'marc_spec(245, title, split:1, nested_arrays:1)'; } note " --- ".'marc_spec(245,title.$append, split:1, nested_arrays:1) title: [[ [ "Title / ", "Name" ] ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(245,title.$append, split:1, nested_arrays:1); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, [[[ 'Title / ', 'Name' ]]], 'marc_spec(245a,title.$append,split:1, nested_arrays:1)'; } note " --- ".'marc_spec(500,note) note: "ABCD"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(500,note); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, 'ABCD', 'marc_spec(500,note)'; } note " --- ".'marc_spec(500$a,note) note: "ABC"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(500$a,note); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, 'ABC', 'marc_spec(500$a,note)'; } note " --- ".'marc_spec(500$a,note, invert:1) note: "D"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(500$a,note,invert:1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, 'D', 'marc_spec(500$a,note,invert:1)'; } note " --- ".'marc_spec(500,note.$append) note: [ "ABCD" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => ' marc_spec(500,note.$append); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, ['ABCD'], ' marc_spec(500,note.$append)'; } note " --- ".'marc_spec(500,note.$append, join:"#") note: [ "A#B#C#D" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(500,note.$append, join:"#"); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, ['A#B#C#D'], ' marc_spec(500,note.$append, join:"#")'; } note " --- ".'marc_spec(500$a,note.$append) note: [ "ABC" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => ' marc_spec(500$a,note.$append); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, ['ABC'], ' marc_spec(500$a,note.$append)'; } note " --- ".'marc_spec(500$a,note.$append, invert:1) note: [ "D" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(500$a,note.$append,invert:1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, ['D'], 'marc_spec(500$a,note.$append,invert:1)'; } note " --- ".'marc_spec(500,note, split:1) note: [ "A" , "B" , "C" , "D" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(500,note, split:1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, [ 'A', 'B', 'C', 'D' ], 'marc_spec(500,note, split:1)'; } note " --- ".'marc_spec(500$x,note, split:1, invert:1) note: [ "A" , "B" , "C"]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(500$x,note, split:1, invert:1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, [ 'A', 'B', 'C' ], 'marc_spec(500$x,note, split:1, invert:1)'; } note " --- ".'marc_spec(500$a,note, split:1) note: [ "A" , "B" , "C" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(500$a,note, split:1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, [ 'A', 'B', 'C' ], 'marc_spec(500a,note, split:1)'; } note 'marc_spec(500$a,note, split:1, nested_arrays:1) note: [[ "A" , "B" , "C" ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(500$a,note, split:1, nested_arrays:1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, [[ "A" , "B" , "C" ]], 'marc_spec(500a,note, split:1)'; } note " --- ".'marc_spec(500$a,note.$append, split:1) note : [[ "A" , "B" , "C" ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(500$a,note.$append, split:1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, [ [ 'A', 'B', 'C' ] ], 'marc_spec(500$a,note.$append, split:1)'; } note " --- ".'marc_spec(500$x,note.$append, split:1, invert:1) note : [[ "A" , "B" , "C" ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(500$x,note.$append, split:1, invert:1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, [ [ 'A', 'B', 'C' ] ], 'marc_spec(500$x,note.$append, split:1, invert:1)'; } note 'marc_spec(500$a,note.$append, split:1, nested_arrays: 1) note : [[[ "A" , "B" , "C" ]]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(500$a,note.$append, split:1, nested_arrays: 1); retain_field(note)' ); my $record = $importer->first; is_deeply $record->{note}, [[[ "A" , "B" , "C" ]]], 'marc_spec(500$a,note.$append, split:1, nested_arrays: 1)'; } note " --- ".'marc_spec(650,subject) subject: "AlphaaBetabGammac"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(650,subject); retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, 'AlphaaBetabGammac', 'marc_spec(650,subject)'; } note " --- ".'marc_spec(650$a,subject) subject: "AlphaBetaGamma"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(650$a,subject) ; retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, 'AlphaBetaGamma', 'marc_spec(650$a,subject)'; } note " --- ".'marc_spec(650[0]$a,subject) subject: "Alpha"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(650[0]$a,subject) ; retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, 'Alpha', 'marc_spec(650[0]$a,subject)'; } note " --- ".'marc_spec(650$a/0,subject) subject: "ABG"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(650$a/0,subject) ; retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, 'ABG', 'marc_spec(650$a/0,subject)'; } note " --- ".'marc_spec(650$a/#,subject,invert:1) subject: "AlphBetGamm"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(650$a/#,subject,invert:1) ; retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, 'AlphBetGamm', 'marc_spec(650$a/#,subject,invert:1)'; } note " --- ".'marc_spec(650$a,subject.$append) subject: [ "Alpha", "Beta" , "Gamma" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(650$a,subject.$append); retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, [ 'Alpha', 'Beta', 'Gamma' ], 'marc_spec(650$a,subject.$append)'; } note " --- ".'marc_spec(650$a,subject, split:1) subject: [ "Alpha", "Beta" , "Gamma" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(650$a,subject, split:1); retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, [ 'Alpha', 'Beta', 'Gamma' ], 'marc_spec(650$a,subject, split:1)'; } note " --- ".'marc_spec(650$a,subject.$append, split:1) subject: [[ "Alpha" , "Beta" , "Gamma" ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(650$a,subject.$append, split:1) ; retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, [ [ 'Alpha', 'Beta', 'Gamma' ] ], 'marc_spec(650$a,subject.$append, split:1) '; } note " --- ".'marc_spec(650,subject, nested_arrays:1) subject: [["Alpha", "a"], ["Beta", "b"] , ["Gamma", "c"]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(650,subject, nested_arrays:1); retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, [ ['Alpha', 'a'], ['Beta', 'b'], ['Gamma', 'c'] ], 'marc_spec(650,subject, nested_arrays:1)'; } note " --- ".'marc_spec(650$a$b,subject, nested_arrays:1) subject: [["Alpha", "a"], ["Beta", "b"] , ["Gamma", "c"]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(650$a$b,subject, nested_arrays:1); retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, [ ['Alpha', 'a'], ['Beta', 'b'], ['Gamma', 'c'] ], 'marc_spec(650,subject, nested_arrays:1)'; } note " --- ".'marc_spec(650$a$b,subject.$append, nested_arrays:1) subject: [[["Alpha", "a"], ["Beta", "b"] , ["Gamma", "c"]]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(650$a$b, subject.$append, nested_arrays:1); retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, [ [ ['Alpha', 'a'], ['Beta', 'b'], ['Gamma', 'c'] ] ], 'marc_spec(650$a$b,subject.$append, nested_arrays:1)'; } note " --- ".'marc_spec(650$a,subject, split:1, nested_arrays:1) subject: [["Alpha"], ["Beta"] , ["Gamma"]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(650$a,subject, split:1, nested_arrays:1); retain_field(subject)' ); my $record = $importer->first; is_deeply $record->{subject}, [ ['Alpha'], ['Beta'], ['Gamma'] ], 'marc_spec(650$a,subject, split:1, nested_arrays:1)'; } note " --- ".'marc_spec(999,local) local: "XYZ"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999,local); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, 'XYZ', 'marc_spec(999,local)'; } note " --- ".'marc_spec(999$a,local) local: "XYZ"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a,local); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, 'XYZ', 'marc_spec(999$a,local)'; } note " --- ".'marc_spec(999$a[0],local) local: "XZ"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a[0],local); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, 'XZ', 'marc_spec(999$a[0],local)'; } note " --- ".'marc_spec(999$a[#],local) local: "YZ"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a[#],local); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, 'YZ', 'marc_spec(999$a[#],local)'; } note " --- ".'marc_spec(999$a[#],local,invert:1) local: "X"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a[#],local,invert:1); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, 'X', 'marc_spec(999$a[#],local,invert:1)'; } note " --- ".'marc_spec(999$a,local.$append) local: [ "XY", "Z" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a,local.$append); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ 'XY', 'Z' ], 'marc_spec(999$a,local.$append)'; } note " --- ".'marc_spec(999$a[0],local.$append) local: [ "X", "Z" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a[0],local.$append); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ 'X', 'Z' ], 'marc_spec(999$a[0],local.$append)'; } note " --- ".'marc_spec(999$a,local, split:1) local: [ "X" , "Y", "Z" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a,local, split:1); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ 'X', 'Y', 'Z' ], 'marc_spec(999$a,local, split:1)'; } note " --- ".'marc_spec(999$a[0],local, split:1) local: [ "X" , "Z" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a[0],local, split:1); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ 'X', 'Z' ], 'marc_spec(999$a[0],local, split:1)'; } note " --- ".'marc_spec(999$a[0],local, split:1, invert:1) local: [ "Y" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a[0],local, split:1, invert:1); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ 'Y' ], 'marc_spec(999$a[0],local, split:1, invert:1)'; } note " --- ".'marc_spec(999$a,local.$append, split:1) local: [[ "X" , "Y", "Z" ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a,local.$append, split:1); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ [ 'X', 'Y', 'Z' ] ], 'marc_spec(999$a,local.$append, split:1)'; } note " --- ".'marc_spec(999$a[0],local.$append, split:1) local: [[ "X" , "Z" ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a[0],local.$append, split:1); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ [ 'X', 'Z' ] ], 'marc_spec(999$a[0],local.$append, split:1)'; } note " --- ".'marc_spec(999$a,local, nested_arrays:1) local: [ ["X" , "Y"] , ["Z"] ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a,local, nested_arrays:1); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ [ 'X', 'Y' ], ['Z'] ], 'marc_spec(999$a,local, nested_arrays:1) '; } note " --- ".'marc_spec(999$a,local.$append, join:" ") local: [ "X Y", "Z" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(999$a,local.$append, join:" "); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, ['X Y', 'Z'], 'marc_spec(999$a,local.$append, join:" ")'; } note " --- ".'marc_spec(...$a, all.$append) all: [ "Title / ", "ABC", "Alpha", "Beta", "Gamma", "XY", "Z" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(...$a, all.$append); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, [ "Title / ", "ABC", "Alpha", "Beta", "Gamma", "XY", "Z" ], 'marc_spec(...$a, all.$append)'; } note " --- ".'marc_spec(..., all.$append) all: [ "Title / Name", "ABCD", "Alphaa", "Betab", "Gammac", "XY", "Z" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(..., all.$append); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, [ " ", "Title / Name", "ABCD", "Alphaa", "Betab", "Gammac", "XY", "Z" ], 'marc_spec(..., all.$append)'; } note " --- ".'marc_spec(...$a, all, split:1) all: [ "Title / " , "A" , "B" , "C", "Alpha" , "Beta" , "Gamma" , "X" , "Y", "Z" ]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(...$a, all, split:1); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, [ "Title / " , "A" , "B" , "C", "Alpha" , "Beta" , "Gamma" , "X" , "Y", "Z" ], 'marc_spec(...$a, all, split:1)'; } note " --- ".'marc_spec(...$a, all.$append, split:1) all: [[ "Title / " , "A" , "B" , "C", "Alpha" , "Beta" , "Gamma" , "X" , "Y", "Z" ]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(...$a, all.$append, split:1); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, [[ "Title / " , "A" , "B" , "C", "Alpha" , "Beta" , "Gamma" , "X" , "Y", "Z" ]], 'marc_spec(...$a, all.$append, split:1)'; } note " --- ".'marc_spec(...$a, all, split:1, nested_arrays:1) all: [["Title / "], ["A" , "B" , "C"], ["Alpha"] , ["Beta"] , ["Gamma"] , ["X" , "Y"], ["Z"]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(...$a, all, split:1, nested_arrays:1); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, [ ["Title / "], ["A" , "B" , "C"], ["Alpha"] , ["Beta"] , ["Gamma"] , ["X" , "Y"], ["Z"]], 'marc_spec(...$a, all, split:1, nested_arrays:1)'; } note " --- ".'marc_spec(...$a, all.$append, split:1, nested_arrays:1) all: [[ ["Title / "], ["A" , "B" , "C"], ["Alpha"] , ["Beta"] , ["Gamma"] , ["X" , "Y"], ["Z"]]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec(...$a, all.$append, split:1, nested_arrays:1); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, [[ ["Title / "], ["A" , "B" , "C"], ["Alpha"] , ["Beta"] , ["Gamma"] , ["X" , "Y"], ["Z"]]], 'marc_spec(...$a, all.$append, split:1, nested_arrays:1)'; } note " --- ".'add_field(all.$first,"first"); marc_spec(...$a, all.$append, split:1, nested_arrays:1) all: ["first",[ ["Title / "], ["A" , "B" , "C"], ["Alpha"] , ["Beta"] , ["Gamma"] , ["X" , "Y"], ["Z"]]]'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'add_field(all.$first,"first"); marc_spec(...$a, all.$append, split:1, nested_arrays:1); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, ["first",[ ["Title / "], ["A" , "B" , "C"], ["Alpha"] , ["Beta"] , ["Gamma"] , ["X" , "Y"], ["Z"]]], 'marc_spec(...$a, all.$append, split:1, nested_arrays:1)'; } done_testing; marc-spec-subspecs.t100644000765000024 3204114137142137 22526 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/tuse strict; use warnings; use Test::More; use Catmandu; my $mrc = <<'MRC'; Title / Name A B C D Alpha Beta Gamma X Y Z MRC note 'marc_spec(650{$a=\Beta}, equals) equals: "Beta"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650{$a=\Beta}", equals); retain_field(equals)' ); my $record = $importer->first; is_deeply $record->{equals}, 'Beta', 'marc_spec(650{$a=\Beta}, equals)'; } note 'marc_spec(650{$a!=\Beta}, equals_not) equals_not: "AlphaGamma"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650{$a!=\Beta}", equals_not); retain_field(equals_not)' ); my $record = $importer->first; is_deeply $record->{equals_not}, 'AlphaGamma', 'marc_spec(650{$a!=\Beta}, equals_not)'; } note 'marc_spec(650{$a/0=\B}, equals) equals: "Beta"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650{$a/0=\B}", equals); retain_field(equals)' ); my $record = $importer->first; is_deeply $record->{equals}, 'Beta', 'marc_spec(650{$a/0=\B}, equals)'; } note 'marc_spec(650{$a/0!=\B}, equals_not) equals_not: "AlphaGamma"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650{$a/0!=\B}", equals_not); retain_field(equals_not)' ); my $record = $importer->first; is_deeply $record->{equals_not}, 'AlphaGamma', 'marc_spec(650{$a/0!=\B}, equals_not)'; } note 'marc_spec(650{$a~\ph}, includes) includes: "Alpha"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650{$a~\ph}", includes); retain_field(includes)' ); my $record = $importer->first; is_deeply $record->{includes}, 'Alpha', 'marc_spec(650{$a~\ph}, includes)'; } note 'marc_spec(650{$a!~\ph}, includes_not) includes_not: "BetaGamma"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650{$a!~\ph}", includes_not); retain_field(includes_not)' ); my $record = $importer->first; is_deeply $record->{includes_not}, 'BetaGamma', 'marc_spec(650{$a!~\ph}, includes_not)'; } note 'marc_spec(650[#]{$a!~\ph}, includes_not) includes_not: "Gamma"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650[#]{$a!~\ph}", includes_not); retain_field(includes_not)' ); my $record = $importer->first; is_deeply $record->{includes_not}, 'Gamma', 'marc_spec(650[#]{$a!~\ph}, includes_not)'; } note 'marc_spec(245{500$a}, exists) exists: "Title / Name"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("245{500$a}", exists); retain_field(exists)' ); my $record = $importer->first; is_deeply $record->{exists}, 'Title / Name', 'marc_spec(245{500$a}, exists)'; } note 'marc_spec(245{!500$a}, exists_not) exists_not: undef'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("245{!500$a}", exists_not); retain_field(exists_not)' ); my $record = $importer->first; ok !$record->{exists_not}, 'marc_spec(245{!500$a}, exists_not)'; } note 'marc_spec(245$a{500$a=\C}, equals) equals: "Title / "'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("245$a{500$a=\C}", equals); retain_field(equals)' ); my $record = $importer->first; is_deeply $record->{equals}, 'Title / ', 'marc_spec(245$a{500$a=\C}, equals)'; } note 'marc_spec(245$a{500$a!=\C}, equals_not) equals_not: undef'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("245$a{500$a!=\C}", equals_not); retain_field(equals_not)' ); my $record = $importer->first; ok !$record->{equals_not}, 'marc_spec(245$a{500$a!=\C}, equals_not)'; } note 'marc_spec(245{500$a!=\F}, equals_not) equals: "Title / Name"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("245{500$a!=\F}", equals_not); retain_field(equals_not)' ); my $record = $importer->first; is_deeply $record->{equals_not}, 'Title / Name', 'marc_spec(245{500$a!=\F}, equals_not)'; } note 'marc_spec(500$a[1]{$x}, exists) exists: "B"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("500$a[1]{$x}", exists); retain_field(exists)' ); my $record = $importer->first; is_deeply $record->{exists}, 'B', 'marc_spec(500$a[1]{$x}, exists)'; } note 'marc_spec(500$a[1]{!$x}, exists_not) exists_not: undef'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("500$a[1]{!$x}", exists_not); retain_field(exists_not)' ); my $record = $importer->first; ok !$record->{exists_not}, 'marc_spec(500$a[1]{!$x}, exists_not)'; } note 'marc_spec(500$a[1]{!$c}, exists_not) exists_not: "B"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("500$a[1]{!$c}", exists_not); retain_field(exists_not)' ); my $record = $importer->first; is_deeply $record->{exists_not}, 'B', 'marc_spec(500$a[1]{!$c}, exists_not)'; } note 'marc_spec(650[1]{300}, exists) exists: undef'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650[1]{300}", exists); retain_field(exists)' ); my $record = $importer->first; ok !$record->{exists}, 'marc_spec(650[1]{300}, exists)'; } note 'marc_spec(650[1-#]{!300}, exists_not) exists_not: "BetaGamma"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650[1-#]{!300}", exists_not); retain_field(exists_not)' ); my $record = $importer->first; is_deeply $record->{exists_not}, 'BetaGamma', 'marc_spec(650[1-#]{!300}, exists_not)'; } note 'marc_spec(650[0]{!300}, exists_not) exists_not: "Alpha"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650[0]{!300}", exists_not); retain_field(exists_not)' ); my $record = $importer->first; is_deeply $record->{exists_not}, 'Alpha', 'marc_spec(650[0]{!300}, exists_not)'; } note 'marc_spec(650[1]{245^1=\0}, indicator1) indicator1: "Beta"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650[1]{245^1=\0}", indicator1); retain_field(indicator1)' ); my $record = $importer->first; is_deeply $record->{indicator1}, 'Beta', 'marc_spec(650[1]{245^1=\0}, indicator1)'; } note 'marc_spec(999$a{^1=\1}, indicator1) indicator1: "Z"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("999$a{^1=\1}", indicator1); retain_field(indicator1)' ); my $record = $importer->first; is_deeply $record->{indicator1}, 'Z', 'marc_spec(999$a{^1=\1}, indicator1)'; } note 'marc_spec(650[1]{245^1=\1}, indicator1) indicator1: undef'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650[1]{245^1=\1}", indicator1); retain_field(indicator1)' ); my $record = $importer->first; ok !$record->{indicator1}, 'marc_spec(650[1]{245^1=\1}, indicator1)'; } note 'marc_spec(650[1]{245^2=\1}, indicator2) indicator2: "Beta"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650[1]{245^2=\1}", indicator2); retain_field(indicator2)' ); my $record = $importer->first; is_deeply $record->{indicator2}, 'Beta', 'marc_spec(650[1]{245^2=\1}, indicator2)'; } note 'marc_spec(650[1]{245^2=\0}, indicator2) indicator2: undef'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650[1]{245^2=\0}", indicator2); retain_field(indicator2)' ); my $record = $importer->first; ok !$record->{indicator2}, 'marc_spec(650[1]{245^2=\0}, indicator2)'; } note 'marc_spec(650[1]{245^1=\0}{245^2=\1}, indicators) indicator1: "Beta"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650[1]{245^1=\0}{245^2=\1}", indicators); retain_field(indicators)' ); my $record = $importer->first; is_deeply $record->{indicators}, 'Beta', 'marc_spec(650[1]{245^1=\0}{245^2=\1}, indicators)'; } note 'marc_spec(650[1]{245^1=\0}{245^2=\0}, indicators) indicator2: undef'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("650[1]{245^1=\0}{245^2=\0}", indicators); retain_field(indicators)' ); my $record = $importer->first; ok !$record->{indicators}, 'marc_spec(650[1]{245^1=\0}{245^2=\0}, indicators)'; } note 'marc_spec(999{245^2=\0|$a=\Y}, or) or: "XY"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("999{245^2=\0|$a=\Y}", or); retain_field(or)' ); my $record = $importer->first; is_deeply $record->{or}, 'XY', 'marc_spec(999{245^2=\0|$a=\Y}, or)'; } note 'marc_spec(999$a[#]{245^2=\0|$a=\Y}, or) or: "Y"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("999$a[#]{245^2=\0|$a=\Y}", or); retain_field(or)' ); my $record = $importer->first; is_deeply $record->{or}, 'Y', 'marc_spec(999$a[#]{245^2=\0|$a=\Y}, or)'; } note 'marc_spec(999$a[#]{245^1=\0}{245^2=\0}{$a=\Y}, and) and: undef'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("999$a[#]{245^1=\0}{245^2=\0}{$a=\Y}", and); retain_field(and)' ); my $record = $importer->first; ok !$record->{and}, 'marc_spec(999$a[#]{245^1=\0}{245^2=\0}{$a=\Y}, and)'; } note 'marc_spec(999$a[#]{245^1=\0}{245^2=\1}{$a=\Y}, and) and: "Y"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("999$a[#]{245^1=\0}{245^2=\1}{$a=\Y}", and); retain_field(and)' ); my $record = $importer->first; is_deeply $record->{and}, 'Y', 'marc_spec(999$a[#]{245^1=\0}{245^2=\1}{$a=\Y}, and)'; } note 'marc_spec(999$a[#]{245^1=\0}{245^2=\1}{$a=\Foo|$a=\Y}, and) and: "Y"'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_spec("999$a[#]{245^1=\0}{245^2=\1}{$a=\Foo|$a=\Y}", and); retain_field(and)' ); my $record = $importer->first; is_deeply $record->{and}, 'Y', 'marc_spec(999$a[#]{245^1=\0}{245^2=\1}{$a=\Foo|$a=\Y}, and)'; } done_testing; Fix000755000765000024 014137142137 20744 5ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandumarc_add.t100644000765000024 363014137142137 23025 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Fix#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use Catmandu::Fix; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_add'; use_ok $pkg; } require_ok $pkg; my $fixer = Catmandu::Fix->new(fixes => [ q|add_field(my.deep.field,foo)|, q|add_field(my.deep.array.$append,red)|, q|add_field(my.deep.array.$append,green)|, q|add_field(my.deep.array.$append,blue)|, q|marc_add('999', ind1 => 4 , ind2 => 1 , a => 'test')| , q|marc_add('998', ind1 => 4 , ind2 => 1 , a => '$.my.deep.field')| , q|marc_add('997', ind1 => 4 , ind2 => 1 , a => '$.my.deep.array')| , ]); my $record = $fixer->fix({}); ok exists $record->{record}, 'created a marc record'; is $record->{record}->[0]->[0] , '999', 'created 999 tag'; is $record->{record}->[0]->[1] , '4', 'created 999 ind1'; is $record->{record}->[0]->[2] , '1', 'created 999 ind2'; is $record->{record}->[0]->[3] , 'a', 'created 999 subfield a'; is $record->{record}->[0]->[4] , 'test', 'created 999 subfield a value'; is $record->{record}->[1]->[0] , '998', 'created 998 tag'; is $record->{record}->[1]->[1] , '4', 'created 998 ind1'; is $record->{record}->[1]->[2] , '1', 'created 998 ind2'; is $record->{record}->[1]->[3] , 'a', 'created 998 subfield a'; is $record->{record}->[1]->[4] , 'foo', 'created 998 subfield a value'; is $record->{record}->[2]->[0] , '997', 'created 997 tag'; is $record->{record}->[2]->[1] , '4', 'created 997 ind1'; is $record->{record}->[2]->[2] , '1', 'created 997 ind2'; is $record->{record}->[2]->[3] , 'a', 'created 997 subfield a'; is $record->{record}->[2]->[4] , 'red', 'created 997 subfield a value'; is $record->{record}->[2]->[5] , 'a', 'created 997 subfield a'; is $record->{record}->[2]->[6] , 'green', 'created 997 subfield a value'; is $record->{record}->[2]->[7] , 'a', 'created 997 subfield a'; is $record->{record}->[2]->[8] , 'blue', 'created 997 subfield a value'; done_testing; marc_cut.t100644000765000024 1331014137142137 23104 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Fix#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_cut'; use_ok $pkg; } require_ok $pkg; my $mrc = <<'MRC'; 92005291 Title / Name X Y Z MRC note 'marc_cut(001,cntrl)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_cut(001,cntrl)' ); my $record = $importer->first; is_deeply $record->{cntrl}, [ { tag => '001', ind1 => ' ', ind2 => ' ', content => " 92005291 " } ], 'marc_cut(001,cntrl)'; ok ! marc_has($record,'001') , '001 deleted'; } note 'marc_cut(245,title)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_cut(245,title)' ); my $record = $importer->first; is_deeply $record->{title}, [ { tag => '245', ind1 => '1', ind2 => '0', subfields => [ { a => 'Title / '}, { c => 'Name' }, ] } ], 'marc_map(245,title)'; ok ! marc_has($record,'245') , '245 deleted'; } note 'marc_cut(245a,title)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_cut(245a,title)' ); my $record = $importer->first; is_deeply $record->{title}, [ { tag => '245', ind1 => '1', ind2 => '0', subfields => [ { a => 'Title / '}, { c => 'Name' }, ] } ], 'marc_map(245a,title)'; ok ! marc_has($record,'245') , '245 deleted'; } note 'marc_cut(245x,title)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_cut(245x,title)' ); my $record = $importer->first; is_deeply $record->{title}, [ ], 'marc_map(245x,title)'; ok marc_has($record,'245') , '245 still exists'; } note 'marc_cut(245a,title,equals:"Title / ")'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_cut(245a,title,equals:"Title / ");' ); my $record = $importer->first; is_deeply $record->{title}, [ { tag => '245', ind1 => '1', ind2 => '0', subfields => [ { a => 'Title / '}, { c => 'Name' }, ] } ], 'marc_map(245a,title,equals:"Title / ")'; ok ! marc_has($record,'245') , '245 deleted'; } note 'marc_cut(999,local)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_cut(999,local)' ); my $record = $importer->first; is_deeply $record->{local}, [ { tag => '999', ind1 => ' ', ind2 => ' ', subfields => [ { a => 'X'}, { a => 'Y'} ] }, { tag => '999', ind1 => ' ', ind2 => ' ', subfields => [ { a => 'Z'} ] } ], 'marc_cut(999,local)'; ok ! marc_has($record,'999') , '999 deleted'; } note 'marc_cut(...,all)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_cut(...,all);' ); my $record = $importer->first; is_deeply $record->{all}, [ { tag => 'LDR', ind1 => ' ', ind2 => ' ', content => " " }, { tag => '001', ind1 => ' ', ind2 => ' ', content => " 92005291 " }, { tag => '245', ind1 => '1', ind2 => '0', subfields => [ { a => 'Title / '}, { c => 'Name' }, ] }, { tag => '999', ind1 => ' ', ind2 => ' ', subfields => [ { a => 'X'}, { a => 'Y'} ] }, { tag => '999', ind1 => ' ', ind2 => ' ', subfields => [ { a => 'Z'} ] } ], 'marc_cut(...,all)'; is_deeply $record->{record} , [] , 'marc record is empty'; } done_testing; sub marc_has { my ($record,$tag) = @_; for (@{$record->{record}}) { return 1 if $_->[0] eq $tag; } return 0; } marc_map.t100644000765000024 504014137142137 23047 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Fix#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use Catmandu::Fix; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_map'; use_ok $pkg; } require_ok $pkg; my $fixer = Catmandu::Fix->new(fixes => ['t/test.fix']); my $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); my $records = $fixer->fix($importer)->to_array; is $records->[0]->{my}{id}, 'fol05731351 ', q|fix: marc_map('001','my.id');|; is $records->[0]->{my}{title}, 'ActivePerl with ASP and ADO /', q|fix: marc_map('245a','my.title');|; is_deeply $records->[0]->{my}{split_title}, ['ActivePerl with ASP and ADO /', 'Tobias Martinsson.'], q|fix: marc_map('245','my.split.title','-split', 1);|; # field 666 does not exist in camel.mrc # the '$append' fix creates $my->{'references'} hash key with empty array ref as value ok !$records->[0]->{'my'}{'references'}, q|fix: marc_map('666', 'my.references.$append');|; is $records->[0]->{my}{substr_id}, "057" , 'substring'; is $records->[0]->{my}{substr_id2}->[0], "057", 'substring + split'; ok !exists $records->[0]->{my}{failed_substr_id} , 'failed substring'; ok $records->[0]->{record} =~ /marc:datafield/ , "marcxml"; is $records->[0]->{my}->{found005} , 1 , 'if marc_match'; is $records->[0]->{my}->{found008} , 1 , 'if marc_match'; is $records->[0]->{my}->{pluck} , "M33 2000QA76.73.P22" , 'pluck feature'; is $records->[0]->{my}->{has_title}, 'Y' , 'value feature'; is $records->[0]->{has_260c}, 'OK' , 'value subfield'; ok ! $records->[0]->{has_260h}, 'value subfield'; is $records->[0]->{has_500_not_c}, 'OK' , '^c value subfield'; ok ! $records->[0]->{has_500_not_a}, '^a value subfield'; is $records->[0]->{has_800_0} , '0' , '800/0'; # gh#46: Test for subfield codes 0 { my $mrc = '00093nam a2200037 c 45001000055000001 aPoe, Curtis0(DE-601)7303424090(DE-588)1028093195'; my $fixer = Catmandu::Fix->new( fixes => [ 'marc_map(100,subf_all,join => "~")', 'marc_map(1000,subf_zero,join => "~")', 'marc_map(1000a,subf_zero_pluck,join => "~",pluck => 1)', ] ); my $importer = Catmandu::Importer::MARC->new( file => \$mrc, type => 'ISO' ); my $record = $fixer->fix($importer)->first; is( $record->{subf_all}, 'Poe, Curtis~(DE-601)730342409~(DE-588)1028093195', 'all subfields' ); is( $record->{subf_zero}, '(DE-601)730342409~(DE-588)1028093195', 'subfields 0' ); is( $record->{subf_zero_pluck}, '(DE-601)730342409~(DE-588)1028093195~Poe, Curtis', 'subfields 0 pluck' ); } done_testing; marc_set.t100644000765000024 275714137142137 23101 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Fix#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use Catmandu::Fix; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_set'; use_ok $pkg; } require_ok $pkg; my $fixer = Catmandu::Fix->new(fixes => [q|marc_set('LDR/0-3','XXX')|,q|marc_map('LDR','leader')|]); my $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); my $record = $fixer->fix($importer->first); like $record->{leader}, qr/^XXX/, q|fix: marc_set('LDR/0-3','XXX');|; #--- { $fixer = Catmandu::Fix->new(fixes => [q|marc_set('100x','XXX')|,q|marc_map('100x','test')|]); $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); $record = $fixer->fix($importer->first); like $record->{test}, qr/^XXX$/, q|fix: marc_set('100x','XXX');|; } #--- { $fixer = Catmandu::Fix->new(fixes => [q|marc_set('100[1]a','XXX')|,q|marc_map('100a','test')|]); $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); $record = $fixer->fix($importer->first); like $record->{test}, qr/^XXX$/, q|fix: marc_set('100[1]a','XXX');|; } #--- { $fixer = Catmandu::Fix->new(fixes => [ q|add_field(my.deep.field,XXX)|, q|marc_set('100[1]a','$.my.deep.field')|, q|marc_map('100a','test')| ]); $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); $record = $fixer->fix($importer->first); like $record->{test}, qr/^XXX$/, q|fix: marc_set('100[1]a','$.my.deep.field'');|; } done_testing; marc_xml.t100644000765000024 473614137142137 23105 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Fix#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_xml'; use_ok $pkg; } require_ok $pkg; my $mrc = <<'MRC'; 92005291 Title / Name X Y Z X Y Z MRC note 'marc_xml(record)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_xml(record)' ); my $record = $importer->first; like $record->{record} , qr/^importer( 'MARC', file => \$mrc, type => 'XML', fix => 'copy_field(record,record2); marc_xml(record2)' ); my $record = $importer->first; like $record->{record2} , qr/^{record}->[0]->[0] , 'LDR' , 'still have a record'; } note 'marc_xml(record2)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'move_field(record,record2); marc_xml(record2)' ); my $record = $importer->first; like $record->{record2} , qr/^{record} , 'still have a record'; } note 'marc_xml(record,reverse:1)'; { my $fixer = Catmandu::Fix->new(fixes => [q|marc_xml(record,reverse:1)|] ); my $result = $fixer->fix({ record => $mrc }); ok $result , 'got a result'; is ref($result->{record}) , 'ARRAY' , 'got an array'; is $result->{record}->[0]->[0], 'LDR' , 'smells like marc'; } done_testing; Exporter000755000765000024 014137142137 22026 5ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/CatmanduMARC.t100644000765000024 26514137142137 23060 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Exporter#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Exporter::MARC'; use_ok $pkg; } require_ok $pkg; done_testing; marc_copy.t100644000765000024 1255714137142137 23277 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Fix#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_copy'; use_ok $pkg; } require_ok $pkg; my $mrc = <<'MRC'; 92005291 Title / Name X Y Z MRC note 'marc_copy(001,cntrl)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(001,cntrl); retain_field(cntrl)' ); my $record = $importer->first; is_deeply $record->{cntrl}, [ { tag => '001', ind1 => ' ', ind2 => ' ', content => " 92005291 " } ], 'marc_copy(001,cntrl)'; } note 'marc_copy(245,title)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(245,title); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, [ { tag => '245', ind1 => '1', ind2 => '0', subfields => [ { a => 'Title / '}, { c => 'Name' }, ] } ], 'marc_map(245,title)'; } note 'marc_copy(245a,title)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(245a,title); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, [ { tag => '245', ind1 => '1', ind2 => '0', subfields => [ { a => 'Title / '}, { c => 'Name' }, ] } ], 'marc_map(245a,title)'; } note 'marc_copy(245x,title)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(245x,title); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, [ ], 'marc_map(245x,title)'; } note 'marc_copy(245a,title,equals:"Title / ")'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(245a,title,equals:"Title / "); retain_field(title)' ); my $record = $importer->first; is_deeply $record->{title}, [ { tag => '245', ind1 => '1', ind2 => '0', subfields => [ { a => 'Title / '}, { c => 'Name' }, ] } ], 'marc_map(245a,title,equals:"Title / ")'; } note 'marc_copy(999,local)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(999,local); retain_field(local)' ); my $record = $importer->first; is_deeply $record->{local}, [ { tag => '999', ind1 => ' ', ind2 => ' ', subfields => [ { a => 'X'}, { a => 'Y'} ] }, { tag => '999', ind1 => ' ', ind2 => ' ', subfields => [ { a => 'Z'} ] } ], 'marc_copy(999,local)'; } note 'marc_copy(...,all)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(...,all); retain_field(all)' ); my $record = $importer->first; is_deeply $record->{all}, [ { tag => 'LDR', ind1 => ' ', ind2 => ' ', content => " " }, { tag => '001', ind1 => ' ', ind2 => ' ', content => " 92005291 " }, { tag => '245', ind1 => '1', ind2 => '0', subfields => [ { a => 'Title / '}, { c => 'Name' }, ] }, { tag => '999', ind1 => ' ', ind2 => ' ', subfields => [ { a => 'X'}, { a => 'Y'} ] }, { tag => '999', ind1 => ' ', ind2 => ' ', subfields => [ { a => 'Z'} ] } ], 'marc_copy(...,all)'; } done_testing; marc_sort.t100644000765000024 573714137142137 23276 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Fix#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use Catmandu::Fix; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_sort'; use_ok $pkg; } require_ok $pkg; { my $record = { _id => '000000002', record => [ [ '001', ' ', ' ', '_', '000000002' ], [ 'LDR', ' ', ' ', '_', '00209nam a2200097 i 4500' ], [ '022', ' ', ' ', 'a', '1940-5758' ], [ '245', '1', '0', 'a', 'Catmandu Test' ], [ '650', ' ', '0', 'a', 'RegEx' ], [ '008', ' ', ' ', '_', '050601s1921 xx |||||||||||||| ||dut ' ], [ '650', ' ', '0', 'a', 'Perl' ] ] }; my $record_sorted = { _id => '000000002', record => [ [ 'LDR', ' ', ' ', '_', '00209nam a2200097 i 4500' ], [ '001', ' ', ' ', '_', '000000002' ], [ '008', ' ', ' ', '_', '050601s1921 xx |||||||||||||| ||dut ' ], [ '022', ' ', ' ', 'a', '1940-5758' ], [ '245', '1', '0', 'a', 'Catmandu Test' ], [ '650', ' ', '0', 'a', 'RegEx' ], [ '650', ' ', '0', 'a', 'Perl' ] ] }; my $fixer = Catmandu::Fix->new( fixes => [q|marc_sort()|] ); $record = $fixer->fix($record); is_deeply $record, $record_sorted, 'MARC ISO record sorted'; } { my $record = { _id => '000000002', record => [ [ '001', ' ', ' ', '_', '000000002' ], [ 'LDR', ' ', ' ', '_', '00209nam a2200097 i 4500' ], [ '022', ' ', ' ', 'a', '1940-5758' ], [ 'SID', ' ', ' ', 'a', 'Z39' ], [ 'Z30', ' ', ' ', 'l', 'RUG01' ], [ 'CRD', ' ', ' ', 'a', 'L1819970730' ], [ 'FMT', ' ', ' ', '_', 'BK' ], [ '245', '1', '0', 'a', 'Catmandu Test' ], [ '650', ' ', '0', 'a', 'RegEx' ], [ '008', ' ', ' ', '_', '050601s1921 xx |||||||||||||| ||dut ' ], [ '650', ' ', '0', 'a', 'Perl' ] ] }; my $record_sorted = { _id => '000000002', record => [ [ 'FMT', ' ', ' ', '_', 'BK' ], [ 'LDR', ' ', ' ', '_', '00209nam a2200097 i 4500' ], [ '001', ' ', ' ', '_', '000000002' ], [ '008', ' ', ' ', '_', '050601s1921 xx |||||||||||||| ||dut ' ], [ '022', ' ', ' ', 'a', '1940-5758' ], [ '245', '1', '0', 'a', 'Catmandu Test' ], [ '650', ' ', '0', 'a', 'RegEx' ], [ '650', ' ', '0', 'a', 'Perl' ], [ 'CRD', ' ', ' ', 'a', 'L1819970730' ], [ 'SID', ' ', ' ', 'a', 'Z39' ], [ 'Z30', ' ', ' ', 'l', 'RUG01' ] ] }; my $fixer = Catmandu::Fix->new( fixes => [q|marc_sort()|] ); $record = $fixer->fix($record); is_deeply $record, $record_sorted, 'MARC ALEPHSEQ record sorted'; } done_testing; marc_spec.t100644000765000024 1454614137142137 23257 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Fix#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use Catmandu::Fix; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_spec'; use_ok $pkg; } require_ok $pkg; my $fixer = Catmandu::Fix->new(fixes => ['t/marc_spec.fix']); my $importer = Catmandu::Importer::MARC->new( file => 't/camel9.mrc', type => "ISO" ); my $records = $fixer->fix($importer)->to_array; is $records->[0]->{my}{id}, 'fol05882032 ', q|fix: marc_spec('001', my.id);|; ok !defined $records->[0]->{my}{no}{field}, q|fix: marc_spec('000', my.no.field);|; #field 666 does not exist in camel.usmarc #he '$append' fix creates $my->{'references'} hash key with empty array ref as value ok !$records->[0]->{'my'}{'references'}, q|fix: marc_spec('666', my.references.$append);|; is_deeply $records->[0]->{'my'}{'references2'}, [ 'first', 'IMchF' ], q|fix: add_field(my.references2.$first, 'first'); marc_spec('003', my.references2.$append);|; is $records->[0]->{my}{title}{all}, 'Cross-platform Perl /Eric F. Johnson.', q|fix: marc_spec('245', my.title.all);|; is $records->[0]->{my}{title}{default}, 'the title', q|fix: marc_spec('245', my.title.default, value:'the title');|; is $records->[0]->{my}{subjects}{all}, 'Perl (Computer program language)Web servers.Cross-platform software development.', q|fix: marc_spec('650', my.subjects.all);|; is $records->[0]->{my}{subjects}{joined}, 'Perl (Computer program language)###Web servers.###Cross-platform software development.', q|fix: marc_spec('650', my.subjects.joined, join:'###');|; is_deeply $records->[0]->{my}{append}{subjects}, [ 'Perl (Computer program language)', 'Web servers.', 'Cross-platform software development.' ], q|fix: marc_spec('650', my.append.subjects.$append);|; is_deeply $records->[0]->{my}{split}{subjects}, [ 'Perl (Computer program language)', 'Web servers.', 'Cross-platform software development.' ], q|fix: marc_spec('650', my.split.subjects, split:1);|; is_deeply $records->[0]->{my}{append}{split}{subjects}, [ [ "Perl (Computer program language)", "Web servers.", "Cross-platform software development." ] ], q|fix: marc_spec('650', my.append.split.subjects.$append, split:1);|; is_deeply $records->[0]->{my}{fields}{indicators10}, ['Cross-platform Perl /Eric F. Johnson.'], q|fix: marc_spec('...{^1=\1}{^2=\0}', my.fields.indicators10.$append);|; is scalar @{$records->[0]->{my}{fields}{indicators_0}}, 9, q|fix: marc_spec('...{^2=\0}', my.fields.indicators_0, split:1);|; is $records->[0]->{my}{ldr}{all}, '00696nam 22002538a 4500', q|fix: marc_spec('LDR', my.ldr.all);|; is $records->[0]->{my}{firstcharpos}{ldr}, '0069', q|fix: marc_spec('LDR', my.firstcharpos.ldr);|; is $records->[0]->{my}{lastcharpos}{ldr}, '4500', q|fix: marc_spec('LDR/#-3', my.lastcharpos.ldr);|; is $records->[0]->{my}{title}{proper}, 'Cross-platform Perl /', q|fix: marc_spec('245$a', my.title.proper);|; is $records->[0]->{my}{title}{indicator}{proper}, 'Cross-platform Perl /', q|fix: marc_spec('245$a{^1=\1}{^2=\0}', my.title.indicator.proper);|; is $records->[0]->{my}{title}{charpos}, 'Cr', q|fix: marc_spec('245$a/0-1', my.title.charpos);|; is $records->[0]->{my}{second}{subject}, 'Web servers.', q|fix: marc_spec('650[1]', my.second.subjects);|; is $records->[0]->{my}{last}{subject}, 'Cross-platform software development.', q|fix: marc_spec('650[#]', my.last.subjects);|; is_deeply $records->[0]->{my}{two}{split}{subjects}, ['Perl (Computer program language)', 'Web servers.'], q|fix: marc_spec('650[0-1]', my.two.split.subjects, split:1);|; is $records->[0]->{my}{two}{join}{subjects}, 'Web servers.###Cross-platform software development.', q|fix: marc_spec('650[#-1]', my.two.join.subjects, join:'###');|; is $records->[0]->{my}{isbn}{number}, '0764547291 (alk. paper)0491001304test0491001304', q|fix: marc_spec('020$a[0]', my.isbn.number);|; is $records->[0]->{my}{isbn}{numbers}, '0764547291 (alk. paper)0491001304', q|fix: marc_spec('020$a[0]', my.isbn.numbers);|; ok !defined $records->[0]->{my}{isbn}{qual}{none}, q|fix: marc_spec('020[0]$q[0]', my.isbn.qual.none);|; is $records->[0]->{my}{isbn}{qual}{first}, 'black leather', q|fix: marc_spec('020$q[0]', my.isbn.qual.first);|; is $records->[0]->{my}{isbn}{qual}{second}, 'blue pigskin', q|fix: marc_spec('020$q[1]', my.isbn.qual.second);|; is $records->[0]->{my}{isbn}{qual}{last}, 'easel binding', q|fix: marc_spec('020$q[#]', my.isbn.qual.last);|; is_deeply $records->[0]->{my}{isbns}{all}, [ "0764547291 (alk. paper)", "0491001304", "test0491001304", "black leather", "blue pigskin", "easel binding" ], q|fix: marc_spec('020$q$a', my.isbns.all, split:1);|; is_deeply $records->[0]->{my}{isbns}{pluck}{all}, [ "0764547291 (alk. paper)", "black leather", "blue pigskin", "easel binding", "0491001304", "test0491001304" ], q|fix: marc_spec('020$q$a', my.isbns.all, split:1, pluck:1);|; is_deeply $records->[0]->{my}{isbn}{qual}{other}, [ "test0491001304", "easel binding" ], q|fix: marc_spec('020$q[#]$a[1]', my.isbn.qual.other, split:1);|; is_deeply $records->[0]->{my}{isbn}{qual}{range}, [ "0764547291 (alk. paper)", "0491001304", "test0491001304", "blue pigskin", "easel binding" ], q|fix: marc_spec('020$q[#-1]$a[0-1]', my.isbn.qual.range, split:1);|; is_deeply $records->[0]->{my}{isbn}{qual}{substring}{other}, [ "4", "easel" ], q|fix: marc_spec('020$q[#]/0-4$a[1]/#-0', my.isbn.qual.substring.other, split:1);|; is $records->[0]->{my}{level3}{inverted}, '2000.', q|fix: marc_spec('260[#]$b$a', my.level3.inverted, invert:1);|; is $records->[0]->{my}{level2}{inverted}, 'black leatherblue pigskin', q|fix: marc_spec('020$a$q[#]', my.level2.inverted, invert:1);|; is $records->[0]->{my}{level1}{inverted}, 'ebinding', q|fix: marc_spec('020[#]$a$q[#]/1-5', my.level1.inverted, invert:1);|; is $records->[0]->{my}{multi}{level1}{inverted}, 'bleatherbigskinebinding', q|fix: marc_spec('020[#]$a$q[0]/1-5$q[1]/1-5$q[2]/1-5', my.multi.level1.inverted, invert:1);|; is $records->[0]->{my}{nullvalue} , '0' , q|fix: marc_spec('008/0', my.nullvalue);|; done_testing; Importer000755000765000024 014137142137 22017 5ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/CatmanduMARC.t100644000765000024 26514137142137 23051 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Importer#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Importer::MARC'; use_ok $pkg; } require_ok $pkg; done_testing; marc_paste.t100644000765000024 723614137142137 23417 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Fix#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_paste'; use_ok $pkg; } require_ok $pkg; my $mrc = <<'MRC'; 92005291 Title / Name X Y Z MRC note 'marc_copy(001,cntrl); set_field(cntrl.0.tag,002); marc_paste(cntrl)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(001,cntrl); set_field(cntrl.0.tag,002); marc_paste(cntrl)' ); my $record = $importer->first; is_deeply $record->{record}->[-1], [ '002' , ' ' , ' ' , '_' , ' 92005291 ' ] , 'marc_copy(001,cntrl)'; } note 'marc_copy(001,cntrl); set_field(cntrl.0.tag,002); marc_paste(cntrl,at:245)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(001,cntrl); set_field(cntrl.0.tag,002); marc_paste(cntrl,at:245)' ); my $record = $importer->first; is_deeply $record->{record}->[-3], [ '002' , ' ' , ' ' , '_' , ' 92005291 ' ] , 'marc_copy(001,cntrl)'; } note 'marc_copy(001,cntrl); set_field(cntrl.0.tag,002); marc_paste(cntrl,at:245c)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(001,cntrl); set_field(cntrl.0.tag,002); marc_paste(cntrl,at:245c)' ); my $record = $importer->first; is_deeply $record->{record}->[-3], [ '002' , ' ' , ' ' , '_' , ' 92005291 ' ] , 'marc_copy(001,cntrl)'; } note 'marc_copy(001,cntrl); set_field(cntrl.0.tag,002); marc_paste(cntrl,at:245x)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(001,cntrl); set_field(cntrl.0.tag,002); marc_paste(cntrl,at:245x)' ); my $record = $importer->first; is_deeply $record->{record}->[-3], [ '245' , '1' , '0' , 'a' , 'Title / ', 'c' , 'Name' ] , 'marc_copy(001,cntrl)'; } note 'marc_copy(001,cntrl); set_field(cntrl.0.tag,002); marc_paste(cntrl,at:245c,equals:Name)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(001,cntrl); set_field(cntrl.0.tag,002); marc_paste(cntrl,at:245c,equals:Name)' ); my $record = $importer->first; is_deeply $record->{record}->[-3], [ '002' , ' ' , ' ' , '_' , ' 92005291 ' ] , 'marc_copy(001,cntrl)'; } note 'marc_copy(001,cntrl); set_field(cntrl.0.tag,002); marc_paste(cntrl,at:245,equals:"Title / Name")'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'marc_copy(001,cntrl); set_field(cntrl.0.tag,002); marc_paste(cntrl,at:245,equals:"Title / Name")' ); my $record = $importer->first; is_deeply $record->{record}->[-3], [ '002' , ' ' , ' ' , '_' , ' 92005291 ' ] , 'marc_copy(001,cntrl)'; } done_testing; Validator000755000765000024 014137142137 22143 5ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/CatmanduMARC.t100644000765000024 127014137142137 23212 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Validatoruse strict; use warnings; use Test::Exception; use Test::More; use Catmandu::Importer::MARC; use Catmandu::Validator::MARC; use Catmandu qw(importer); require_ok( 'Catmandu::Validator::MARC' ); can_ok('Catmandu::Validator::MARC', ('validate_data')); # load default MARC schema my $validator = Catmandu::Validator::MARC->new(); my $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); my @errors; $importer->each( sub { my $record = shift; unless($validator->validate($record)){ push @errors, $_ for @{$validator->last_errors()}; } }); is (@errors, 1, 'got one error'); is ($errors[0]->{tag}, 100, 'error in field 100'); done_testing;old-new-internal-syntax.t100644000765000024 217314137142137 23515 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/tuse strict; use warnings; use Catmandu::Importer::JSON; use Catmandu::Importer::MARC; use Test::More tests => 8; my $fixer = Catmandu::Fix->new(fixes => ['marc_map("245a","title"); marc_map("500a","test")']); my $importer = Catmandu::Importer::JSON->new( file => 't/old_new.json' ); my $records = $fixer->fix($importer)->to_array; ok(@$records == 2 , "Found 2 records"); ok(defined($records->[0]->{title}), "0 has title"); ok(defined($records->[1]->{title}), "1 has title"); is($records->[0]->{title},'ActivePerl with ASP and ADO /',"0 has correct title"); is($records->[1]->{title},'ActivePerl with ASP and ADO /',"1 has correct title"); $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); $records = $fixer->fix($importer)->to_array; ok(defined($records->[0]->{title}), "1 has title"); is($records->[0]->{title},'ActivePerl with ASP and ADO /',"0 has correct title"); ok(&f245_contains_no_underscore($records->[0]),"MARC importer using the new syntax"); sub f245_contains_no_underscore { my $record = shift; for (@{$record->{record}}) { return 0 if ($_->[0] eq '245' && $_->[3] eq '_'); } return 1; } Fix000755000765000024 014137142137 21247 5ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandumarc_add.pm100644000765000024 323014137142137 23475 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandu/Fixpackage Catmandu::Fix::marc_add; use Catmandu::Sane; use Catmandu::MARC; use Moo; use Catmandu::Fix::Has; with 'Catmandu::Fix::Inlineable'; our $VERSION = '1.271'; has marc_path => (fix_arg => 1); has subfields => (fix_arg => 'collect'); sub fix { my ($self, $data) = @_; my $marc_path = $self->marc_path; my @subfields = @{$self->subfields}; return Catmandu::MARC->instance->marc_add($data,$marc_path,@subfields); } =head1 NAME Catmandu::Fix::marc_add - add new fields to marc =head1 SYNOPSIS # Set literal values marc_add('900', a, 'test' , 'b', test) marc_add('900', ind1 , ' ' , a, 'test' , 'b', test) marc_add('900', ind1 , ' ' , a, 'test' , 'b', test) # Set control fields marc_add('009','_','23123131') # Copy data from an other field (when the field value is an array, the # subfield will be repeated) marc_add('900', a, '$.my.data.field') =head1 DESCRIPTION Add a new subfield to MARC record. =head1 METHODS =head2 marc_add(MARC_FIELD, SUBFIELD, VALUE, [ SUBFIELD, VALUE , ... ]) Add new subfields to a MARC record. The MARC_FIELD should contain a marc field name, all other arguments contain the subfields to be added. By default literal values will be added. To point to an existing value in a record use the JSON_PATH syntax with a dollar '$.' added in front. =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_add as => 'marc_add'; my $data = { record => [...] }; $data = marc_add($data,'245','a','title'); =head1 SEE ALSO L, L, L, L =cut 1; marc_cut.pm100644000765000024 1200414137142137 23557 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandu/Fixpackage Catmandu::Fix::marc_cut; use Catmandu::Sane; use Catmandu::MARC; use Moo; use Catmandu::Fix::Has; with 'Catmandu::Fix::Base'; our $VERSION = '1.13'; has marc_path => (fix_arg => 1); has path => (fix_arg => 1); has equals => (fix_opt => 1); sub emit { my ($self,$fixer) = @_; my $path = $fixer->split_path($self->path); my $marc_obj = Catmandu::MARC->instance; # Precompile the marc_path to gain some speed my $marc_context = $marc_obj->compile_marc_path($self->marc_path, subfield_wildcard => 0); my $marc = $fixer->capture($marc_obj); my $marc_path = $fixer->capture($marc_context); my $equals = $fixer->capture($self->equals); my $var = $fixer->var; my $result = $fixer->generate_var; my $current_value = $fixer->generate_var; my $perl = ""; $perl .= $fixer->emit_declare_vars($current_value, "[]"); $perl .=<marc_copy( ${var}, ${marc_path}, ${equals},1) ) { ${result} = ref(${result}) ? ${result} : [${result}]; for ${current_value} (\@{${result}}) { EOF $perl .= $fixer->emit_create_path( $var, $path, sub { my $var2 = shift; "${var2} = ${current_value}" } ); $perl .=< except it will also remove all mathincg fields from the MARC record =head1 METHODS =head2 marc_cut(MARC_PATH, JSON_PATH, [equals: REGEX]) Cut this MARC fields referred by a MARC_PATH to a JSON_PATH. hen an C value has been provided, then only the MARC_PATHs with a value equal to C will be cut to JSON_PATH. When the MARC_PATH points to a subfield, then the subfield value need to match C. When the MARC_PATH points multiple subfields, then a concatinated string value needs to match C: Data: 100 $aMy$bField. # cut only the 100 fields which have a $a subfield marc_cut(100a,tmp) # cut only the 100 fields with have a $a subfield matching 'My' marc_cut(100a,tmp,equals:"My") # cut only the 100 fields with have a concatinated string value 'MyField.' # (equals is an regex, the period "." needs to be escaped "\.") marc_cut(100,tmp,equals:"MyField\.") # cut only the 100 fields which have a "." at the end marc_cut(100,tmp,equals:"\.$") More examples: # Cut all the 300 fields marc_cut(300,tmp) # Cut all the 300 fields with indicator 1 = 1 marc_cut(300[1],tmp) # Cut all the 300 fields which have subfield c marc_cut(300c,tmp) # Cut all the 300 fields which have subfield c equal to 'ABC' marc_cut(300c,tmp,equals:"^ABC") The JSON_PATH C will contain an array with one item per field that was cut. Each item is a hash containing the following fields: tmp.*.tag - The names of the MARC field tmp.*.ind1 - The value of the first indicator tmp.*.ind2 - The value of the second indicator tmp.*.subfields - An array of subfield items. Each subfield item is a hash of the subfield code and subfield value E.g. tmp: - tag: '300' ind1: ' ' ind2: ' ' subfields: - a: 'blabla:' - v: 'test123' - c: 'ok123' These JSON paths can be used like: # Set the first indicator of all 300 fields do marc_each(var:this) if all_match(this.tag,300) # Set the first indicator to 1 set_field(this.ind1,1) marc_paste(this) end end # Capitalize all the v subfields of 300 do marc_each(var:this) if all_match(this.tag,300) do list(path:this.subfields, var:loop) if (exists(loop.v)) upcase(loop.v) end end marc_paste(this) end end =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_copy as => 'marc_cut'; my $data = { record => ['650', ' ', 0, 'a', 'Perl'] }; $data = marc_cut($data,'650','subject'); print $data->{subject}->[0]->{tag} , "\n"; # '650' print $data->{subject}->[0]->{ind1} , "\n"; # ' ' print $data->{subject}->[0]->{ind2} , "\n"; # 0 print $data->{subject}->[0]->{subfields}->[0]->{a} , "\n"; # 'Perl' =head1 SEE ALSO =over =item * L =item * L =back =head1 LICENSE AND COPYRIGHT This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information. =cut marc_map.pm100644000765000024 1576014137142137 23555 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandu/Fixpackage Catmandu::Fix::marc_map; use Catmandu::Sane; use Catmandu::MARC; use Moo; use Catmandu::Fix::Has; with 'Catmandu::Fix::Base'; our $VERSION = '1.271'; has marc_path => (fix_arg => 1); has path => (fix_arg => 1); has split => (fix_opt => 1); has join => (fix_opt => 1); has value => (fix_opt => 1); has pluck => (fix_opt => 1); has nested_arrays => (fix_opt => 1); sub emit { my ($self,$fixer) = @_; my $path = $fixer->split_path($self->path); my $key = $path->[-1]; my $marc_obj = Catmandu::MARC->instance; # Precompile the marc_path to gain some speed my $marc_context = $marc_obj->compile_marc_path($self->marc_path,subfield_wildcard => 1); my $marc = $fixer->capture($marc_obj); my $marc_path = $fixer->capture($marc_context); my $marc_opt = $fixer->capture({ '-join' => $self->join // '' , '-split' => $self->split // 0 , '-pluck' => $self->pluck // 0 , '-nested_arrays' => $self->nested_arrays // 0 , '-value' => $self->value , '-force_array' => ($key =~ /^(\$.*|[0-9]+)$/) ? 1 : 0 }); my $var = $fixer->var; my $result = $fixer->generate_var; my $current_value = $fixer->generate_var; my $perl = ""; $perl .= $fixer->emit_declare_vars($current_value, "[]"); $perl .=<marc_map( ${var}, ${marc_path}, ${marc_opt})) ) { ${result} = ref(${result}) ? ${result} : [${result}]; for ${current_value} (\@{${result}}) { EOF $perl .= $fixer->emit_create_path( $var, $path, sub { my $var2 = shift; "${var2} = ${current_value}" } ); $perl .=< specification to map MARC fields. For a more extensive MARC path implementation please take a look at Casten Klee's MARCSpec module: L =head1 METHODS =head2 marc_map(MARC_PATH, JSON_PATH, OPT:VAL, OPT2:VAL,...) Copy the value(s) of the data found at a MARC_PATH to a JSON_PATH. The MARC_PATH can point to a MARC field. For instance: marc_map('245',title) marc_map('020',isbn) The MARC_PATH can point to one or more MARC subfields. For instamce: marc_map('245a',title) marc_map('245ac',title) You can also use dollar signs to indicate subfields marc_map('245$a$c',title) Wildcards are allowed in the field names: # Map all the 200-fields to a title marc_map('2..'',title) To filter out specific fields indicators can be used: # Only map the MARC fields with indicator-1 is '1' to title marc_map('245[1,]',title) Also a substring of a field value can be mapped: # Map 008 position 35 to 37 to the language field marc_map('008/35-37',language) By default all matched fields in a MARC_PATH will be joined into one string. This behavior can be changed using one more more options (see below). Visit our Wiki L for a complete overview of all allowed mappings. =head1 OPTIONS =head2 split: 0|1 When split is set to 1 then all mapped values will be joined into an array instead of a string. # The subject field will contain an array of strings (one string # for each 500 field found) marc_map('500',subject, split: 1) # The subject field will contain a string marc_map('500', subject) =head2 join: Str By default all the values are joined into a string without a field separator. Use the join function to set the separator. # All subfields of the 245 field will be separated with a space " " marc_map('245',title, join: " ") =head2 pluck: 0|1 Be default, all subfields are added to the mapping in the order they are found in the record. Using the pluck option, one can select the required order of subfields to map. # First write the subfield-c to the title, then the subfield_a marc_map('245ca',title, pluck:1) =head2 value: Str Don't write the value of the MARC (sub)field to the JSON_PATH but the specified string value. # has_024_a will contain the value 'Y' if the MARC field 024 subfield-a # exists marc_map('024a',has_024_a,value:Y) =head2 nested_arrays: 0|1 When the split option is specified the output of the mapping will always be an array of strings (one string for each subfield found). Using the nested_array option the output will be an array of array of strings (one array item for each matched field, one array of strings for each matched subfield). =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_map as => 'marc_map'; my $data = { record => [...] }; $data = marc_map($data,'245a','title'); print $data->{title} , "\n"; =head1 SEE ALSO L L =cut marc_set.pm100644000765000024 303414137142137 23542 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandu/Fixpackage Catmandu::Fix::marc_set; use Catmandu::Sane; use Moo; use Catmandu::MARC; use Catmandu::Fix::Has; with 'Catmandu::Fix::Inlineable'; our $VERSION = '1.271'; has marc_path => (fix_arg => 1); has value => (fix_arg => 1); sub fix { my ($self,$data) = @_; my $marc_path = $self->marc_path; my $value = $self->value; return Catmandu::MARC->instance->marc_set($data,$marc_path,$value); } =head1 NAME Catmandu::Fix::marc_set - set a marc value of one (sub)field to a new value =head1 SYNOPSIS # Set a field in the leader if marc_match('LDR/6','c') marc_set('LDR/6','p') end # Set a control field marc_set('001',1234) # Set all the 650-p fields to 'test' marc_set('650p','test') # Set the 100-a subfield where indicator-1 is 3 marc_set('100[3]a','Farquhar family.') # Copy data from another field in a subfield marc_set('100a','$.my.deep.field') =head1 DESCRIPTION Set the value of a MARC subfield to a new value. =head1 METHODS =head2 marc_set(MARC_PATH , VALUE) Set a MARC subfield to a particular new value. This value can be a literal or reference an existing field in the record using the dollar JSON_PATH syntax. =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_set as => 'marc_set'; my $data = { record => [...] }; $data = marc_set($data, '245a', 'test'); =head1 SEE ALSO L, L, L, L =cut 1; marc_xml.pm100644000765000024 274314137142137 23555 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandu/Fixpackage Catmandu::Fix::marc_xml; use Catmandu::Sane; our $VERSION = '1.271'; use Moo; use namespace::clean; use Catmandu::MARC; use Catmandu::Fix::Has; has path => (fix_arg => 1); has reverse => (fix_opt => 1); with 'Catmandu::Fix::SimpleGetValue'; sub emit_value { my ($self, $var) = @_; if ($self->reverse) { "if (is_string(${var})) {" . "${var} = Catmandu::MARC->instance->marc_xml(${var}, reverse => 1);" . "}"; } else { "if (is_array_ref(${var})) {" . "${var} = Catmandu::MARC->instance->marc_xml(${var});" . "}"; } } =head1 NAME Catmandu::Fix::marc_xml - transform a Catmandu MARC record into MARCXML =head1 SYNOPSIS # Transforms the 'record' key into a MARCXML string marc_xml('record') # Transforms the XML in the 'record' key into MARC accessible data marc_xml('record',reverse:1) =head1 DESCRIPTION Convert MARC data into a MARCXML string =head1 METHODS =head2 marc_xml(PATH,[reverse:1]) Transform the MARC record found at PATH to MARC XML. If an C option is given, then XML found at C will be transformed into an internal MARC format. The MARC representation needs to be stored in the C key to be used with other L fixes. =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_xml as => 'marc_xml'; my $data = { record => [...] }; $data = marc_xml($data); =head1 SEE ALSO L =cut 1; marc_append.t100644000765000024 104414137142137 23541 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Fix#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use Catmandu::Fix; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_append'; use_ok $pkg; } require_ok $pkg; my $fixer = Catmandu::Fix->new(fixes => [q|marc_append('100','.')|,q|marc_map('100','test')|]); my $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); my $record = $fixer->fix($importer->first); like $record->{test}, qr/^Martinsson, Tobias,1976-\.$/, q|fix: marc_append('100','.')|; done_testing; marc_remove.t100644000765000024 246614137142137 23600 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Fix#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use Catmandu::Fix; use Catmandu::Fix::Inline::marc_map qw(:all); use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_remove'; use_ok $pkg; } require_ok $pkg; my $fixer = Catmandu::Fix->new(fixes => [ q|marc_remove('245')|, q|marc_remove('100a')|, q|marc_remove('082[1,1]a')|, q|marc_remove('050[,0]ab')|, ]); my $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); my $record = $importer->first; my $title = marc_map($record,'245'); my $author = marc_map($record,'100'); my $dewey = marc_map($record,'082'); my $lccn = marc_map($record,'050'); ok $title, 'got a title'; like $author , qr/^Martinsson, Tobias,1976-$/ , 'got an author'; ok $dewey, 'got a dewey'; ok $lccn , 'got a lccn'; my $fixed_record = $fixer->fix($record); my $title2 = marc_map($fixed_record,'245'); my $author2 = marc_map($fixed_record,'100'); my $dewey2 = marc_map($fixed_record,'082'); my $lccn2 = marc_map($fixed_record,'050'); ok (!defined $title2, 'deleted the title'); like $author2 , qr/^1976-$/ , 'removed 100-a'; ok (defined $dewey2, 'didnt delete dewey'); ok (!defined $lccn2, 'deleted lccn'); done_testing; Exporter000755000765000024 014137142137 22331 5ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/CatmanduMARC.pm100644000765000024 624614137142137 23561 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandu/Exporterpackage Catmandu::Exporter::MARC; use Catmandu::Sane; use Catmandu::Util; use Moo; our $VERSION = '1.271'; has type => (is => 'ro' , default => sub { 'ISO' }); has skip_errors => (is => 'ro'); has _exporter => (is => 'ro'); with 'Catmandu::Exporter'; sub BUILD { my ($self,$args) = @_; my $type = $self->type; # keep USMARC temporary as alias for ISO, remove in future version # print deprecation warning if ($type eq 'USMARC') { $type = 'ISO'; warn( "deprecated", "Oops! Exporter \"USMARC\" is deprecated. Use \"ISO\" instead." ); } my $pkg = Catmandu::Util::require_package($type,'Catmandu::Exporter::MARC'); delete $args->{file}; delete $args->{fix}; $self->{_exporter} = $pkg->new(file => $self->file, %$args); } sub add { my ($self) = @_; if ($self->skip_errors) { eval { $self->_exporter->add($_[1]); }; if ($@) { $self->log->error("error at record " . $self->count . " : $@"); } } else { $self->_exporter->add($_[1]); } } sub commit { $_[0]->_exporter->commit; } 1; __END__ =head1 NAME Catmandu::Exporter::MARC - Exporter for MARC records =head1 SYNOPSIS # Convert MARC to MARC $ catmandu convert MARC to MARC < /foo/bar.mrc > /foo/output.mrc # Add fixes $ catmandu convert MARC to MARC --fix myfixes.txt < /foo/bar.mrc > /foo/output.mrc # Convert on format to another format $ catmandu convert MARC --type ISO to MARC --type ALEPHSEQ < /foo/bar.mrc > /foo/bar.aleph =head1 DESCRIPTION Catmandu::Exporter::MARC is a L to serialize (write) MARC records to a file or the standard output. =head1 CONFIGURATION =over =item file Write output to a local file given by its path or file handle. Alternatively a scalar reference can be passed to write to a string and a code reference can be used to write to a callback function. =item fh Write the output to an L. If not specified, L is used to create the output handle from the C argument or by using STDOUT. =item fix An ARRAY of one or more fixes or file scripts to be applied to exported items. =item type The MARC format to export. The following MARC exporters are available: ISO: L (default) - a strict ISO 2709 exporter ALEPHSEQ: L - an exporter for Ex Libris Aleph sequential files Line: L - an exporter for Index Data's MARC Line format MARCMaker: L - an exporter for MARCMaker/MARCBreaker records MiJ: L (MARC in JSON) - an export for the MARC-in-JSON format XML: L - an exporter for the MARC XML format =item skip_errors If set, then any errors when parsing MARC output will be skipped and ignored. Use the debug setting of catmandu to view all error messages: $ catmandu -D convert MARC to MARC --skip_errors 1 --fix myfixes.txt < /foo/bar.mrc =item Every MARC importer can have its own options. Check the documentation of the specific importer. =back =head1 SEE ALSO L marc_copy.pm100644000765000024 1261214137142137 23743 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandu/Fixpackage Catmandu::Fix::marc_copy; use Catmandu::Sane; use Catmandu::MARC; use Moo; use Catmandu::Fix::Has; with 'Catmandu::Fix::Base'; our $VERSION = '1.13'; has marc_path => (fix_arg => 1); has path => (fix_arg => 1); has equals => (fix_opt => 1); sub emit { my ($self,$fixer) = @_; my $path = $fixer->split_path($self->path); my $key = $path->[-1]; my $marc_obj = Catmandu::MARC->instance; # Precompile the marc_path to gain some speed my $marc_context = $marc_obj->compile_marc_path($self->marc_path, subfield_wildcard => 0); my $marc = $fixer->capture($marc_obj); my $marc_path = $fixer->capture($marc_context); my $equals = $fixer->capture($self->equals); my $var = $fixer->var; my $result = $fixer->generate_var; my $current_value = $fixer->generate_var; my $perl = ""; $perl .= $fixer->emit_declare_vars($current_value, "[]"); $perl .=<marc_copy( ${var}, ${marc_path}, ${equals}) ) { ${result} = ref(${result}) ? ${result} : [${result}]; for ${current_value} (\@{${result}}) { EOF $perl .= $fixer->emit_create_path( $var, $path, sub { my $var2 = shift; "${var2} = ${current_value}" } ); $perl .=< and L marc_copy will not only copy data content (values) but also all data elements like tag, indicators and subfield codes into a nested data structure. =head1 METHODS =head2 marc_copy(MARC_PATH, JSON_PATH, [equals: REGEX]) Copy this MARC fields referred by a MARC_PATH to a JSON_PATH. When an C value has been provided, then only the MARC_PATHs with a value equal to C will be copied to JSON_PATH. When the MARC_PATH points to a subfield, then the subfield value need to match C. When the MARC_PATH points multiple subfields, then a concatinated string value needs to match C: Data: 100 $aMy$bField. # copy only the 100 fields which have a $a subfield marc_copy(100a,tmp) # copy only the 100 fields with have a $a subfield matching 'My' marc_copy(100a,tmp,equals:"My") # copy only the 100 fields with have a concatinated string value 'MyField.' # (equals is an regex, the period "." needs to be escaped "\.") marc_copy(100,tmp,equals:"MyField\.") # copy only the 100 fields which have a "." at the end marc_copy(100,tmp,equals:"\.$") More examples: # Copy all the 300 fields marc_copy(300,tmp) # Copy all the 300 fields with indicator 1 = 1 marc_copy(300[1],tmp) # Copy all the 300 fields which have subfield c marc_copy(300c,tmp) # Copy all the 300 fields which have subfield c equal to 'ABC' marc_copy(300c,tmp,equals:"^ABC") The JSON_PATH C will contain an array with one item per field that was copied. Each item is a hash containing the following fields: tmp.*.tag - The names of the MARC field tmp.*.ind1 - The value of the first indicator tmp.*.ind2 - The value of the second indicator tmp.*.subfields - An array of subfield items. Each subfield item is a hash of the subfield code and subfield value E.g. tmp: - tag: '300' ind1: ' ' ind2: ' ' subfields: - a: 'blabla:' - v: 'test123' - c: 'ok123' These JSON paths can be used like: # Set the first indicator of all 300 fields do marc_each(var:this) if all_match(this.tag,300) # Set the first indicator to 1 set_field(this.ind1,1) marc_paste(this) end end # Capitalize all the v subfields of 300 do marc_each(var:this) if all_match(this.tag,300) do list(path:this.subfields, var:loop) if (exists(loop.v)) upcase(loop.v) end end marc_paste(this) end end =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_copy as => 'marc_copy'; my $data = { record => ['650', ' ', 0, 'a', 'Perl'] }; $data = marc_copy($data,'650','subject'); print $data->{subject}->[0]->{tag} , "\n"; # '650' print $data->{subject}->[0]->{ind1} , "\n"; # ' ' print $data->{subject}->[0]->{ind2} , "\n"; # 0 print $data->{subject}->[0]->{subfields}->[0]->{a} , "\n"; # 'Perl' =head1 SEE ALSO =over =item * L =item * L =back =head1 LICENSE AND COPYRIGHT This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information. =cut marc_sort.pm100644000765000024 132614137142137 23740 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandu/Fixpackage Catmandu::Fix::marc_sort; use Catmandu::Sane; use Moo; use Catmandu::MARC; our $VERSION = '1.271'; sub fix { my ( $self, $data ) = @_; return Catmandu::MARC->instance->marc_sort($data); } =head1 NAME Catmandu::Fix::marc_sort - sort MARC record fields by tag =head1 SYNOPSIS # Sort MARC record fields by tag marc_sort() =head1 DESCRIPTION Sort MARC record fields by tag. =head1 METHODS =head2 marc_sort() If you added new fields to a MARC record with L or L, use I to sort them by tag. =head1 SEE ALSO L, L, L, L =cut 1; marc_spec.pm100644000765000024 3023314137142137 23722 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandu/Fixpackage Catmandu::Fix::marc_spec; use Catmandu::Sane; use Catmandu::MARC; use Moo; use Catmandu::Fix::Has; with 'Catmandu::Fix::Base'; our $VERSION = '1.271'; has spec => ( fix_arg=> 1 ); has path => ( fix_arg=> 1 ); has split => ( fix_opt=> 1 ); has join => ( fix_opt=> 1 ); has value => ( fix_opt=> 1 ); has pluck => ( fix_opt=> 1 ); has invert => ( fix_opt=> 1 ); has nested_arrays => ( fix_opt=> 1 ); sub emit { my ( $self, $fixer ) = @_; my $path = $fixer->split_path( $self->path ); my $key = $path->[-1]; my $marc_obj = Catmandu::MARC->instance; # Precompile the marc_path to gain some speed my $spec = $marc_obj->parse_marc_spec( $self->spec ); my $marc = $fixer->capture($marc_obj); my $marc_spec = $fixer->capture($spec); my $marc_opt = $fixer->capture({ '-join' => $self->join // '' , '-split' => $self->split // 0 , '-pluck' => $self->pluck // 0 , '-nested_arrays' => $self->nested_arrays // 0 , '-invert' => $self->invert // 0 , '-value' => $self->value , '-force_array' => ($key =~ /^(\$.*|[0-9]+)$/) ? 1 : 0 }); my $var = $fixer->var; my $result = $fixer->generate_var; my $current_value = $fixer->generate_var; my $perl = ""; $perl .= $fixer->emit_declare_vars($current_value, "[]"); $perl .=<marc_spec( ${var}, ${marc_spec}, ${marc_opt})) ) { ${result} = ref(${result}) ? ${result} : [${result}]; for ${current_value} (\@{${result}}) { EOF $perl .= $fixer->emit_create_path( $var, $path, sub { my $var2 = shift; "${var2} = ${current_value}" } ); $perl .=< =head1 SYNOPSIS In a fix file e.g. 'my.fix': # Assign value of MARC leader to my.ldr.all marc_spec('LDR', my.ldr.all) # Assign values of all subfields of field 245 as a joined string marc_spec('245', my.title.all) # If field 245 exists, set string 'the title' as the value of my.title.default marc_spec('245', my.title.default, value:'the title') # Assign values of all subfields of every field 650 to my.subjects.all # as a joined string marc_spec('650', my.subjects.all) # Same as above with joining characters '###' marc_spec('650', my.subjects.all, join:'###') # Same as above but added as an element to the array my.append.subjects marc_spec('650', my.append.subjects.$append, join:'###') # Every value of a subfield will be an array element marc_spec('650', my.split.subjects, split:1) # Assign values of all subfields of all fields having indicator 1 = 1 # and indicator 2 = 0 to the my.fields.indicators10 array. marc_spec('...{^1=\1}{^2=\0}', my.fields.indicators10.$append) # Assign first four characters of leader to my.firstcharpos.ldr marc_spec('LDR/0-3', my.firstcharpos.ldr) # Assign last four characters of leader to my.lastcharpos.ldr marc_spec('LDR/#-3', my.lastcharpos.ldr) # Assign value of subfield a of field 245 to my.title.proper marc_spec('245$a', my.title.proper) # Assign first two characters of subfield a of field 245 to my.title.proper marc_spec('245$a/0-1', my.title.charpos) # Assign all subfields of second field 650 to my.second.subject marc_spec('650[1]', my.second.subject) # Assign values of all subfields of last field 650 to my.last.subject marc_spec('650[#]', my.last.subject) # Assign an array of values of all subfields of the first two fields 650 # to my.two.split.subjects marc_spec('650[0-1]', my.two.split.subjects, split:1) # Assign a joined string of values of all subfields of the last two fields 650 # to my.two.join.subjects marc_spec('650[#-1]', my.two.join.subjects, join:'###') # Assign value of first subfield a of all fields 020 to my.isbn.number marc_spec('020$a[0]', my.isbn.number) # Assign value of first subfield q of first field 020 to my.isbn.qual.one marc_spec('020[0]$q[0]', my.isbn.qual.none) # Assign values of subfield q and a in the order stated as an array # to my.isbns.pluck.all # without option 'pluck:1' the elments will be in 'natural' order # see example below marc_spec('020$q$a', my.isbns.pluck.all, split:1, pluck:1) # Assign value of last subfield q and second subfield a # in 'natural' order of last field 020 as an array to my.isbn.qual.other marc_spec('020[#]$q[#]$a[1]', my.isbn.qual.other, split:1) # Assign first five characters of value of last subfield q and last character # of value of second subfield a in 'natural' order of all fields 020 # as an array to my.isbn.qual.substring.other marc_spec('020$q[#]/0-4$a[1]/#', my.isbn.qual.substring.other, split:1) # Assign values of of all other subfields than a of field 020 # to my.isbn.other.subfields marc_spec('020$a', my.isbn.other.subfields, invert:1) # Assign value of subfield a of field 245 only, if subfield a of field 246 # with value 1 for indicator1 exists marc_spec('245$a{246^1=\1}', my.var.title) And then on command line: catmandu convert MARC to YAML --fix my.fix < perl_books.mrc See L and L for a deeper understanding of how L works. =head1 DESCRIPTION L is a fix for the famous L. For the most part it behaves like L , but has a more fine grained method to reference MARC data content. See L for documentation on the path syntax. =head1 METHODS =head2 marc_spec(MARCspec, JSON_PATH, OPT:VAL, OPT2:VAL,...) First parameter must be a string, following the syntax of L. Do always use single quotes with this first parameter. Second parameter is a string describing the variable or the variable path to assign referenced values to (see L). You may use one of $first, $last, $prepend or $append to add referenced data values to a specific position of an array (see L and mapping rules at L). # INPUT [245,1,0,"a","Cross-platform Perl /","c","Eric F. Johnson."] # CALL marc_spec('245', my.title.$append) # OUTPUT { my { title [ [0] "Cross-platform Perl /Eric F. Johnson." ] } } Third and every other parameters are optional and must be in the form of key:value (see L for a deeper understanding of options). =head1 OPTIONS =head2 split: 0|1 If split is set to 1, every fixed fields value or every subfield will be an array element. # INPUT [650," ",0,"a","Perl (Computer program language)"], [650," ",0,"a","Web servers."] # CALL marc_spec('650', my.subjects, split:1) # OUTPUT { my { subjects [ [0] "Perl (Computer program language)", [1] "Web servers." ] } } See split mapping rules at L. =head2 nested_arrays: 0|1 Using the nested_array option the output will be an array of array of strings (one array item for each matched field, one array of strings for each matched subfield). # INPUT [650," ",0,"a","Perl (Computer program language)"], [650," ",0,"a","Web servers."] # CALL marc_spec('650', my.subjects, nested_arrays:1) # OUTPUT { my { subjects [ [0] [ [0] "Perl (Computer program language)" ] [1] [ [0] "Web servers." ] ] } } See nested_array mapping rules at L. =head2 join: Str If set, value of join will be used to join the referenced data content. This will only have an effect if option split is undefined (not set or set to 0). # INPUT [650," ",0,"a","Perl (Computer program language)"], [650," ",0,"a","Web servers."] # CALL marc_spec('650', my.subjects, join:'###') # OUTPUT { my { subjects "Perl (Computer program language)###Web servers." } } =head2 pluck: 0|1 This has only an effect on subfield values. By default subfield reference happens in 'natural' order (first number 0 to 9 and then letters a to z). # INPUT ["020"," ", " ","a","0491001304","q","black leather"] # CALL marc_spec('020$q$a', my.isbn, split:1) # OUTPUT { my { isbn [ [0] 0491001304, [1] "black leather" ] } } If pluck is set to 1, values will be referenced by the order stated in the MARCspec. # INPUT ["020"," ", " ","a","0491001304","q","black leather"] # CALL marc_spec('020$q$a', my.plucked.isbn, split:1, pluck:1) # OUTPUT { my { isbn [ [0] "black leather", [1] 0491001304 ] } } =head2 value: Str If set to a value, this value will be assigned to $var if MARCspec references data content (if the field or subfield exists). In case two or more subfields are referenced, the value will be assigned to $var if at least one of them exists: # INPUT ["020"," ", " ","a","0491001304"] # CALL marc_spec('020$a$q', my.isbn, value:'one subfield exists') # OUTPUT { my { isbn "one subfield exists" } } =head2 invert: 0|1 This has only an effect on subfields (values). If set to 1 it will invert the last pattern for every subfield. E.g. # references all subfields but not subfield a and q marc_spec('020$a$q' my.other.subfields, invert:1) # references all subfields but not subfield a and not the last repetition # of subfield q marc_spec('020$a$q[#]' my.other.subfields, invert:1) # references all but not the last two characters of first subfield a marc_spec('020$a[0]/#-1' my.other.subfields, invert:1) Invert will not work with subspecs. =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_spec as => 'marc_spec'; my $data = { record => [...] }; $data = marc_spec($data,'245$a','title'); print $data->{title} , "\n"; =head1 SEE ALSO L L =head1 AUTHOR Carsten Klee Eklee@cpan.orgE =head1 CONTRIBUTORS =over =item * Johann Rolschewski, C<< >>, =item * Patrick Hochstenbach, C<< >>, =item * Nicolas Steenlant, C<< >> =back =head1 LICENSE AND COPYRIGHT This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO =over =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =back =cut Importer000755000765000024 014137142137 22322 5ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/CatmanduMARC.pm100644000765000024 1100714137142137 23561 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandu/Importerpackage Catmandu::Importer::MARC; use Catmandu::Sane; use Catmandu::Util; use Moo; our $VERSION = '1.271'; has type => (is => 'ro' , default => sub { 'ISO' }); has skip_errors => (is => 'ro'); has _importer => (is => 'ro'); with 'Catmandu::Importer'; sub BUILD { my ($self,$args) = @_; my $type = $self->type; # keep USMARC temporary as alias for ISO, remove in future version # print deprecation warning if ($type eq 'USMARC') { $type = 'ISO'; warn( "deprecated", "Oops! Importer \"USMARC\" is deprecated. Use \"ISO\" instead." ); } if (exists $args->{records}) { $type = 'Record'; } my $pkg = Catmandu::Util::require_package($type,'Catmandu::Importer::MARC'); delete $args->{file}; delete $args->{type}; delete $args->{fix}; $self->{_importer} = $pkg->new(file => $self->file, %$args); } sub generator { my ($self) = @_; if ($self->skip_errors) { my $gen = $self->_importer->generator; my $nr = 0; sub { my $item = 0; do { $nr++; try { $item = $gen->(); } catch { $self->log->error("error at record $nr : $_"); }; } while (defined($item) && $item == 0); $item; }; } else { $self->_importer->generator; } } 1; __END__ =head1 NAME Catmandu::Importer::MARC - Package that imports MARC data =head1 SYNOPSIS # On the command line # Convert MARC to JSON (default) $ catmandu convert MARC < /foo/bar.mrc # Convert MARC to MARC $ catmandu convert MARC to MARC < /foo/bar.mrc > /foo/output.mrc # Add fixes $ catmandu convert MARC to MARC --fix myfixes.txt < /foo/bar.mrc > /foo/output.mrc # Create a list of titles $ catmandu convert MARC to TSV --fix "marc_map(245,title); retain(title)" < /foo/bar.mrc # Convert MARC XML $ catmandu convert MARC --type XML < /foo/bar.xml # Convert ALEPH sequential $ catmandu convert MARC --type ALEPHSEQ < /foo/bar.aleph # Convert on format to another format $ catmandu convert MARC --type ISO to MARC --type ALEPHSEQ < /foo/bar.mrc > /foo/bar.aleph =head1 DESCRIPTION Catmandu::Importer::MARC is a L to import MARC records from an external source. Each record is imported as HASH containing two keys: =over =item C<_id> the system identifier of the record (usually the 001 field) =item C an ARRAY of ARRAYs containing the record data =back =head1 EXAMPLE ITEM { record => [ [ '001', undef, undef, '_', 'fol05882032 ' ], [ '245', '1', '0', 'a', 'Cross-platform Perl /', 'c', 'Eric F. Johnson.' ], ], _id' => 'fol05882032' } =head1 METHODS This module inherits all methods of L and by this L. =head1 CONFIGURATION =over =item file Read input from a local file given by its path. Alternatively a scalar reference can be passed to read from a string. =item fh Read input from an L. If not specified, L is used to create the input stream from the C argument or by using STDIN. =item fix An ARRAY of one or more fixes or file scripts to be applied to imported items. =item type The MARC format to parse. The following MARC parsers are available: ISO: L (default) - a strict ISO 2709 parser RAW: L - a loose ISO 2709 parser that skips faulty records ALEPHSEQ: L - a parser for Ex Libris Aleph sequential files Line: L - a parser for Index Data's MARC Line format Lint: L - a MARC syntax checker MicroLIF: L - a parser for the MicroLIF format MARCMaker: L - a parser for MARCMaker/MARCBreaker records MiJ: L (MARC in JSON) - a parser for the MARC-in-JSON format XML: L - a parser for the MARC XML format =item skip_errors If set, then any errors when parsing MARC input will be skipped and ignored. Use the debug setting of catmandu to view all error messages: $ catmandu -D convert MARC --skip_errors 1 < /foo/bar.mrc =item Every MARC importer can have its own options. Check the documentation of the specific importer. =back =head1 SEE ALSO L marc_in_json.t100644000765000024 336414137142137 23740 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/t/Catmandu/Fix#!perl use strict; use warnings; use Test::More; use Test::Exception; use Test::Deep; use Catmandu::Importer::MARC; use Catmandu::Fix; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_in_json'; use_ok $pkg; } require_ok $pkg; my $record = { record => [ ['LDR', undef, undef, '_', '00000nas-a2200000z--4500'], ['001', undef, undef, undef, 'rec002'], ['008', undef, undef, '_' , '150519s----------------------000---eng-d'] , ['100', '1', '1', '_', '' , 'a', 'Slayer' ], ['245', ' ', ' ', '_', '' , 'a', 'Reign in Blood' , ], ['999', ' ', ' ', '_', '' , 'x', 'test' , 'x', 'test2' , 'x', 'test3' , ] ] }; my $fixer = Catmandu::Fix->new(fixes => [q|marc_in_json()|]); my $record2 = $fixer->fix($record); is $record2->{leader}, qq|00000nas-a2200000z--4500|; is $record2->{fields}->[0]->{'001'}, qq|rec002|; is $record2->{fields}->[1]->{'008'}, qq|150519s----------------------000---eng-d|; is $record2->{fields}->[2]->{'100'}->{'ind1'} , 1; is $record2->{fields}->[2]->{'100'}->{'ind2'} , 1; is $record2->{fields}->[2]->{'100'}->{'subfields'}->[0]->{a} , 'Slayer'; is $record2->{fields}->[3]->{'245'}->{'subfields'}->[0]->{a} , 'Reign in Blood'; is $record2->{fields}->[4]->{'999'}->{'subfields'}->[0]->{x} , 'test'; is $record2->{fields}->[4]->{'999'}->{'subfields'}->[1]->{x} , 'test2'; is $record2->{fields}->[4]->{'999'}->{'subfields'}->[2]->{x} , 'test3'; my $fixer2 = Catmandu::Fix->new(fixes => [q|marc_in_json(-reverse => 1)|]); my $record3 = $fixer2->fix($record2); cmp_deeply($record,$record3); done_testing; marc_paste.pm100644000765000024 571614137142137 24074 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandu/Fixpackage Catmandu::Fix::marc_paste; use Catmandu::Sane; use Catmandu::MARC; use Moo; use Catmandu::Fix::Has; with 'Catmandu::Fix::Inlineable'; our $VERSION = '1.271'; has path => (fix_arg => 1); has at => (fix_opt => 1); has equals => (fix_opt => 1); sub fix { my ($self, $data) = @_; my $path = $self->path; my $at = $self->at; my $regex = $self->equals; return Catmandu::MARC->instance->marc_paste($data,$path,$at,$regex); } 1; __END__ =head1 NAME Catmandu::Fix::marc_paste - paste a MARC structured field back into the MARC record =head1 SYNOPSIS # Copy and paste to the end of the record marc_copy(001, fixed001) set_fieldfixed001.$first.tag,002) marc_paste(fixed001) # Copy and paste in place (rename a field) do marc_each(var:this) if all_match(this.tag,001) # Change it set_field(this.tag,002) # Paste it back into the record marc_paste(this) end end =head1 DESCRIPTION Paste a MARC stucture created by L back at the end of a MARC record. =head1 METHODS =head2 marc_paste(JSON_PATH, [at: MARC_PATH , [equals: REGEX]]) Paste a MARC struct PATH back in the MARC record. By default the MARC structure will be pasted at the end of the record. Optionally provide an C option to set the MARC field after which the structure needs to be pasted. Optionally provide a regex that should match the content of the C field. The C parameter requires an C parameter. When both are provided, then the value of JSON_PATH will only be pasted if the string value of the MARC_PATH in C matches the regular expression C. # Paste mycopy at the end of the record marc_paste(mycopy) # Paste mycopy after the last 300 field marc_paste(mycopy, at:300) # Paste mycopy after the last 300 field with indicator1 = 1 marc_paste(mycopy, at:300[1]) # Paste mycopy after the last 300 field which has an 'a' subfield marc_paste(mycopy, at:300a) # Paste mycopy after the last 300 field which has an 'a' subfield equal to 'ABC' marc_paste(mycopy, at:300a, equals:'^ABC$') # Paste mycopy after the last 300 field with all concatinated subfields equal to 'ABC' marc_paste(mycopy, at:300, equals:'^ABC$') =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_copy as => 'marc_copy'; use Catmandu::Fix::marc_paste as => 'marc_paste'; my $data = { record => ['650', ' ', 0, 'a', 'Perl'] }; $data = marc_copy($data,'650','subject'); $data = marc_paste($data,'subject'); =head1 SEE ALSO =over =item * L =item * L =back =head1 LICENSE AND COPYRIGHT This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information. =cut MARC000755000765000024 014137142137 21243 5ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/CatmanduTutorial.pod100644000765000024 4644714137142137 23751 0ustar00patrickhochstenbachstaff000000000000Catmandu-MARC-1.271/lib/Catmandu/MARC=encoding utf8 =head1 NAME Catmandu::MARC::Tutorial - A documentation-only module for new users of Catmandu::MARC =head1 SYNOPSIS perldoc Catmandu::MARC::Tutorial =head1 UTF-8 =head2 MARC8 and UTF-8 The current Catmandu MARC tools are targetted for processing UTF-8 encoded files. When you have MARC8 encoded data tools like MarcEdit or C can be used to create a UTF-8 encoded file: $ yaz-marcdump -f MARC-8 -t UTF-8 -o marc -l 9=97 marc21.raw > marc21.utf8.raw =head2 Unicode errors If you process UTF-8 encoded files which contain faulty characters, you will get a fatal error message like: utf8 "\xD8" does not map to Unicode at ... Use the iconv (libc6-dev Linux package) tool, to preprocess the data and discard faulty characters: $ iconv -c -f UTF-8 -t UTF-8 marc21.utf8.raw | catmandu convert MARC to JSON =head2 Convert a decomposed UTF-8 file to a combined UTF-8 file and vice versa For example, the character ä can be represented as "ä", that is the codepoint U+00E4 (two bytes c3 a4 in UTF-8 encoding), or as "ä", that is the two codepoints U+0061 U+0308 (three bytes 61 cc 88 in UTF-8). The uconf (libicu-dev Linux package) tool can be used to convert these types of files: $ uconv -x any-nfc < decomposed.txt > combined.txt $ uconv -x any-nfd < combined.txt > decomposed.txt =head1 READING =head2 Convert MARC21 records into JSON The command below converts file data.mrc into JSON: $ catmandu convert MARC to JSON < data.mrc =head2 Convert MARC21 records into MARC-XML $ catmandu convert MARC to MARC --type XML < data.mrc =head2 Convert UNIMARC records into JSON, XML, ... To read UNIMARC records use the RAW parser to get the correct character encoding. $ catmandu convert MARC --type RAW to JSON < data.mrc $ catmandu convert MARC --type RAW to MARC --type XML < data.mrc =head2 Create a CSV file containing all the titles To extract data from a MARC record on needs a Fix routine. This is a small language to manipulate data. In the example below we extract all 245 fields from MARC: $ catmandu convert MARC to CSV --fix 'marc_map(245,title); retain(title)' < data.mrc The Fix C puts the MARC 245 field in the C field. The Fix C<retain> makes sure only the title field ends up in the CSV file. =head2 Create a CSV file containing only the 245$a and 245$c subfields The C<marc_map> Fix can get one or more subfields to extract from MARC: $ catmandu convert MARC to CSV --fix 'marc_map(245ac,title); retain(title)' < data.mrc =head2 Create a CSV file which contains a repeated field In the example below the 650a field can be repeated in some marc records. We will join all the repetitions in an comma delimited list for each record. $ catmandu convert MARC to CSV --fix 'marc_map(650a,subject,join:","); retain(subject)' < data.mrc =head2 Create a list of all ISBN numbers in the data In the previous example we saw how all subjects can be printed using a few Fix commands. When a subject is repeated in a record, it will be written on one line joined by a comma: subject1 subject2, subject3 subject4 In the example over record 1 contained 'subject1', record 2 'subject2' and 'subject3' and record 3 'subject4'. What should we use when we want a list of all values in a long list? In the example below we'll print all ISBN numbers in a batch of MARC records in one long list using the Text exporter: $ catmandu convert MARC to Text --field_sep "\n" --fix 'marc_map(020a,isbn.\$append); retain(isbn)' < data.mrc The first new thing is the C<$append> in the marc_map. This will create in C<isbn> a list of all ISBN numbers found in the C<020a> field. Because C<$> signs have a special meaning on the command line they need to be escaped with a backslash C<\>. The C<Text> exporter with the C<field_sep> option will make use all the list in the C<isbn> field are written on a new line. =head2 Create a list of all unique ISBN numbers in the data Given the result of the previous command, it is now easy to create a unique list of ISBN numbers with the UNIX C<uniq> command: $ catmandu convert MARC to Text --field_sep "\n" --fix 'marc_map(020a,isbn.\$append); retain(isbn)' < data.mrc | uniq =head2 Create a list of the number of subjects per record We will create a list of subjects (650a) and count the number of items in this list for each record. The CSV file will contain the C<_id> (record identifier) and C<subject> the number of 650a fields. Writing all Fixes on the command line can become tedious. In Catmandu it is possible to create a Fix script which contains all the Fix commands. Open a text editor and create the C<myfix.fix> file with content: marc_map(650a,subject.$append) count(subject) retain(_id, subject) And execute the command: $ catmandu convert MARC to CSV --fix myfix.fix < data.mrc =head2 Create a list of all ISBN numbers for records with type 920a == book In the example we need an extra condition for match the content of the 920a field against the string C<book>. Open a text editor and create the C<myfix.fix> file with content: marc_map(020a,isbn.$append) marc_map(920a,type) select all_match(type,"book") # select only the books select exists(isbn) # select only the records with ISBN numbers retain(isbn) # only keep this field All the text after the C<#> sign are inline code comments. And run the command: $ catmandu convert MARC to Text --field_sep "\n" --fix myfix.fix < data.mrc =head2 Show which MARC record don't contain a 900a field matching some list of values First we need to create a list of keys that need to be matched against our MARC records. In the example below we create a CSV file with a C<key> , C<value> header and all the keys that are OK: $ cat mylist.txt key,value book,OK article,OK journal,OK Next we create a Fix script that maps the MARC 900a field to a field called C<type>. This C<type> field we lookup in the C<mylist.txt> file. If a match is found, then the C<type> field will contain the value in the list (OK). When no match is found then the C<type> will contain the original value. We reject all records that have OK as C<type> and keep only the ones that weren't matched in the file. Open a text editor and create the C<myfix.fix> file with content: marc_map(900a,type) lookup(type,'/tmp/mylist.txt') reject all_match(type,OK) retain(_id,type) And now run the command: $ catmandu convert MARC to CSV --fix myfix.fix < data.mrc =head1 Create a CSV file of all ISSN numbers found at any MARC field To process this information we need to create a Fix script like the one below (line numbers are added here to explain the working of this script but don't need to be included in the script): 01: marc_map('***',text.$append) 02: 03: filter(text,'(\b\d{4}-?\d{3}[\dxX]\b)') 04: replace_all(text.*,'.*(\b\d{4}-?\d{3}[\dxX]\b).*',$1) 05: 06: do list(path:text) 07: unless is_valid_issn(.) 08: reject() 09: end 10: end 11: 12: vacuum() 13: 14: select exists(text) 15: 16: join_field(text,' ; ') 17: 18: retain(_id,text) On line 01 all the text in the MARC record is mapped into a C<text> array. On line 03 we filter out this array all the lines that contain an ISSN string using a regular expression. On line 04 the C<replace_all> is used to delete everything in the C<text> array that isn't an ISSN number. On line 06-10 we go over every ISSN string and check if it has a valid checksum and erase it when not. On line 12 we use the C<vacuum> function to remove any remaining empty fields On line 14 we select only the records that contain a valid ISSN number On line 16 the ISSN get joined by a semicolon ';' into a long string On line 18 we keep only the record id and the ISSNs in for the report. Run this Fix script (without the line number) using this command $ catmandu convert MARC to CSV --fix myfix.fix < data.mrc =head2 Create a MARC validator For this example we need a Fix script that contains validation rules we need to check. For instance, we require to have a 245 field and at least a 008 control field with a date filled in. This can be coded as in: # Check if a 245 field is present unless marc_has('245') log("no 245 field",level:ERROR) end # Check if there is more than one 245 field if marc_has_many('245') log("more than one 245 field?",level:ERROR) end # Check if in 008 position 7 to 10 contains a 4 digit number ('\d' means digit) unless marc_match('008/07-10','\d{4}') log("no 4-digit year in 008 position 7 -> 10",level:ERROR) end Put this Fix script in a file C<myfix.fix> and execute the Catmandu command with the "-D" option for logging and the Null exporter to discard the normal output $ catmandu -D convert MARC to Null --fix myfix.fix < data.mrc =head1 TRANSFORMING =head2 Add a new MARC field In the example bellow we add new 856 field to the record with a $u subfield containing the Google homepage: marc_add(856,u,"http://www.google.com") A control field can be added by using the '_' subfield marc_add(009,_,0123456789) Maybe you want to copy the data from one subfield to another. Use the marc_map to store the data first in a temporary field and add it later to the new field: # copy a subfield marc_map(001,tmp) # maybe process the data a bit append(tmp,"-mytest") # add the contents of the tmp field to the new 009 field marc_add(009,_,$.tmp) =head2 Set a MARC subfield Set the $h subfield to a new value (or create it when it doesn't exist yet): marc_set(100h, test123) Only set the 100 field if the first indicator is 3 marc_set(100[3]h, test123) =head2 Remove a MARC (sub)field Remove all fields 500 , 501 , 5** : marc_remove(5**) Remove all 245h fields: marc_remove(245h) =head2 Append text to a MARC field Append a period to the 500 field is there isn't already there: do marc_each() unless marc_match(500, "\.$") # Only if the current field 500 doesn't end with a period marc_append(500,".") # Add to the current 500 field a period end end Use the L<Catmandu::Fix::Bind::marc_each> Bind to loop over all MARC fields. In the context of the C<do -- end> only one MARC field at a time is visible for the C<marc_*> fixes. =head2 The marc_each binder All C<marc_*> fixes will operate on all MARC fields matching a MARC path. For example, marc_remove(856) will remove all 856 MARC fields. In some cases you may want to change only some of the fields in a record. You could write: if marc_match(856u,"google") marc_remove(856) end in the hope it would remove the 856 fields that contain the text "google" in the $u subfield. Alas, this is not what will happen. The C<if> condition will match when the record contains one or more 856u fields containing "google". The C<marc_remove> Fix will delete B<all> 856 fields. To correctly remove only the 856 fields in the context of the C<if> statement the C<marc_each> binder is required: do marc_each() if marc_match(856u,"google") marc_remove(856) end end The C<marc_each> will loop over all MARC fields one at a time. The if statement will only match when the current MARC field is 856 and the $u field contains "google". The C<marc_remove(856)> will only delete the current 856 field. In C<marc_each> binder, it seems for all Fixes as if there is only one field at a time visible in the record. This Fix will not work: do marc_each() if marc_match(856u,"google") marc_remove(900) # <-- there is only a 856 field in the current context end end =head2 marc_copy, marc_cut and marc_paste The L<Catmandu::Fix::marc_copy>, L<Catmandu::Fix::marc_cut>, L<Catmandu::Fix::marc_paste> Fixes are needed when complicated edits are needed in MARC record. The C<marc_copy> fill copy parts of a MARC record matching a MARC_PATH to a temporary variable. This tempoarary variable will contain an ARRAY of HASHes containing the content of the MARC field. For instance, marc_copy(650, tmp) The C<tmp> will contain something like: tmp:[ { "subfields" : [ { "a" : "Perl (Computer program language)" } ], "ind1" : " ", "ind2" : "0", "tag" : "650" }, { "ind1" : " ", "subfields" : [ { "a" : "Web servers." } ], "tag" : "650", "ind2" : "0" } ] This structure can be edited with all the Catmandu fixes. For instance you can set the first indicator to '1': set_field(tmp.*.ind1 , 1) The JSON path C<tmp.*.ind1> will match all the first indicators. The JSON path C<tmp.*.tag> will match all the MARC tags. The JSON path C<tmp.*.subfields.*.a> will match all the $a subfields. For instance, to change all 'Perl' into 'Python' in the $a subfield use this Fix: replace_all(tmp.*.subfields.*.a,"Perl","Python") When the fields need to be places back into the record the C<marc_paste> command can be used: marc_paste(subjects) This will add all 650 fields in the C<tmp> temporary variable at the B<end> of the record. You can change the MARC fields in place using the C<march_each> binder: do marc_each() # Select only the 650 fields if marc_has(650) # Create a working copy marc_copy(650,tmp) # Change some fields set_field(tmp.*.ind1 , 1) # Paste the result back marc_paste(tmp) end end The C<marc_cut> Fix works like C<marc_copy> but will delete the matching MARC field from the record. =head2 Rename MARC subfields In the example below we rename each $1 subfield in the MARC record to $0 using the L<Catmandu::Fix::marc_cut>, L<Catmandu::Fix::marc_paste> and L<Catmandu::Fix::rename> fixes: # For each marc field... do marc_each() # Cut the field into tmp.. marc_cut(***,tmp) # Rename every 1 subfield to 0 rename(tmp.*.subfields.*,1,0) # And paste it back marc_paste(tmp) end The C<marc_each> bind will loop over all the MARC fields. With C<marc_cut> we store any field (C<***> matches every field) into a C<tmp> field. The C<marc_cut> creates an array structure in C<tmp> which is easy to process using the Fix language. Using the C<rename> function we search for all the subfields, and replace the field matching the regular expression C<1> with C<0>. At the end, we paste back the C<tmp> field into the record. =head2 Setting and remove MARC indicators In the example below we set every indicator1 of the 500 field to the value "0". We will use the L<Catmandu::Fix::Bind::marc_each> bind with a loop variable: # For each marc field... do marc_each(var:this) # If the marc field is a 500 field if marc_has(500) # Set the indicator1 to value "0" set_field(this.ind1,0) # Store the result back into the MARC record marc_remove(500) marc_paste(this) end end Using the same method indicators can also be deleted by setting their value to a space " ". =head2 Adding a new MARC subfield In the example below we append a new MARC subfield $z to the 500 field with value test. We will use the L<Catmandu::Fix::Bind::marc_each> bind with a loop variable: # For each marc field... do marc_each(var:this) # If the marc field is a 500 field if marc_has(500) # add a new subfield z add_field(this.subfields.$append.z,Test) # Store the result back into the MARC record marc_remove(500) marc_paste(this) end end =head2 Remove all non-numeric fields from the MARC record # For each marc field... do marc_each(var:this) # If we have a non-numeric fields unless all_match(this.tag,"\d{3}") # Remove this tag marc_remove(***) end end =head1 WRITING =head2 Convert a MARC record into a MARC record (do nothing) $ catmandu convert MARC to MARC < data.mrc > output.mrc =head2 Add a 920a field with value 'checked' to all records $ catmandu convert MARC to MARC --fix 'marc_add("900",a,"checked")' < data.mrc > output.mrc =head2 Delete the 024 fields from all MARC records $ catmandu convert MARC to MARC --fix 'marc_remove("024")' < data.mrc > output.mrc =head2 Set the 650p field to 'test' for all records $ catmandu convert MARC to MARC --fix 'marc_add("650p","test")' < data.mrc > output.mrc =head2 Select only the records with 900a == book $ catmandu convert MARC to MARC --fix 'marc_map(900a,type); select all_match(type,book)' < data.mrc > output.mrc The C<all_match> also allows a regular expressions: $ catmandu convert MARC to MARC --fix 'marc_map(900a,type); select all_match(type,"[Bb]ook")' < data.mrc > output.mrc =head2 Select only the records with 900a values in a given CSV file Create a CSV file with name,value pairs (need two columns): $ cat values.csv name,values book,1 journal,1 movie,1 $ catmandu convert MARC to MARC --fix myfixes.txt < data.mrc > output.mrc with myfixes.txt like: do marc_each() marc_map(900a,test) lookup(test,values.csv,default:0) select all_match(test,1) remove_field(test) end We use a "do marc_each() ... end" loop because 900a fields can be repeated. If a MARC tag isn't repeatable this loop not isn't needed. With marc_map we copy first the value of a marc subfield to a 'test' field. This test we lookup against the CSV file. Then, we select only the records that are found in the CSV file (and return the correct value). =head1 DEDUPLICATION =head2 Check for duplicate ISBN numbers in a MARC file In this example we extract from a MARC file all the ISBN numbers from the 020 and do a little bit of data cleaning using the L<Catmandu::Identifier> project. To install this package, we run this command: $ cpanm Catmandu::Identifier To extract all the ISBN numbers we use this Fix script 'dedup.fix': marc_map(020a, identifier.$append) replace_all(identifier.*,"\s+.*","") do list(path:identifier) isbn13(.) end do hashmap(exporter:YAML) copy_field(identifier,key) copy_field(_id,value) end The first C<marc_map> fix maps every 020 field to an identifier array. The C<replace_all> cleans the data a bit and deletes some unwanted text. The C<do list> will transform all the ISBN numbers to ISBN13. The C<do hashmap> will create an internal mapping table of identifier,_id key value pairs. For very identifier, one or more _id can be stored. At the end of all MARC processing this mapping table is dumped from memory as a YAML document. Run this fix as: $ catmandu convert MARC to Null --fix dedup.fix < marc.mrc > output.yml The output YAML file will contain the ISBN to document ID mapping. We only need the ISBN numbers with more than one hit. We need a little bit of cleanup on this YAML file to reach our final result. Use the following 'cleanup.fix' script: select exists(value.1) join_field(value,",") This first C<select> fix selects only the records with more than one hit. The C<join_field> will turn the array of results into a string. Execute this Fix like: $ catmandu convert YAML to TSV --fix cleanup.fix < output.yml > result.csv This will provide a tab delimited file of double isbn numbers in the MARC input file. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Validator�������������������������������������������������������������������������������������������000755��000765��000024�� 0�14137142137� 22446� 5����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu���������������������������������������������������������������������������������������������������������������������������������������MARC.pm���������������������������������������������������������������������������������������������100644��000765��000024�� 5431�14137142137� 23671� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Validator�����������������������������������������������������������������������������������������������������������������������������package Catmandu::Validator::MARC; use Catmandu::Sane; use Catmandu::Util qw(:io :is :check); use MARC::Schema; use Moo; our $VERSION = '1.271'; with qw(Catmandu::Validator); has schema => ( is => 'ro' ); has ignore_unknown_fields => ( is => 'ro' ); has ignore_unknown_subfields => ( is => 'ro' ); has options => ( is => 'ro', init_arg => undef, builder => sub { return { ignore_unknown_fields => $_[0]->ignore_unknown_fields, ignore_unknown_subfields => $_[0]->ignore_unknown_subfields, } }, ); sub BUILD { my ($self, $args) = @_; if (defined $self->schema) { unless (is_instance($self->schema, 'MARC::Schema')) { if (is_string($self->schema)) { $self->{schema} = MARC::Schema->new({file => $self->schema}); } } } else { $self->{schema} = MARC::Schema->new(); } } sub validate_data { my ($self, $record) = @_; my @errors = $self->schema->check($record, %{$self->options}); return @errors ? \@errors : undef; } 1; __END__ =head1 NAME Catmandu::Validator::MARC - Validate MARC records against a MARC21 Schema =head1 SYNOPSIS In Perl code: use Catmandu::Validator::MARC; Catmandu::Validator::MARC; use DDP; # load default MARC schema my $validator = Catmandu::Validator::MARC->new(); # ... or load custom MARC schema my $validator = Catmandu::Validator::MARC->new( schema => 'schema.json' ); my $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); $importer->each( sub { my $record = shift; unless($validator->validate($record)){ p $_ for @{$validator->last_errors()}; } }); In Catmandu Fix language: # reject all items not conforming to the default MARC schema select valid(., MARC) # reject all items not conforming to a custom MARC schema select valid(., MARC, schema: 'schema.json') =head1 DESCRIPTION This L<Catmandu::Validator> can be used to check MARC records against an MARC21 schema. For more information see L<MARC::Schema> and L<"MARC21 structure in JSON"|https://pkiraly.github.io/2018/01/28/marc21-in-json/>. See also L<Catmandu::Fix::validate>, and L<Catmandu::Fix::Condition::valid> for usage of validators in Catmandu Fix language. =head1 CONFIGURATION =over =item schema MARC Schema given as filename (JSON) or instance of L<MARC::Schema>. =item ignore_unknown_fields Don't report fields not included in the schema. =item ignore_unknown_subfields Don't report subfields not included in the schema. =back =head1 AUTHOR Johann Rolschewski, E<lt>jorol at cpanE<gt> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MARC������������������������������������������������������������������������������������������������000755��000765��000024�� 0�14137142137� 22550� 5����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Exporter��������������������������������������������������������������������������������������������������������������������������������ISO.t�����������������������������������������������������������������������������������������������100644��000765��000024�� 2432�14137142137� 23530� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Exporter/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Exporter::MARC; use Catmandu::Importer::MARC; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Exporter::MARC::ISO'; use_ok $pkg; } require_ok $pkg; my $marciso = undef; my $record = { _id => '000000002', record => [ [ 'LDR', ' ', ' ' , '_', '00209nam a2200097 i 4500' ] , [ '001', ' ', ' ' , '_', '000000002' ] , [ '008', ' ', ' ' , '_', '050601s1921 xx |||||||||||||| ||dut ' ], [ '245', '1', '0' , 'a', 'Catmandu Test' ] , [ '650', ' ', '0' , 'a', 'Perl' ] , [ '650', ' ', '0' , 'a', 'MARC' , 'a' , 'MARC2' ] , [ '650', ' ', '0' , 'a', '加德滿都' ] , ] }; note("export marc"); { my $exporter = Catmandu::Exporter::MARC->new(file => \$marciso, type=> 'ISO'); ok $exporter , 'got a MARC/ISO exporter'; ok $exporter->add($record) , 'add'; ok $exporter->commit , 'commit'; ok length($marciso) >= 127 , 'got iso'; } note("parse the results"); { my $importer = Catmandu::Importer::MARC->new(file => \$marciso , type => 'ISO'); ok $importer , 'got a MARC/ISO importer'; my $result = $importer->first; ok $result , 'got a result'; is_deeply $result , $record , 'got the expected result'; } done_testing; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MiJ.t�����������������������������������������������������������������������������������������������100644��000765��000024�� 1626�14137142137� 23561� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Exporter/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Exporter::MARC; use JSON::XS; my $pkg; BEGIN { $pkg = 'Catmandu::Exporter::MARC::MiJ'; use_ok $pkg; } require_ok $pkg; my $json = undef; my $exporter = Catmandu::Exporter::MARC->new(file => \$json, type=> 'MiJ' , skip_empty_subfields => 1); ok $exporter , 'got an MARC/MiJ exporter'; ok $exporter->add({ _id => '1' , record => [ ['001', undef, undef, '_', 'rec001'], ['100', ' ', ' ', 'a', 'Davis, Miles' , 'c' , 'Test'], ['245', ' ', ' ', 'a', 'Sketches in Blue' , ], ['500', ' ', ' ', 'a', "test"], ['501', ' ', ' ', 'a', "test"], ['502', ' ', ' ', 'a', "bla", 'b' , 'ok'], ] }) , 'add a record'; ok $exporter->commit , 'commit'; my $perl = decode_json $json; ok $perl , 'decode json'; done_testing; ����������������������������������������������������������������������������������������������������������XML.t�����������������������������������������������������������������������������������������������100644��000765��000024�� 11246�14137142137� 23561� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Exporter/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Exporter::MARC; use XML::XPath; use XML::LibXML; my $pkg; BEGIN { $pkg = 'Catmandu::Exporter::MARC::XML'; use_ok $pkg; } require_ok $pkg; my $xml = undef; my $exporter = Catmandu::Exporter::MARC->new(file => \$xml, type=> 'XML' , collection => 0); ok $exporter , 'got an MARC/XML exporter'; ok $exporter->add({ record => [ ['001', undef, undef, undef, 'rec001'], ['100', ' ', ' ', 'a', 'Davis, Miles'], ['245', ' ', ' ', 'a', 'Sketches in Blue' , ], ['500', ' ', ' ', 'a', undef], ['501', ' ', ' ' ], ['502', ' ', ' ', 'a', undef, 'b' , 'ok'], ['503'. ' ', ' ', 'a', ''], ] }); ok $exporter->commit; my $xp; ok($xp = XML::XPath->new(xml => $xml), "parse XML"); ok($xp->findvalue('/marc:record/marc:controlfield[@tag="001"]') eq 'rec001','test 001'); ok($xp->findvalue('/marc:record/marc:datafield[@tag="245"]/marc:subfield[@code="a"]') eq 'Sketches in Blue','test 245'); ok(! $xp->exists('/marc:record/marc:datafield[@tag="500"]') ,'skipped 500 - only empty subfields'); ok(! $xp->exists('/marc:record/marc:datafield[@tag="501"]') ,'skipped 501 - no subfields'); ok(! $xp->exists('/marc:record/marc:datafield[@tag="502"]/marc:subfield[@code="a"]') ,'skipped 502a - empty subfields'); ok(! $xp->exists('/marc:record/marc:datafield[@tag="503"]/marc:subfield[@code="a"]') ,'skipped 503a - empty subfields'); $xml = undef; $exporter = Catmandu::Exporter::MARC->new(file => \$xml, type=> 'XML', record_format => 'MARC-in-JSON', collection => 0); ok($exporter, "create exporter MARC-in-JSON"); ok $exporter->add({ fields => [ { '001' => 'rec001' } , { '100' => { 'subfields' => [ { 'a' => 'Davis, Miles'}], 'ind1' => ' ', 'ind2' => ' '}} , { '245' => { 'subfields' => [ { 'a' => 'Sketches in Blue'}], 'ind1' => ' ', 'ind2' => ' '}} , { '500' => { 'subfields' => [ { 'a' => undef }] , 'ind1' => ' ', 'ind2' => ' '}} , { '501' => { 'ind1' => ' ', 'ind2' => ' ' }} , { '502' => { 'subfields' => [ { 'a' => undef} , { 'b' , 'ok' } ] , 'ind1' => ' ', 'ind2' => ' ' } } , { '503' => { 'subfields' => [ { 'a' => '' }] , 'ind1' => ' ', 'ind2' => ' '}} , ] }); ok $exporter->commit; ok($xp = XML::XPath->new(xml => $xml), "parse XML"); ok($xp->findvalue('/marc:record/marc:controlfield[@tag="001"]') eq 'rec001','test 001'); ok($xp->findvalue('/marc:record/marc:datafield[@tag="245"]/marc:subfield[@code="a"]') eq 'Sketches in Blue','test 245'); ok(! $xp->exists('/marc:record/marc:datafield[@tag="500"]') ,'skipped 500 - only empty subfields'); ok(! $xp->exists('/marc:record/marc:datafield[@tag="501"]') ,'skipped 501 - no subfields'); ok(! $xp->exists('/marc:record/marc:datafield[@tag="502"]/marc:subfield[@code="a"]') ,'skipped 502a - empty subfields'); ok(! $xp->exists('/marc:record/marc:datafield[@tag="503"]/marc:subfield[@code="a"]') ,'skipped 503a - empty subfields'); { my $record = { record => [ ['001', undef, undef, undef, 'rec002'], ['100', ' ', ' ', 'a', 'Slayer'], ['245', ' ', ' ', 'a', 'Reign in Blood' , ] ] }; # XML exporter with default arguments my $xml = undef; my $exporter = Catmandu::Exporter::MARC->new(file => \$xml, type => 'XML'); $exporter->add($record); $exporter->commit; my $dom = XML::LibXML->load_xml( string => $xml ); ok($dom->version() eq '1.0', 'document version'); ok($dom->encoding() eq 'UTF-8', 'document encoding'); my $root = $dom->documentElement(); ok($root->localname eq 'collection', 'root collection'); ok($root->prefix eq 'marc', 'namespace prefix'); # XML exporter with arguments $xml = undef; $exporter = Catmandu::Exporter::MARC->new(file => \$xml, type => 'XML', collection => 0, xml_declaration => 1); $exporter->add($record); $exporter->commit; $dom = XML::LibXML->load_xml( string => $xml ); ok($dom->version() eq '1.0', 'document version'); ok($dom->encoding() eq 'UTF-8', 'document encoding'); $root = $dom->documentElement(); ok($root->localname eq 'record', 'root record'); ok($root->prefix eq 'marc', 'namespace prefix'); # XML exporter with arguments $xml = undef; $exporter = Catmandu::Exporter::MARC->new(file => \$xml, type => 'XML' , collection => 1, xml_declaration => 0); $exporter->add($record); $exporter->commit; $dom = XML::LibXML->load_xml( string => $xml ); $root = $dom->documentElement(); ok($root->localname eq 'collection', 'root collection'); ok($root->prefix eq 'marc', 'namespace prefix'); } done_testing; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MARC������������������������������������������������������������������������������������������������000755��000765��000024�� 0�14137142137� 22541� 5����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Importer��������������������������������������������������������������������������������������������������������������������������������ISO.t�����������������������������������������������������������������������������������������������100644��000765��000024�� 17531�14137142137� 23547� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Importer/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; my $pkg; BEGIN { $pkg = 'Catmandu::Importer::MARC::ISO'; use_ok $pkg; } require_ok $pkg; my $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); ok $importer , 'got an MARC/ISO importer'; my $records = $importer->to_array(); ok( @$records == 10, 'got all records' ); ok( $records->[0]->{'_id'} eq 'fol05731351 ', 'got _id' ); ok( $records->[0]->{'record'}->[1][-1] eq 'fol05731351 ', 'got subfield' ); ok( $records->[0]->{'_id'} eq $records->[0]->{'record'}->[1][-1], '_id matches record id' ); # Test that the ID can be formed like '260c' (not a useful field in real life!) $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO", id => '260c', ); $records = $importer->to_array(); ok( $records->[0]->{'_id'} eq '2000.', 'got _id from subfield' ); # Test inlines my $data = join("",<DATA>); $importer = Catmandu::Importer::MARC->new( file => \$data, type => "ISO" ); $records = $importer->to_array(); ok( @$records == 10, 'got all records' ); ok( $records->[0]->{'_id'} eq 'fol05731351 ', 'got _id' ); ok( $records->[0]->{'record'}->[1][-1] eq 'fol05731351 ', 'got subfield' ); ok( $records->[0]->{'_id'} eq $records->[0]->{'record'}->[1][-1], '_id matches record id' ); done_testing; __DATA__ 00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������MiJ.t�����������������������������������������������������������������������������������������������100644��000765��000024�� 1007�14137142137� 23543� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Importer/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; my $pkg; BEGIN { $pkg = 'Catmandu::Importer::MARC::MiJ'; use_ok $pkg; } require_ok $pkg; my $importer = Catmandu::Importer::MARC->new(file => 't/test.ndj', type => 'MiJ'); ok $importer , 'got an MARC/MiJ importer'; my $records = $importer->to_array; ok(@$records == 9); is($records->[0]->{record}->[1]->[4] , '000000040'); is($records->[0]->{record}->[13]->[4] , 'Pevsner, Nikolaus,'); done_testing; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������RAW.t�����������������������������������������������������������������������������������������������100644��000765��000024�� 1010�14137142137� 23507� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Importer/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Importer::MARC::RAW'; use_ok $pkg; } require_ok $pkg; my $importer = Catmandu::Importer::MARC->new( file => 't/dollar_subfields.mrc', type => "RAW" ); ok $importer , 'got an MARC/RAW importer'; my $records = $importer->to_array(); ok( @$records == 2, 'got all records' ); is( $records->[0]->{'_id'} , '12162', 'got _id' ); done_testing; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������XML.t�����������������������������������������������������������������������������������������������100644��000765��000024�� 1442�14137142137� 23527� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Importer/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Importer::MARC::XML'; use_ok $pkg; } require_ok $pkg; my $importer = Catmandu::Importer::MARC->new(file => 't/marc.xml', type => 'XML'); ok $importer , 'got an MARC/XML importer'; my $records = $importer->to_array; ok(@$records == 1); is($records->[0]->{record}->[1]->[0] , '920'); is($records->[0]->{record}->[8]->[4] , 'TEEM (한국전기전자재료학회)'); # Test broken records $importer = Catmandu::Importer::MARC->new( file => 't/broken.xml', type => "XML", skip_errors => 1, ); ok $importer , 'got an MARC/XML importer'; $records = $importer->to_array(); ok (@$records == 9, 'skipped one record'); done_testing; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_append.pm��������������������������������������������������������������������������������������100644��000765��000024�� 2226�14137142137� 24220� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix�����������������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::marc_append; use Catmandu::Sane; use Moo; use Catmandu::MARC; use Catmandu::Fix::Has; with 'Catmandu::Fix::Inlineable'; our $VERSION = '1.271'; has marc_path => (fix_arg => 1); has value => (fix_arg => 1); sub fix { my ($self,$data) = @_; my $marc_path = $self->marc_path; my $value = $self->value; return Catmandu::MARC->instance->marc_append($data,$marc_path,$value); } =head1 NAME Catmandu::Fix::marc_append - add a value at the end of a MARC field =head1 SYNOPSIS # Append a period at the end of the 100 field marc_append(100,".") =head1 DESCRIPTION Append a value at the end of a MARC (sub)field =head1 METHODS =head2 marc_append(MARC_PATH , VALUE) For each (sub)field matching the MARC_PATH append the VALUE to the last subfield. This value can be a literal or reference an existing field in the record using the dollar JSON_PATH syntax. =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_append as => 'marc_append'; my $data = { record => [...] }; $data = marc_append($data, '100', '.'); =head1 SEE ALSO L<Catmandu::Fix> =cut 1; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_remove.pm��������������������������������������������������������������������������������������100644��000765��000024�� 2107�14137142137� 24244� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix�����������������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::marc_remove; use Catmandu::Sane; use Catmandu::MARC; use Moo; use Catmandu::Fix::Has; with 'Catmandu::Fix::Inlineable'; our $VERSION = '1.271'; has marc_path => (fix_arg => 1); sub fix { my ($self,$data) = @_; my $marc_path = $self->marc_path; return Catmandu::MARC->instance->marc_remove($data, $marc_path); } =head1 NAME Catmandu::Fix::marc_remove - remove marc (sub)fields =head1 SYNOPSIS # remove all marc 600 fields marc_remove('600') # remove the 245-a subfield marc_remove('245a') =head1 DESCRIPTION Remove (sub)fields in a MARC record =head1 METHODS =head2 marc_remove(MARC_PATH) Delete the (sub)fields from the MARC record as indicated by the MARC_PATH. =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_remove as => 'marc_remove'; my $data = { record => [...] }; $data = marc_remove($data,'600'); =head1 SEE ALSO L<Catmandu::Fix::marc_add>, L<Catmandu::Fix::marc_copy>, L<Catmandu::Fix::marc_cut>, L<Catmandu::Fix::marc_paste>, L<Catmandu::Fix::marc_set> =cut 1; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Base.t����������������������������������������������������������������������������������������������100644��000765��000024�� 273�14137142137� 23731� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Exporter/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Exporter::MARC::Base'; use_ok $pkg; } require_ok $pkg; done_testing; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Line.t����������������������������������������������������������������������������������������������100644��000765��000024�� 4415�14137142137� 23770� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Exporter/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Exporter::MARC; use Catmandu::Importer::MARC; my $pkg; BEGIN { $pkg = 'Catmandu::Exporter::MARC::Line'; use_ok $pkg; } require_ok $pkg; my $marcline = undef; note('Exporting to MARC/Line'); { my $exporter = Catmandu::Exporter::MARC->new(file => \$marcline, type=> 'Line'); ok $exporter , 'got an MARC/Line exporter'; ok $exporter->add({ '_id' => '987874829', 'record' => [ [ 'LDR', ' ', ' ', '_', '00251nas a2200121 c 4500' ], [ '001', ' ', ' ', '_', '987874829' ], [ '007', ' ', ' ', '_', 'cr||||||||||||' ], [ '022', ' ', ' ', 'a', '1940-5758' ], [ '041', ' ', ' ', 'a', 'eng' ], [ 245, '0', '0', 'a', 'Code4Lib journal', 'b', 'C4LJ' ], [ 246, '3', ' ', 'a', 'C4LJ' ], [ 362, '0', ' ', 'a', '1.2007 -' ], [ 856, '4', ' ', 'u', 'http://journal.code4lib.org/' ] ]}) , 'add'; ok $exporter->commit , 'commit'; my $expected = <<'EOF'; 00251nas a2200121 c 4500 001 987874829 007 cr|||||||||||| 022 $a 1940-5758 041 $a eng 245 00 $a Code4Lib journal $b C4LJ 246 3 $a C4LJ 362 0 $a 1.2007 - 856 4 $u http://journal.code4lib.org/ EOF is $marcline, $expected, 'got the expected result'; } note('Roundtripping'); { my $importer_iso = Catmandu::Importer::MARC->new(file => 't/camel.mrc', type=> 'ISO'); ok $importer_iso , 'got an MARC/ISO importer'; my $records_iso = $importer_iso->to_array; ok @$records_iso == 10, 'got all records'; my $marcline; my $exporter = Catmandu::Exporter::MARC->new(file => \$marcline, type=> 'Line'); ok $exporter , 'got an MARC/Line exporter'; ok $exporter->add_many($records_iso) , 'add records'; ok $exporter->commit , 'commit'; my $importer_line = Catmandu::Importer::MARC->new(file => \$marcline, type=> 'Line'); ok $importer_line , 'got an MARC/Line importer'; my $records_line = $importer_line->to_array; ok @$records_line == 10, 'got all records'; is_deeply $records_iso, $records_line, 'got expected result'; } done_testing; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Bind������������������������������������������������������������������������������������������������000755��000765��000024�� 0�14137142137� 21620� 5����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix�������������������������������������������������������������������������������������������������������������������������������������marc_each.t�����������������������������������������������������������������������������������������100644��000765��000024�� 1657�14137142137� 24060� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix/Bind��������������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use Catmandu::Fix; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::Bind::marc_each'; use_ok $pkg; } require_ok $pkg; my $fixer = Catmandu::Fix->new(fixes => [q| do marc_each() if marc_match("***a",'Perl') add_field(has_perl,true) end if marc_match("100",'.*') reject() end if marc_match(245a,'.*') marc_remove(245) end end marc_map("100",mainentry) marc_map("245",title) |]); my $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); $fixer->fix($importer)->each(sub { my $record = $_[0]; my $id = $record->{_id}; ok exists $record->{record}, "created a marc record $id"; is $record->{has_perl}, 'true', "created has_dlc tag $id"; ok ! exists $record->{mainentry} , "field 100 deleted $id"; ok ! exists $record->{title} , "field 245 deleted $id"; }); done_testing; ���������������������������������������������������������������������������������Line.t����������������������������������������������������������������������������������������������100644��000765��000024�� 3045�14137142137� 23757� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Importer/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Importer::MARC::Line'; use_ok $pkg; } require_ok $pkg; my $record =<<'EOF'; 00251nas a2200121 c 4500 001 987874829 007 cr|||||||||||| 022 $a 1940-5758 041 $a eng 245 00 $a Code4Lib journal $b C4LJ 246 3 $a C4LJ 362 0 $a 1.2007 - 856 4 $u http://journal.code4lib.org/ EOF my $expected = { '_id' => '987874829', 'record' => [ ['LDR', ' ', ' ', '_', '00251nas a2200121 c 4500'], ['001', ' ', ' ', '_', '987874829'], ['007', ' ', ' ', '_', 'cr||||||||||||'], ['022', ' ', ' ', 'a', '1940-5758'], ['041', ' ', ' ', 'a', 'eng'], [245, '0', '0', 'a', 'Code4Lib journal', 'b', 'C4LJ'], [246, '3', ' ', 'a', 'C4LJ'], [362, '0', ' ', 'a', '1.2007 -'], [856, '4', ' ', 'u', 'http://journal.code4lib.org/'] ] }; note('Importing from MARC/Line inline'); { my $importer = Catmandu::Importer::MARC->new( file => \$record, type => 'Line' ); ok $importer , 'got an MARC/Line importer'; my $result = $importer->first; ok $result , 'got a record'; is_deeply $result , $expected , 'got expected result'; } note('Importing from MARC/Line file'); { my $importer = Catmandu::Importer::MARC->new( file => 't/code4lib.line', type => "Line" ); ok $importer , 'got an MARC/Line importer'; my $result = $importer->first; is_deeply $result, $expected , 'got expected result'; } done_testing; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Lint.t����������������������������������������������������������������������������������������������100644��000765��000024�� 1303�14137142137� 23771� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Importer/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; my $pkg; BEGIN { $pkg = 'Catmandu::Importer::MARC::Lint'; use_ok $pkg; } require_ok $pkg; my $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "Lint" ); ok $importer , 'got an MARC/ISO importer'; my $records = $importer->to_array(); ok @$records == 10, 'got all records' ; is $records->[0]->{'_id'} , 'fol05731351 ', 'got _id' ; is $records->[0]->{'record'}->[1][-1] , 'fol05731351 ', 'got subfield' ; is $records->[0]->{'_id'} , $records->[0]->{'record'}->[1][-1], '_id matches record id' ; ok $records->[9]->{lint} , 'got lint'; done_testing; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_in_json.pm�������������������������������������������������������������������������������������100644��000765��000024�� 2622�14137142137� 24410� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix�����������������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::marc_in_json; use Catmandu::Sane; use Catmandu::MARC; use Moo; use Catmandu::Fix::Has; with 'Catmandu::Fix::Inlineable'; our $VERSION = '1.271'; has reverse => (fix_opt => 1); # Transform a raw MARC array into MARC-in-JSON # See Ross Singer work at: # http://dilettantes.code4lib.org/blog/2010/09/a-proposal-to-serialize-marc-in-json/ sub fix { my ($self, $data) = @_; if ($self->reverse) { return Catmandu::MARC->instance->marc_json_to_record($data); } else { return Catmandu::MARC->instance->marc_record_to_json($data); } } =head1 NAME Catmandu::Fix::marc_in_json - transform a Catmandu MARC record into MARC-in-JSON =head1 SYNOPSIS # Transform a Catmandu MARC 'record' into a MARC-in-JSON record marc_in_json() # Reverse, transform a MARC-in-JSON record into a Catmandu MARC record marc_in_json(reverse:1) =head1 DESCRIPTION Convert the MARC record into MARC-in-JSON format =head1 METHODS =head2 marc_in_json( [OPT1:VAL, OPT2: VAL]) Convert a Catmandu MARC record into the MARC-in-JSON format. =head1 OPTIONS =head2 reverse: 0|1 Convert a MARC-in-JSON record back into the Catmandu MARC format. =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_in_json as => 'marc_in_json'; my $data = { record => [...] }; $data = marc_in_json($data); =head1 SEE ALSO L<Catmandu::Fix> =cut 1; ��������������������������������������������������������������������������������������������������������������Inline����������������������������������������������������������������������������������������������000755��000765��000024�� 0�14137142137� 22162� 5����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix�������������������������������������������������������������������������������������������������������������������������������������marc_add.t������������������������������������������������������������������������������������������100644��000765��000024�� 274�14137142137� 24224� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix/Inline������������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::Inline::marc_add'; use_ok $pkg; } require_ok $pkg; done_testing; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_map.t������������������������������������������������������������������������������������������100644��000765��000024�� 274�14137142137� 24251� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix/Inline������������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::Inline::marc_map'; use_ok $pkg; } require_ok $pkg; done_testing; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_set.t������������������������������������������������������������������������������������������100644��000765��000024�� 274�14137142137� 24267� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix/Inline������������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::Inline::marc_set'; use_ok $pkg; } require_ok $pkg; done_testing; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MARC������������������������������������������������������������������������������������������������000755��000765��000024�� 0�14137142137� 23053� 5����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Exporter������������������������������������������������������������������������������������������������������������������������������ISO.pm����������������������������������������������������������������������������������������������100644��000765��000024�� 3754�14137142137� 24214� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Exporter/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Exporter::MARC::ISO - Exporter for MARC records to ISO =head1 SYNOPSIS # From the command line $ catmandu convert MARC --type ISO to MARC --type XML < /foo/bar.mrc # From Perl use Catmandu; my $importer = Catmandu->importer('MARC', file => "/foo/bar.mrc" , type => 'ISO'); my $exporter = Catmandu->exporter('MARC', file => "/foo/bar.xml", type => 'XML' ); $exporter->add($importer); $exporter->commit; =head1 CONFIGURATION =over =item file Write output to a local file given by its path or file handle. Alternatively a scalar reference can be passed to write to a string and a code reference can be used to write to a callback function. =item fh Write the output to an L<IO::Handle>. If not specified, L<Catmandu::Util::io|Catmandu::Util/IO-functions> is used to create the output handle from the C<file> argument or by using STDOUT. =item fix An ARRAY of one or more fixes or file scripts to be applied to exported items. =item encoding Binmode of the output stream C<fh>. Set to "C<:utf8>" by default. =back =head1 METHODS See L<Catmandu::Exporter>, L<Catmandu::Addable>, L<Catmandu::Fixable>, L<Catmandu::Counter>, and L<Catmandu::Logger> for a full list of methods. =head1 SEE ALSO L<Catmandu::Exporter> =cut package Catmandu::Exporter::MARC::ISO; use Catmandu::Sane; use Catmandu::Util qw(xml_escape is_different :array :is); use Moo; use MARC::Record; use MARC::Field; use MARC::File::USMARC; our $VERSION = '1.271'; with 'Catmandu::Exporter', 'Catmandu::Exporter::MARC::Base'; has record => (is => 'ro' , default => sub { 'record'}); has record_format => (is => 'ro' , default => sub { 'raw'} ); sub add { my ($self, $data) = @_; if ($self->record_format eq 'MARC-in-JSON') { $data = $self->_json_to_raw($data); } my $marc = $self->_raw_to_marc_record($data->{$self->record}); $self->fh->print(MARC::File::USMARC::encode($marc)); } sub commit { my ($self) = @_; $self->fh->flush; 1; } 1; ��������������������MiJ.pm����������������������������������������������������������������������������������������������100644��000765��000024�� 6346�14137142137� 24241� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Exporter/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Exporter::MARC::MiJ - Exporter for MARC records to MARC in JSON =head1 SYNOPSIS # From the command line $ catmandu convert MARC --type XML to MARC --type MiJ < /foo/bar.xml # From Perl use Catmandu; my $importer = Catmandu->importer('MARC', file => "/foo/bar.xml" , type => 'XML'); my $exporter = Catmandu->exporter('MARC', file => "bar.json", type => 'MiJ' ); $exporter->add($importer); $exporter->commit; =head1 CONFIGURATION =over =item file Write output to a local file given by its path or file handle. Alternatively a scalar reference can be passed to write to a string and a code reference can be used to write to a callback function. =item fh Write the output to an L<IO::Handle>. If not specified, L<Catmandu::Util::io|Catmandu::Util/IO-functions> is used to create the output handle from the C<file> argument or by using STDOUT. =item fix An ARRAY of one or more fixes or file scripts to be applied to exported items. =item encoding Binmode of the output stream C<fh>. Set to "C<:utf8>" by default. =back =head1 METHODS See L<Catmandu::Exporter>, L<Catmandu::Addable>, L<Catmandu::Fixable>, L<Catmandu::Counter>, and L<Catmandu::Logger> for a full list of methods. =head1 FORMAT The MARC-in-JSON record format contains two fields: * 'leader' - the MARC leader * 'fields' - an array of MARC fields Each item in the MARC fields array contains the MARC tag and as value a hash containing three fields: * 'subfields' - an array of MARC subfields * 'ind1' - the first indicator of the MARC tag * 'ind2' - the second indicator of the MARC tag Each subfield item is an hash containing the MARC subfield tag and its value. An example of one MARC record in the MiJ serialization format is given below: { "leader": "0000cam 2200000 4500", "fields": [ { "100": { "subfields": [ { "a": "Huberman, Leo," }, { "d": "1903-1968." } ], "ind1": "1", "ind2": " " } }, { "700": { "subfields": [ { "a": "Sweezy, Paul M." }, { "q": "(Paul Marlor)," }, { "d": "1910-2004." } ], "ind1": "1", "ind2": " " } }, ... } =head1 SEE ALSO L<Catmandu::Exporter> =cut package Catmandu::Exporter::MARC::MiJ; use Catmandu::Sane; use Catmandu::Util qw(xml_escape is_different :array :is); use Moo; use MARC::Record; use MARC::Field; use MARC::File::MiJ; our $VERSION = '1.271'; with 'Catmandu::Exporter', 'Catmandu::Exporter::MARC::Base'; has record => (is => 'ro' , default => sub { 'record'}); has record_format => (is => 'ro' , default => sub { 'raw'} ); sub add { my ($self, $data) = @_; if ($self->record_format eq 'MARC-in-JSON') { $data = $self->_json_to_raw($data); } my $marc = $self->_raw_to_marc_record($data->{$self->record}); $self->fh->print(MARC::File::MiJ::encode($marc) . "\n"); } sub commit { my ($self) = @_; $self->fh->flush; 1; } 1; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������XML.pm����������������������������������������������������������������������������������������������100644��000765��000024�� 11215�14137142137� 24231� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Exporter/MARC�������������������������������������������������������������������������������������������������������������������������package Catmandu::Exporter::MARC::XML; use Catmandu::Sane; use Catmandu::Util qw(xml_escape is_different :array :is); use Moo; our $VERSION = '1.271'; with 'Catmandu::Exporter', 'Catmandu::Exporter::MARC::Base', 'Catmandu::Buffer'; has record => (is => 'ro' , default => sub { 'record'}); has record_format => (is => 'ro' , default => sub { 'raw'} ); has skip_empty_subfields => (is => 'ro' , default => sub { 1 }); has collection => (is => 'ro' , default => sub { 1 }); has xml_declaration => (is => 'ro' , default => sub { 1 }); has pretty => (is => 'rw' , default => sub { 0 }); has _n => (is => 'rw' , default => sub { 0 }); sub _line { my ($self, $indent, $line) = @_; if ($self->pretty) { my $pre = " " x $indent; $self->buffer_add( $pre.$line."\n" ); } else { $self->buffer_add( $line ); } } sub add { my ($self, $data) = @_; if ($self->_n == 0) { if ($self->xml_declaration) { $self->buffer_add( Catmandu::Util::xml_declaration ); } if ($self->collection) { $self->_line(0,'<marc:collection xmlns:marc="http://www.loc.gov/MARC21/slim">'); } $self->_n(1); } my $indent = $self->collection ? 1 : 0; if ($self->record_format eq 'MARC-in-JSON') { $data = $self->_json_to_raw($data); } if ($self->collection) { $self->_line($indent,'<marc:record>'); } else { $self->_line($indent,'<marc:record xmlns:marc="http://www.loc.gov/MARC21/slim">'); } my $record = $data->{$self->record}; for my $field (@$record) { my ($tag, $ind1, $ind2, @data) = @$field; $ind1 = ' ' unless defined $ind1; $ind2 = ' ' unless defined $ind2; @data = $self->_clean_raw_data($tag,@data) if $self->skip_empty_subfields; next if $tag eq 'FMT'; next if @data == 0; if ($tag eq 'LDR') { $self->_line($indent+1,'<marc:leader>' . xml_escape($data[1]) . '</marc:leader>'); } elsif ($tag =~ /^00/) { $self->_line($indent+1,'<marc:controlfield tag="' . xml_escape($tag) . '">' . xml_escape($data[1]) . '</marc:controlfield>'); } else { $self->_line($indent+1,'<marc:datafield tag="' . xml_escape($tag) . '" ind1="' . $ind1 . '" ind2="' . $ind2 . '">'); while (@data) { my ($code, $val) = splice(@data, 0, 2); next unless $code =~ /[A-Za-z0-9]/; $self->_line($indent+2,'<marc:subfield code="' . $code . '">' . xml_escape($val) . '</marc:subfield>'); } $self->_line($indent+1,'</marc:datafield>'); } } $self->_line($indent,'</marc:record>'); $self->fh->print( join('', @{ $self->buffer } ) ); $self->clear_buffer; } sub commit { my ($self) = @_; if($self->collection){ $self->fh->print('</marc:collection>'); } $self->fh->flush; 1; } 1; __END__ =head1 NAME Catmandu::Exporter::MARC::XML - Exporter for MARC records to MARCXML =head1 SYNOPSIS # From the command line $ catmandu convert MARC to MARC --type XML < /foo/data.mrc # From Perl use Catmandu; my $importer = Catmandu->importer('MARC', file => "/foo/bar.mrc" , type => 'ISO'); my $exporter = Catmandu->exporter('MARC', file => "marc.xml", type => 'XML' ); $exporter->add($importer); $exporter->commit; =head1 DESCRIPTION This L<Catmandu::Exporter::MARC> serializes MARC records as XML. =head1 CONFIGURATION =over =item file Write output to a local file given by its path or file handle. Alternatively a scalar reference can be passed to write to a string and a code reference can be used to write to a callback function. =item fh Write the output to an L<IO::Handle>. If not specified, L<Catmandu::Util::io|Catmandu::Util/IO-functions> is used to create the output handle from the C<file> argument or by using STDOUT. =item fix An ARRAY of one or more fixes or file scripts to be applied to exported items. =item record the key containing the marc record (default: 'record') =item record_format Optionally set to 'MARC-in-JSON' when the input format is in MARC-in-JSON =item collection add a marc:collection header when true (default: true) =item xml_declaration add a xml declaration when true (default: true) =item skip_empty_subfields skip fields which don't contain any data (default: false) =item pretty pretty-print XML =back =head1 METHODS See L<Catmandu::Exporter>, L<Catmandu::Addable>, L<Catmandu::Fixable>, L<Catmandu::Counter>, and L<Catmandu::Logger> for a full list of methods. =head1 SEE ALSO L<Catmandu::Importer::MARC::XML> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MARC������������������������������������������������������������������������������������������������000755��000765��000024�� 0�14137142137� 23044� 5����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Importer������������������������������������������������������������������������������������������������������������������������������ISO.pm����������������������������������������������������������������������������������������������100644��000765��000024�� 4113�14137142137� 24173� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Importer/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Importer::MARC::ISO - Package that imports ISO MARC records =head1 SYNOPSIS # From the command line (ISO is the default importer for MARC) $ catmandu convert MARC --fix "marc_map('245a','title')" < /foo/bar.mrc # From perl use Catmandu; # import records from file my $importer = Catmandu->importer('MARC',file => '/foo/bar.mrc'); my $fixer = Catmandu->fixer("marc_map('245a','title')"); $importer->each(sub { my $item = shift; ... }); # or using the fixer $fixer->fix($importer)->each(sub { my $item = shift; printf "title: %s\n" , $item->{title}; }); =head1 CONFIGURATION =over =item id The MARC field which contains the system id (default: 001) =item file Read input from a local file given by its path. Alternatively a scalar reference can be passed to read from a string. =item fh Read input from an L<IO::Handle>. If not specified, L<Catmandu::Util::io> is used to create the input stream from the C<file> argument or by using STDIN. =item encoding Binmode of the input stream C<fh>. Set to C<:utf8> by default. =item fix An ARRAY of one or more fixes or file scripts to be applied to imported items. =back =head1 METHODS Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited. =head1 SEE ALSO L<Catmandu::Importer>, L<Catmandu::Iterable> =cut package Catmandu::Importer::MARC::ISO; use Catmandu::Sane; use Moo; use MARC::File::USMARC; use Catmandu::Importer::MARC::Decoder; our $VERSION = '1.271'; with 'Catmandu::Importer'; has id => (is => 'ro' , default => sub { '001' }); has records => (is => 'rw'); has decoder => ( is => 'ro', lazy => 1 , builder => sub { Catmandu::Importer::MARC::Decoder->new; } ); sub generator { my ($self) = @_; my $file = MARC::File::USMARC->in($self->fh); # MARC::File doesn't provide support for inline files $file = $self->decoder->fake_marc_file($self->fh,'MARC::File::USMARC') unless $file; sub { $self->decoder->decode($file->next(),$self->id); } } 1; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MiJ.pm����������������������������������������������������������������������������������������������100644��000765��000024�� 3407�14137142137� 24225� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Importer/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Importer::MARC::MiJ - Package that imports MARC-in-JSON records =head1 SYNOPSIS # From the command line $ catmandu convert MARC --type MiJ --fix "marc_map('245a','title')" < /foo/bar.json # From perl use Catmandu; # import records from file my $importer = Catmandu->importer('MARC',file => '/foo/bar.json', type => 'MiJ'); my $fixer = Catmandu->fixer("marc_map('245a','title')"); $importer->each(sub { my $item = shift; ... }); # or using the fixer $fixer->fix($importer)->each(sub { my $item = shift; printf "title: %s\n" , $item->{title}; }); =head1 METHODS =head2 new(file => $file , fh => $fh , id => $field) Parse a file or a filehandle into a L<Catmandu::Iterable>. Optionally provide an id attribute specifying the source of the system identifer '_id' field (e.g. '001'). =head1 INHERTED METHODS =head2 count =head2 each(&callback) =head2 ... Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited. =head1 SEE ALSO L<MARC::File::MARCMaker> =cut package Catmandu::Importer::MARC::MiJ; use Catmandu::Sane; use Moo; use MARC::Record; use Catmandu::Importer::MARC::Decoder; use MARC::File::MiJ; our $VERSION = '1.271'; with 'Catmandu::Importer'; has id => (is => 'ro' , default => sub { '001' }); has decoder => ( is => 'ro', lazy => 1 , builder => sub { Catmandu::Importer::MARC::Decoder->new; } ); sub generator { my ($self) = @_; my $file = MARC::File::MiJ->in($self->file); # MARC::File doesn't provide support for inline files $file = $self->decoder->fake_marc_file($self->fh,'MARC::File::MiJ') unless $file; sub { $self->decoder->decode($file->next(),$self->id); } } 1; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������RAW.pm����������������������������������������������������������������������������������������������100644��000765��000024�� 3740�14137142137� 24177� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Importer/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Importer::MARC::RAW - Package that imports ISO 2709 encoded MARC records =head1 SYNOPSIS # From the command line $ catmandu convert MARC --type RAW --fix "marc_map('245a','title')" < /foo/bar.mrc # From perl use Catmandu; # import records from file my $importer = Catmandu->importer('MARC',file => '/foo/bar.mrc' , type => 'RAW'); my $fixer = Catmandu->fixer("marc_map('245a','title')"); $importer->each(sub { my $item = shift; ... }); # or using the fixer $fixer->fix($importer)->each(sub { my $item = shift; printf "title: %s\n" , $item->{title}; }); =head1 CONFIGURATION =over =item id The MARC field which contains the system id (default: 001) =item file Read input from a local file given by its path. Alternatively a scalar reference can be passed to read from a string. =item fh Read input from an L<IO::Handle>. If not specified, L<Catmandu::Util::io> is used to create the input stream from the C<file> argument or by using STDIN. =item encoding Binmode of the input stream C<fh>. Set to C<:utf8> by default. =item fix An ARRAY of one or more fixes or file scripts to be applied to imported items. =back =head1 METHODS Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited. =head1 SEE ALSO L<Catmandu::Importer>, L<Catmandu::Iterable> =cut package Catmandu::Importer::MARC::RAW; use Catmandu::Sane; use Moo; use MARC::Parser::RAW; our $VERSION = '1.271'; with 'Catmandu::Importer'; has id => (is => 'ro' , default => sub { '001' }); sub generator { my $self = shift; my $parser = MARC::Parser::RAW->new($self->fh); sub { my $record = $parser->next(); return undef unless defined $record; my $id; for my $field (@$record) { my ($tag,$ind1,$ind2,$p,$data,@q) = @$field; if ($tag eq $self->id) { $id = $data; last; } } +{ _id => $id , record => $record }; }; } 1; ��������������������������������XML.pm����������������������������������������������������������������������������������������������100644��000765��000024�� 4152�14137142137� 24204� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Importer/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Importer::MARC::XML - Package that imports MARCXML records =head1 SYNOPSIS # From the command line $ catmandu convert MARC --type XML --fix "marc_map('245a','title')" < /foo/data.xml # From perl use Catmandu; # import records from file my $importer = Catmandu->importer('MARC',file => '/foo/data.xml', type => 'XML'); my $fixer = Catmandu->fixer("marc_map('245a','title')"); $importer->each(sub { my $item = shift; ... }); # or using the fixer $fixer->fix($importer)->each(sub { my $item = shift; printf "title: %s\n" , $item->{title}; }); =head1 CONFIGURATION =over =item id The MARC field which contains the system id (default: 001) =item file Read input from a local file given by its path. Alternatively a scalar reference can be passed to read from a string. =item fh Read input from an L<IO::Handle>. If not specified, L<Catmandu::Util::io> is used to create the input stream from the C<file> argument or by using STDIN. =item encoding Binmode of the input stream C<fh>. Set to C<:utf8> by default. =item fix An ARRAY of one or more fixes or file scripts to be applied to imported items. =back =head1 METHODS Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited. =head1 SEE ALSO L<Catmandu::Importer>, L<Catmandu::Iterable> =cut package Catmandu::Importer::MARC::XML; use Catmandu::Sane; use Moo; use Catmandu::Importer::MARC::Decoder; use MARC::File::XML (BinaryEncoding => 'UTF-8', DefaultEncoding => 'UTF-8', RecordFormat => 'MARC21'); our $VERSION = '1.271'; with 'Catmandu::Importer'; has id => (is => 'ro' , default => sub { '001' }); has decoder => ( is => 'ro', lazy => 1 , builder => sub { Catmandu::Importer::MARC::Decoder->new; } ); sub generator { my ($self) = @_; my $file = MARC::File::XML->in($self->fh); # MARC::File doesn't provide support for inline files $file = $self->decoder->fake_marc_file($self->fh,'MARC::File::XML') unless $file; sub { $self->decoder->decode($file->next(),$self->id); } } 1; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_replace_all.t����������������������������������������������������������������������������������100644��000765��000024�� 2607�14137142137� 24543� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix�������������������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use Catmandu::Fix; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_replace_all'; use_ok $pkg; } require_ok $pkg; #--- { my $fixer = Catmandu::Fix->new(fixes => [q|marc_replace_all('100a','Tobias','John')|,q|marc_map('100a','test')|]); my $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); my $record = $fixer->fix($importer->first); like $record->{test}, qr/^Martinsson, John,$/, q|fix: marc_replace_all('100a','Tobias','John')|; } #--- { my $fixer = Catmandu::Fix->new(fixes => [q|marc_replace_all('630','Active','Silly')|,q|marc_map('630a','test.$append')|]); my $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); my $record = $fixer->fix($importer->first); is_deeply $record->{test}, [ 'Silly server pages.' , 'SillyX.' ], q|fix: marc_replace_all('630a','Active','Silly')|; } #--- { my $fixer = Catmandu::Fix->new(fixes => [q|marc_replace_all('630','(Active)','{$1}')|,q|marc_map('630a','test.$append')|]); my $importer = Catmandu::Importer::MARC->new( file => 't/camel.mrc', type => "ISO" ); my $record = $fixer->fix($importer->first); is_deeply $record->{test}, [ '{Active} server pages.' , '{Active}X.' ], q|fix: marc_replace_all('630a','Active','{Active}')|; } done_testing; �������������������������������������������������������������������������������������������������������������������������Record.t��������������������������������������������������������������������������������������������100644��000765��000024�� 1560�14137142137� 24306� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Importer/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use MARC::File::USMARC; use Catmandu::Importer::MARC; my $pkg; BEGIN { $pkg = 'Catmandu::Importer::MARC::Record'; use_ok $pkg; } require_ok $pkg; my $file = MARC::File::USMARC->in('t/camel.mrc'); my @marc_objects; while ( my $marc = $file->next() ) { push( @marc_objects, $marc ); } $file->close(); undef $file; my $importer = Catmandu::Importer::MARC->new(type => 'Record' , records => \@marc_objects ); ok $importer , 'got an MARC/Record importer'; my $records = $importer->to_array(); ok( @$records == 10, 'got all records' ); ok( $records->[0]->{'_id'} eq 'fol05731351 ', 'got _id' ); ok( $records->[0]->{'record'}->[1][-1] eq 'fol05731351 ', 'got subfield' ); ok( $records->[0]->{'_id'} eq $records->[0]->{'record'}->[1][-1], '_id matches record id' ); done_testing; ������������������������������������������������������������������������������������������������������������������������������������������������Base.pm���������������������������������������������������������������������������������������������100644��000765��000024�� 3710�14137142137� 24424� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Exporter/MARC�������������������������������������������������������������������������������������������������������������������������package Catmandu::Exporter::MARC::Base; use Moo::Role; use MARC::Record; use MARC::Field; our $VERSION = '1.271'; sub _raw_to_marc_record { my ($self,$data) = @_; my $marc = MARC::Record->new(); for my $field (@$data) { my ($tag, $ind1, $ind2, @data) = @$field; $ind1 //= ' '; $ind2 //= ' '; @data = $self->_clean_raw_data($tag,@data); if (@data < 2) { $self->log->warn("$tag doesn't have any data"); } elsif ($tag eq 'LDR') { $marc->leader($data[1]); } elsif ($tag =~ /^00/) { my $field = MARC::Field->new($tag,$data[1]); $marc->append_fields($field); } else { my $field = MARC::Field->new($tag, $ind1, $ind2, @data); $marc->append_fields($field); } } $marc; } sub _json_to_raw { my ($self,$data) = @_; my @record = (); push (@record , [ 'LDR', ' ', ' ', '_' , $data->{leader}] ) if defined $data->{leader}; for my $field (@{$data->{fields}}) { my ($tag) = keys %$field; my $val = $field->{$tag}; if (ref $val) { my $ind1 = $val->{ind1} // ' '; my $ind2 = $val->{ind2} // ' '; my @parts; for my $subfield (@{$val->{subfields}}) { my ($code) = keys %$subfield; my $str = $subfield->{$code}; push @parts , $code, $str; } push @record , [ $tag, $ind1 , $ind2 , @parts]; } else { push @record , [ $tag, ' ' , ' ', '_', $val]; } } { _id => $data->{_id} , record => \@record }; } sub _clean_raw_data { my ($self, $tag, @data) = @_; my @result = (); for (my $i = 0 ; $i < @data ; $i += 2) { if (($tag =~ /^00/ || defined $data[$i]) && defined $data[$i+1] && $data[$i+1] =~ /\S+/) { push(@result, $data[$i], $data[$i+1]); } } @result; } 1; ��������������������������������������������������������Line.pm���������������������������������������������������������������������������������������������100644��000765��000024�� 5454�14137142137� 24450� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Exporter/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Exporter::MARC::Line - Exporter for MARC records to Index Data's MARC Line format =head1 SYNOPSIS # From the command line $ catmandu convert MARC to MARC --type Line < t/camel.mrc # From Perl use Catmandu; my $importer = Catmandu->importer('MARC', file => "t/camel.mrc", type => 'ISO'); my $exporter = Catmandu->exporter('MARC', file => "camel.line", type => 'Line' ); $exporter->add($importer); $exporter->commit; =head1 CONFIGURATION =over =item file Write output to a local file given by its path or file handle. Alternatively a scalar reference can be passed to write to a string and a code reference can be used to write to a callback function. =item fh Write the output to an L<IO::Handle>. If not specified, L<Catmandu::Util::io|Catmandu::Util/IO-functions> is used to create the output handle from the C<file> argument or by using STDOUT. =item fix An ARRAY of one or more fixes or file scripts to be applied to exported items. =item encoding Binmode of the output stream C<fh>. Set to "C<:utf8>" by default. =back =head1 METHODS See L<Catmandu::Exporter>, L<Catmandu::Addable>, L<Catmandu::Fixable>, L<Catmandu::Counter>, and L<Catmandu::Logger> for a full list of methods. =head1 AUTHOR Johann Rolschewski, E<lt>jorol at cpanE<gt> =head1 SEE ALSO L<Catmandu::Exporter> =cut package Catmandu::Exporter::MARC::Line; use Catmandu::Sane; use Moo; our $VERSION = '1.271'; with 'Catmandu::Exporter', 'Catmandu::Exporter::MARC::Base'; has record => (is => 'ro', default => sub {'record'}); has record_format => (is => 'ro', default => sub {'raw'}); sub add { my ($self, $data) = @_; if ($self->record_format eq 'MARC-in-JSON') { $data = $self->_json_to_raw($data); } for my $field (@{$data->{record}}) { my ($field, $ind1, $ind2, @sf) = @$field; if (!defined($ind1) || $ind1 =~ /^\s*$/) {$ind1 = ' '} if (!defined($ind2) || $ind2 =~ /^\s*$/) {$ind2 = ' '} next unless ($field =~ /^(LDR|\d{3})/); my @sf_map = (); for (my $i = 0; $i < @sf; $i += 2) { if ($field eq 'LDR' || $field < 10) { push @sf_map, $sf[$i + 1] if (defined($sf[$i + 1])); } else { push @sf_map, '$' . $sf[$i], $sf[$i + 1] if (defined($sf[$i + 1])); } } my $sf_str = join(" ", @sf_map); my $line; if ($field =~ /^\d{3}$/ && $field >= 10) { $line = "$field $ind1$ind2 $sf_str\n"; } elsif ($field eq 'LDR') { $line = "$sf_str\n"; } else { $line = "$field $sf_str\n"; } $self->fh->print($line); } $self->fh->print("\n"); } sub commit { my ($self) = @_; $self->fh->flush; 1; } 1; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Bind������������������������������������������������������������������������������������������������000755��000765��000024�� 0�14137142137� 22123� 5����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix�����������������������������������������������������������������������������������������������������������������������������������marc_each.pm����������������������������������������������������������������������������������������100644��000765��000024�� 5607�14137142137� 24533� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix/Bind������������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::Bind::marc_each; use Moo; use Catmandu::Sane; use Catmandu::Util; use Catmandu::MARC; use Catmandu::Fix::Has; use namespace::clean; our $VERSION = '1.271'; has var => (fix_opt => 1); has __marc => (is => 'lazy'); with 'Catmandu::Fix::Bind', 'Catmandu::Fix::Bind::Group'; sub _build___marc { Catmandu::MARC->instance; } sub unit { my ($self,$data) = @_; $data; } sub bind { my ($self,$mvar,$code) = @_; my $rows = $mvar->{record} // []; my @new = (); for my $row (@{$rows}) { $mvar->{record} = [$row]; if ($self->var) { $mvar->{$self->var} = $self->__marc->marc_copy($mvar,"***")->[0]->[0]; } my $fixed = $code->($mvar); push @new , @{$fixed->{record}} if defined $fixed && exists $fixed->{record} && defined $fixed->{record}; if ($self->var) { delete $mvar->{$self->var}; } } $mvar->{record} = \@new if exists $mvar->{record}; $mvar; } 1; =head1 NAME Catmandu::Fix::Bind::marc_each - a binder that loops over MARC fields =head1 SYNOPSIS # Only add the 720 field to the authors when the $e subfield contains a 'promotor' do marc_each() if marc_match("720e","promotor") marc_map("720ab",authors.$append) end end # Delete all the 500 fields do marc_each() if marc_has("500") reject() end end =head1 DESCRIPTION The marc_each binder will iterate over each individual MARC field and execute the fixes on each individual field. When a MARC record contains: 500 $aTest 500 $aTest2$eskip 500 $aTest3 then the Fix bellow will copy all 500 fields to note field, except for 500 fields with a subfield $e equal to "skip". do marc_each() unless marc_match("500e",skip) marc_map("500",note.$append) end end The result will be: note: [Test,Test3] =head1 CONFIGURATION =head2 var Optional loop variable which contains a HASH containing MARC field information with the following fields: tag - The names of the MARC field ind1 - The value of the first indicator ind2 - The value of the second indicator subfields - An array of subfield items. Each subfield item is a hash of the subfield code and subfield value Given the MARC field: 500[1, ] $aTest$bRest the loop variable will contain: tag: 500 ind1: 1 ind2: ' ' subfields: - a : Test - b : Rest The loop variables can be used to have extra control over the processing of the MARC fields. do marc_each(var:this) # Set the indicator1 of all MARC 500 field to the value "3" if all_match(this.tag,500) set_field(tag.ind1,3) # Store the result in the MARC file marc_remove(500) marc_paste(this) end end =head1 SEE ALSO L<Catmandu::Fix::Bind> =cut �������������������������������������������������������������������������������������������������������������������������Line.pm���������������������������������������������������������������������������������������������100644��000765��000024�� 10113�14137142137� 24445� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Importer/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Importer::MARC::Line - Package that imports Index Data's MARC Line records =head1 SYNOPSIS # From the command line $ catmandu convert MARC --type Line --fix 'marc_map("245a","title")' < t/code4lib.line $ catmandu convert MARC --type Line to MARC --type XML < t/code4lib.line # From perl use Catmandu; # import records from file my $importer = Catmandu->importer('MARC',file => 't/code4lib.line' , type => 'Line'); my $fixer = Catmandu->fixer("marc_map('245a','title')"); $importer->each(sub { my $item = shift; ... }); # or using the fixer $fixer->fix($importer)->each(sub { my $item = shift; printf "title: %s\n" , $item->{title}; }); =head1 CONFIGURATION =over =item file Read input from a local file given by its path. Alternatively a scalar reference can be passed to read from a string. =item fh Read input from an L<IO::Handle>. If not specified, L<Catmandu::Util::io> is used to create the input stream from the C<file> argument or by using STDIN. =item encoding Binmode of the input stream C<fh>. Set to C<:utf8> by default. =item fix An ARRAY of one or more fixes or file scripts to be applied to imported items. =back =head1 METHODS Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited. =head1 AUTHOR Johann Rolschewski, E<lt>jorol at cpanE<gt> =head1 SEE ALSO L<Catmandu::Importer>, L<Catmandu::Iterable> =cut package Catmandu::Importer::MARC::Line; use Catmandu::Sane; use Moo; our $VERSION = '1.271'; with 'Catmandu::Importer'; sub generator { my ($self) = @_; sub { state $fh = $self->fh; state $count = 0; # set input record separator to paragraph mode local $/ = ''; # get next record while (defined(my $data = $fh->getline)) { $count++; my @record; my $id; chomp $data; # split record into fields my @fields = split /\n/, $data; # first field should be the MARC leader my $leader = shift @fields; if (length $leader == 24 && $leader =~ m/^\d{5}.*4500/) { push @record, ['LDR', ' ', ' ', '_', $leader]; } else { warn "not a valid MARC leader: $leader"; } for my $field (@fields) { # process control fields if ($field =~ m/^00.\s/) { my ($tag, $value) = $field =~ m/^(\d{3})\s(.*)/; push @record, [$tag, ' ', ' ', '_', $value]; # get record id if ($tag eq '001') { $id = $value; } } # process variable data fields else { my ($tag, $ind1, $ind2, $sf) = $field =~ m/^(\d{3})\s([a-z0-9\s])([a-z0-9\s])\s(.*)/; # check if field has content if ($sf) { # get subfield codes by pattern my @sf_codes = $sf =~ m/\s?\$([a-z0-9])\s/g; # split string by subfield code pattern my @sf_values = grep {length $_} split /\s?\$[a-z0-9]\s/, $sf; if (scalar @sf_codes != scalar @sf_values) { warn 'different number of subfield codes and values'; next; } push @record, [ $tag, $ind1, $ind2, map {$_, shift @sf_values} @sf_codes ]; } # skip empty fields else { warn "field $tag has no content"; next; } } } return {_id => defined $id ? $id : $count, record => \@record}; } return; }; } 1; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Lint.pm���������������������������������������������������������������������������������������������100644��000765��000024�� 5132�14137142137� 24451� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Importer/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Importer::MARC::Lint - Package that imports USMARC records validated with MARC::Lint =head1 SYNOPSIS # From the command line $ catmandu convert MARC --type Lint --fix "marc_map('245a','title')" < /foo/data.mrc # From perl use Catmandu; # import records from file my $importer = Catmandu->importer('MARC',file => '/foo/data.mrc', type => 'Lint'); my $fixer = Catmandu->fixer("marc_map('245a','title')"); $importer->each(sub { my $item = shift; ... }); # or using the fixer $fixer->fix($importer)->each(sub { my $item = shift; printf "title: %s\n" , $item->{title}; }); =head1 DESCRIPTION All items produced with the Catmandu::Importer::MARC::Lint importer contain three keys: '_id' : the system identifier of the record (usually the 001 field) 'record' : an ARRAY of ARRAYs containing the record data 'lint' : the output of MARC::Lint's check_record on the MARC record =head1 CONFIGURATION =over =item id The MARC field which contains the system id (default: 001) =item file Read input from a local file given by its path. Alternatively a scalar reference can be passed to read from a string. =item fh Read input from an L<IO::Handle>. If not specified, L<Catmandu::Util::io> is used to create the input stream from the C<file> argument or by using STDIN. =item encoding Binmode of the input stream C<fh>. Set to C<:utf8> by default. =item fix An ARRAY of one or more fixes or file scripts to be applied to imported items. =back =head1 METHODS Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited. =head1 SEE ALSO L<Catmandu::Importer>, L<Catmandu::Iterable> =cut package Catmandu::Importer::MARC::Lint; use Catmandu::Sane; use Moo; use MARC::File::USMARC; use MARC::Lint; use Catmandu::Importer::MARC::Decoder; our $VERSION = '1.271'; with 'Catmandu::Importer'; has id => (is => 'ro' , default => sub { '001' }); has decoder => ( is => 'ro', lazy => 1 , builder => sub { Catmandu::Importer::MARC::Decoder->new; } ); sub generator { my ($self) = @_; my $lint = MARC::Lint->new; my $file = MARC::File::USMARC->in($self->fh); # MARC::File doesn't provide support for inline files $file = $self->decoder->fake_marc_file($self->fh,'MARC::File::USMARC') unless $file; sub { my $marc = $file->next(); return undef unless $marc; my $doc = $self->decoder->decode($marc,$self->id); $lint->check_record( $marc ); $doc->{lint} = [$lint->warnings]; $doc; } } 1; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Decoder.t�������������������������������������������������������������������������������������������100644��000765��000024�� 276�14137142137� 24420� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Importer/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Importer::MARC::Decoder'; use_ok $pkg; } require_ok $pkg; done_testing; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Inline����������������������������������������������������������������������������������������������000755��000765��000024�� 0�14137142137� 22465� 5����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix�����������������������������������������������������������������������������������������������������������������������������������marc_add.pm�����������������������������������������������������������������������������������������100644��000765��000024�� 1517�14137142137� 24721� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix/Inline����������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::Inline::marc_add; use Catmandu::MARC; require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(marc_add); %EXPORT_TAGS = (all => [qw(marc_add)]); our $VERSION = '1.271'; sub marc_add { my ($data,$marc_path,@subfields) = @_; return Catmandu::MARC->instance->marc_add($data, $marc_path, @subfields); } =head1 NAME Catmandu::Fix::Inline::marc_add- A marc_add-er for Perl scripts (DEPRECATED) =head1 SYNOPSIS use Catmandu::Fix::Inline::marc_add qw(:all); # Set to a literal value my $data = marc_add($data, '245', a => 'value'); # Set to a copy of a deeply nested JSON path my $data = marc_add($data, '245', a => '$.my.deep.field'); =head1 DEPRECATED This module is deprecated. Use the inline functionality of L<Catmandu::Fix::marc_add> instead. =head1 SEE ALSO L<Catmandu::Fix::marc_add> =cut 1; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_map.pm�����������������������������������������������������������������������������������������100644��000765��000024�� 4574�14137142137� 24754� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix/Inline����������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Fix::Inline::marc_map - A marc_map-er for Perl scripts (DEPRECATED) =head1 SYNOPSIS use Catmandu::Fix::Inline::marc_map qw(:all); my $title = marc_map($data,'245a'); my @authors = marc_map($data,'100ab'); # Get all 245 in an array @arr = marc_map($data,'245'); # Or as a string $str = marc_map($data,'245'); # str joined by a semi-colon $f245 = marc_map($data, '245', -join , ';'); # Get the 245-$a$b$c subfields ordered as given in the record $str = marc_map($data,'245abc'); # Get the 245-$c$b$a subfields orders as given in the mapping $str = marc_map($data,'245cba', -pluck => 1); # Get the 008 characters 35-35 $str = marc_map($data,'008_/35-35'); # Get all 100 subfields except the digits $str = marc_map($data,'100^0123456789'); # If the 260c exist set the output to 'OK' (else undef) $ok = marc_map($data,'260c',-value => 'OK'); # The $data should be a Catmandu-style MARC hash { record => [ ['field', 'ind1' , 'ind2' , 'subfieldcode or underscore' , 'data' , 'subfield' , 'data' , ...] , ... ]}; # Example $data = { record => [ ['001' , ' ', ' ' , '_' , 'myrecord-001' ] , ['020' , ' ', ' ' , 'a' , '978-1449303587' ] , ['245' , ' ', ' ' , 'a' , 'Learning Per' , 'c', '/ by Randal L. Schwartz'], ]}; =head1 DEPRECATED This module is deprecated. Use the inline functionality of L<Catmandu::Fix::marc_map> instead. =head1 SEE ALSO L<Catmandu::Fix::Inline::marc_map> =cut package Catmandu::Fix::Inline::marc_map; use Catmandu::MARC; require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(marc_map); %EXPORT_TAGS = (all => [qw(marc_map)]); our $VERSION = '1.271'; sub marc_map { my ($data,$marc_path,%opts) = @_; # Set default to nested_arrays for backwards compatibility $opts{'-join'} = '' unless exists $opts{'-join'}; $opts{'-split'} = 0 unless exists $opts{'-split'}; $opts{'-pluck'} = 0 unless exists $opts{'-pluck'}; $opts{'-nested_arrays'} = 1 unless exists $opts{'-nested_arrays'}; $opts{'-no-implicit-split'} = 1; $opts{'-force_array'} = 1 if (wantarray); my $vals = Catmandu::MARC->instance->marc_map( $data, $marc_path, \%opts); $vals = $vals->[0] if $opts{'-split'}; if (wantarray) { defined($vals) && ref($vals) eq 'ARRAY' ? @$vals : ($vals); } else { $vals; } } 1; ������������������������������������������������������������������������������������������������������������������������������������marc_set.pm�����������������������������������������������������������������������������������������100644��000765��000024�� 1502�14137142137� 24756� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix/Inline����������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::Inline::marc_set; use Catmandu::MARC; require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(marc_set); %EXPORT_TAGS = (all => [qw(marc_set)]); our $VERSION = '1.271'; sub marc_set { my ($data,$marc_path,$value) = @_; return Catmandu::MARC->instance->marc_set($data,$marc_path,$value); } =head1 NAME Catmandu::Fix::Inline::marc_set - A marc_set-er for Perl scripts (DEPRECATED) =head1 SYNOPSIS use Catmandu::Fix::Inline::marc_set qw(:all); # Set to literal value my $data = marc_set($data,'245[1]a', 'value'); # Set to a copy of a deeply nested JSON path my $data = marc_set($data,'245[1]a', '$.my.deep.field'); =head1 DEPRECATED This module is deprecated. Use the inline functionality of L<Catmandu::Fix::marc_set> instead. =head1 SEE ALSO L<Catmandu::Fix::marc_set> =cut 1; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ALEPHSEQ.t������������������������������������������������������������������������������������������100644��000765��000024�� 6443�14137142137� 24306� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Exporter/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Exporter::MARC; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Exporter::MARC::ALEPHSEQ'; use_ok $pkg; } require_ok $pkg; note("catmandu marc export"); { my $alephseq = undef; my $record = { _id => '000000002', record => [ [ 'FMT', ' ', ' ' , '_', 'BK' ] , [ 'LDR', ' ', ' ' , '_', '00000nam a2200301 i 4500' ] , [ '001', ' ', ' ' , '_', '000000002' ] , [ '008', ' ', ' ' , '_', '050601s1921 xx |||||||||||||| ||dut ' ], [ '245', '1', '0' , 'a', 'Catmandu Test' ] , [ '650', ' ', '0' , 'a', 'Perl' ] , [ '650', ' ', '0' , 'a', 'MARC' , 'a' , 'MARC2' ] , [ '650', ' ', '0' , 'a', '加德滿都' ] , ] }; my $expected =<<'EOF'; 000000002 FMT L BK 000000002 LDR L 00000nam^a2200301^i^4500 000000002 001 L 000000002 000000002 008 L 050601s1921^^^^xx^||||||||||||||^||dut^^ 000000002 24510 L $$aCatmandu Test 000000002 650 0 L $$aPerl 000000002 650 0 L $$aMARC$$aMARC2 000000002 650 0 L $$a加德滿都 EOF my $exporter = Catmandu::Exporter::MARC->new(file => \$alephseq, type=> 'ALEPHSEQ' , skip_empty_subfields => 1); ok $exporter , 'got an MARC/ALEPHSEQ exporter'; ok $exporter->add($record) , 'add a record'; ok $exporter->commit , 'commit'; is_deeply $alephseq , $expected , 'got expected results'; } note("marc-in-json export"); { my $alephseq ; my $exporter = Catmandu::Exporter::MARC->new( file => \$alephseq, type=> 'ALEPHSEQ', record_format => 'MARC-in-JSON', skip_empty_subfields => 1 ); ok($exporter, "create exporter ALEPHSEQ for MARC-in-JSON"); my $record = { _id => '000000002', leader => "00000nam a2200301 i 4500" , fields => [ { '001' => '000000002' } , { '245' => { ind1 => '1' , ind2 => '0' , subfields => [ { a => 'Catmandu Test'} ] } } , { '650' => { ind1 => ' ' , ind2 => '0' , subfields => [ { a => 'Perl'} ] } } , { '650' => { ind1 => ' ' , ind2 => '0' , subfields => [ { a => 'MARC'} , { a => 'MARC2'} ] } } , { '650' => { ind1 => ' ' , ind2 => '0' , subfields => [ { a => '加德滿都'} ] } } , ] }; my $expected =<<'EOF'; 000000002 FMT L BK 000000002 LDR L 00000nam^a2200301^i^4500 000000002 001 L 000000002 000000002 24510 L $$aCatmandu Test 000000002 650 0 L $$aPerl 000000002 650 0 L $$aMARC$$aMARC2 000000002 650 0 L $$a加德滿都 EOF ok $exporter->add($record), 'add record'; ok $exporter->commit() , 'commit'; is_deeply $alephseq , $expected , 'got expected results'; } done_testing; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Condition�������������������������������������������������������������������������������������������000755��000765��000024�� 0�14137142137� 22672� 5����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix�������������������������������������������������������������������������������������������������������������������������������������marc_has.t������������������������������������������������������������������������������������������100644��000765��000024�� 2543�14137142137� 25000� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix/Condition���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use Catmandu::Fix; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::Condition::marc_has'; use_ok $pkg; } require_ok $pkg; my $fixes = <<EOF; if marc_has(245) add_field(test.\$append,'has 245') end if marc_has_many(245) add_field(test.\$append,'has many 245') end if marc_has_many(CAT) add_field(test.\$append,'has many CAT') end if marc_has_many(920a) add_field(test.\$append,'has many 920a') end unless marc_has_many(100a) add_field(test.\$append,'has not more than one 100a') end EOF my $record =<<'EOF'; 000000002 FMT L BK 000000002 LDR L 00000nam^a2200301^i^4500 000000002 001 L 000000002 000000002 1001 L $$aMusterman 000000002 24510 L $$aCatmandu Test 000000002 650 0 L $$aPerl 000000002 650 0 L $$aMARC$$aMARC2 000000002 650 0 L $$a加德滿都 000000002 920 0 L $$ablue$$ared 000000002 CAT 0 L $$atest 000000002 CAT 0 L $$atest EOF my $fixer = Catmandu::Fix->new(fixes => [$fixes]); my $importer = Catmandu::Importer::MARC->new( file => \$record, type => "ALEPHSEQ" ); my $records = $fixer->fix($importer)->to_array; my $errors = $records->[0]->{test}; is_deeply $errors , [ 'has 245' , 'has many CAT' , 'has many 920a' , 'has not more than one 100a' , ] , 'got the expected results'; done_testing; �������������������������������������������������������������������������������������������������������������������������������������������������������������marc_remove.t���������������������������������������������������������������������������������������100644��000765��000024�� 277�14137142137� 24774� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix/Inline������������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::Inline::marc_remove'; use_ok $pkg; } require_ok $pkg; done_testing; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ALEPHSEQ.t������������������������������������������������������������������������������������������100644��000765��000024�� 3202�14137142137� 24265� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Importer/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Importer::MARC::ALEPHSEQ'; use_ok $pkg; } require_ok $pkg; my $record =<<'EOF'; 000000002 FMT L BK 000000002 LDR L 00000nam^a2200301^i^4500 000000002 001 L 000000002 000000002 008 L 050601s1921^^^^xx^||||||||||||||^||dut^^ 000000002 24510 L $$aCatmandu Test 000000002 650 0 L $$aPerl 000000002 650 0 L $$aMARC$$aMARC2 000000002 650 0 L $$a加德滿都 EOF my $expected = { _id => '000000002', record => [ [ 'FMT', ' ', ' ' , '_', 'BK' ] , [ 'LDR', ' ', ' ' , '_', '00000nam a2200301 i 4500' ] , [ '001', ' ', ' ' , '_', '000000002' ] , [ '008', ' ', ' ' , '_', '050601s1921 xx |||||||||||||| ||dut ' ], [ '245', '1', '0' , 'a', 'Catmandu Test' ] , [ '650', ' ', '0' , 'a', 'Perl' ] , [ '650', ' ', '0' , 'a', 'MARC' , 'a' , 'MARC2' ] , [ '650', ' ', '0' , 'a', '加德滿都' ] , ] }; note("inline pasing"); { my $importer = Catmandu::Importer::MARC->new( file => \$record, type => "ALEPHSEQ" ); ok $importer , 'got an MARC/ALEPHSEQ importer'; my $result = $importer->first; ok $result , 'got a record'; is_deeply $result , $expected , 'got the expected result'; } note("file pasing"); { my $importer = Catmandu::Importer::MARC->new( file => 't/rug01.aleph', type => "ALEPHSEQ" ); ok $importer , 'got an MARC/ALEPHSEQ importer'; my $results = $importer->to_array; ok @$results == 2 , 'got two records'; is_deeply $results->[0] , $expected , 'got the expected result'; } done_testing; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MicroLIF.t������������������������������������������������������������������������������������������100644��000765��000024�� 1013�14137142137� 24465� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Importer/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; my $pkg; BEGIN { $pkg = 'Catmandu::Importer::MARC::MicroLIF'; use_ok $pkg; } require_ok $pkg; my $importer = Catmandu::Importer::MARC->new( file => 't/sample1.lif', type => "MicroLIF" ); ok $importer , 'got an MARC/MicroLIF importer'; my @records; my $n = $importer->each( sub { push( @records, $_[0] ); } ); ok(@records == 1); ok($records[0]->{record}->[1]->[0] eq '008'); done_testing; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_replace_all.pm���������������������������������������������������������������������������������100644��000765��000024�� 3206�14137142137� 25213� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix�����������������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::marc_replace_all; use Catmandu::Sane; use Moo; use Catmandu::MARC; use Catmandu::Fix::Has; with 'Catmandu::Fix::Inlineable'; our $VERSION = '1.271'; has marc_path => (fix_arg => 1); has regex => (fix_arg => 1); has value => (fix_arg => 1); sub fix { my ($self,$data) = @_; my $marc_path = $self->marc_path; my $regex = $self->regex; my $value = $self->value; return Catmandu::MARC->instance->marc_replace_all($data,$marc_path,$regex,$value); } =head1 NAME Catmandu::Fix::marc_replace_all - regex replace (sub)field values in a MARC file =head1 SYNOPSIS # Append to all the 650-p values the string "xyz" marc_replace_all('650p','$','xyz') # Replace all 'Joe'-s in 100a to 'Joey' marc_replace_all('100a','\bJoe\b','Joey') # Replace all 'Joe'-s in 100a to the value in field x.y.z marc_replace_all('100a','\bJoe\b',$.x.y.z) # Replace all the content of 100a with everything in curly brackets marc_replace_all('100a','^(.*)$','{$1}') =head1 DESCRIPTION Use regex search and replace on MARC field values. =head1 METHODS =head2 marc_replace_all(MARC_PATH , REGEX, VALUE) For each (sub)field matching the MARC_PATH replace the pattern found by REGEX to a new VALUE. This value can be a literal or reference an existing field in the record using the dollar JSON_PATH syntax. =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_replace_all as => 'marc_replace_all'; my $data = { record => [...] }; $data = marc_replace_all($data, '245a', 'test' , 'rest'); =head1 SEE ALSO L<Catmandu::Fix> =cut 1; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Record.pm�������������������������������������������������������������������������������������������100644��000765��000024�� 3257�14137142137� 24767� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Importer/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Importer::MARC::Record - Package that imports an array of MARC::Record =head1 SYNOPSIS # From perl use Catmandu; use MARC::Record; my $record = MARC::Record->new(); my $field = MARC::Field->new('245','','','a' => 'My title.'); $record->append_fields($field); # import records from file my $importer = Catmandu->importer('MARC',file => '/foo/data.mrc' , records => [$record]); my $fixer = Catmandu->fixer("marc_map('245a','title')"); $importer->each(sub { my $item = shift; ... }); # or using the fixer $fixer->fix($importer)->each(sub { my $item = shift; printf "title: %s\n" , $item->{title}; }); =head1 METHODS =head2 new(records => [ <Marc::Record> , ... ] , id => $field) Parse an array of L<MARC::Record> into a L<Catmandu::Iterable>. Optionally provide an id attribute specifying the source of the system identifer '_id' field (e.g. '001'). =head1 INHERTED METHODS =head2 count =head2 each(&callback) =head2 ... Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited. =head1 SEE ALSO L<MARC::Record> =cut package Catmandu::Importer::MARC::Record; use Catmandu::Sane; use Catmandu::Importer::MARC::Decoder; use Moo; our $VERSION = '1.271'; with 'Catmandu::Importer'; has id => (is => 'ro' , default => sub { '001' }); has records => (is => 'rw'); has decoder => ( is => 'ro', lazy => 1 , builder => sub { Catmandu::Importer::MARC::Decoder->new; } ); sub generator { my ($self) = @_; my @records = @{$self->records}; sub { $self->decoder->decode(shift @records, $self->id); } } 1;�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MARCMaker.t�����������������������������������������������������������������������������������������100644��000765��000024�� 3401�14137142137� 24575� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Exporter/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Exporter::MARC; use Catmandu::Importer::MARC; my $pkg; BEGIN { $pkg = 'Catmandu::Exporter::MARC::MARCMaker'; use_ok $pkg; } require_ok $pkg; my $marcmaker = undef; note("Exporting to MARCMaker"); { my $exporter = Catmandu::Exporter::MARC->new(file => \$marcmaker, type=> 'MARCMaker'); ok $exporter , 'got an MARC/MARCMaker exporter'; ok $exporter->add({ _id => '1' , record => [ ['FMT', undef, undef, '_', 'BK'], ['001', undef, undef, '_', 'rec001'], ['100', ' ', ' ', 'a', 'Davis, Miles' , 'c' , 'Test'], ['245', ' ', ' ', 'a', 'Sketches in Blue' , ], ['500', ' ', ' ', 'a', undef], ['501', ' ', ' ' ], ['502', ' ', ' ', 'a', undef, 'b' , 'ok'], ['503', ' ', ' ', 'a', ''], ['CAT', ' ', ' ', 'a', 'test'], ] }) , 'add'; ok $exporter->commit , 'commit'; } note("Roundtripping"); { my $importer = Catmandu::Importer::MARC->new(file => 't/oschrift_me.mrc', type=> 'ISO'); ok $importer , 'got an MARC/MARCMaker importer'; my $records = $importer->to_array; ok @$records == 1; my $marcmaker; my $exporter = Catmandu::Exporter::MARC->new(file => \$marcmaker, type=> 'MARCMaker'); ok $exporter->add($records->[0]) , 'commit'; ok $exporter->commit , 'commit'; my $importer2 = Catmandu::Importer::MARC->new(file => \$marcmaker, type=> 'MARCMaker'); ok $importer2 , 'got an MARC/MARCMaker importer'; my $records2 = $importer2->to_array; ok @$records2 == 1; is_deeply $records->[0] , $records2->[0]; } done_testing; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MARCMaker.t�����������������������������������������������������������������������������������������100644��000765��000024�� 1037�14137142137� 24571� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Importer/MARC���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; my $pkg; BEGIN { $pkg = 'Catmandu::Importer::MARC::MARCMaker'; use_ok $pkg; } require_ok $pkg; my $importer = Catmandu::Importer::MARC->new(file => 't/camel.mrk', type => 'MARCMaker'); ok $importer , 'got an MARC/MARCMaker importer'; my $records = $importer->to_array; ok(@$records == 10); is($records->[0]->{record}->[1]->[4] , 'fol05731351 '); is($records->[0]->{record}->[11]->[4] , 'Martinsson, Tobias,'); done_testing; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Decoder.pm������������������������������������������������������������������������������������������100644��000765��000024�� 2560�14137142137� 25112� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Importer/MARC�������������������������������������������������������������������������������������������������������������������������package Catmandu::Importer::MARC::Decoder; use Catmandu::Sane; use Moo; our $VERSION = '1.271'; sub fake_marc_file { my ($self,$fh,$class) = @_; my $obj = { filename => scalar($fh), fh => $fh, recnum => 0, warnings => [], }; return( bless $obj , $class ); } sub decode { my ($self, $record, $id) = @_; return unless eval { $record->isa('MARC::Record') }; my @result = (); push @result , [ 'LDR' , ' ', ' ' , '_' , $record->leader ]; for my $field ($record->fields()) { my $tag = $field->tag; my $ind1 = $field->indicator(1) // ' '; my $ind2 = $field->indicator(2) // ' '; my @sf = (); if ($field->is_control_field) { push @sf , '_', $field->data; } for my $subfield ($field->subfields) { push @sf , @$subfield; } push @result, [$tag,$ind1,$ind2,@sf]; } my $sysid = undef; if ($id =~ /^00/ && $record->field($id)) { $sysid = $record->field($id)->data(); } elsif ($id =~ /^([0-9]{3})([[0-9a-zA-Z])$/) { my $field = $record->field($1); $sysid = $field->subfield($2) if ($field); } elsif (defined $id && $record->field($id)) { $sysid = $record->field($id)->subfield("a"); } return { _id => $sysid , record => \@result }; } 1; ������������������������������������������������������������������������������������������������������������������������������������������������marc_match.t����������������������������������������������������������������������������������������100644��000765��000024�� 3040�14137142137� 25312� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix/Condition���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::Condition::marc_match'; use_ok $pkg; } require_ok $pkg; my $mrc = <<'MRC'; <?xml version="1.0" encoding="UTF-8"?> <marc:collection xmlns:marc="http://www.loc.gov/MARC21/slim"> <marc:record> <marc:controlfield tag="001"> 92005291 </marc:controlfield> <marc:datafield ind1="1" ind2="0" tag="245"> <marc:subfield code="a">Title / </marc:subfield> <marc:subfield code="c">Name</marc:subfield> </marc:datafield> <marc:datafield ind1=" " ind2=" " tag="999"> <marc:subfield code="a">X</marc:subfield> <marc:subfield code="a">Y</marc:subfield> </marc:datafield> <marc:datafield ind1=" " ind2=" " tag="999"> <marc:subfield code="a">Z</marc:subfield> </marc:datafield> </marc:record> </marc:collection> MRC note 'marc_all_match(999,X)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'if marc_all_match(999,X) add_field(test,failed) end' ); my $record = $importer->first; ok ! $record->{test} , 'ok matched nothing' } note 'marc_all_match(999,[XYZ])'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'if marc_all_match(999,[XYZ]) add_field(test,ok) end' ); my $record = $importer->first; is $record->{test} , 'ok' , 'ok matched everything' } done_testing; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ALEPHSEQ.pm�����������������������������������������������������������������������������������������100644��000765��000024�� 7633�14137142137� 24764� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Exporter/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Exporter::MARC::ALEPHSEQ - Exporter for MARC records to Ex Libris' Aleph sequential =head1 SYNOPSIS # From the command line $ catmandu convert MARC to MARC --type ALEPHSEQ < /foo/data.mrc # From Perl use Catmandu; my $importer = Catmandu->importer('MARC', file => "/foo/bar.mrc" , type => 'ISO'); my $exporter = Catmandu->exporter('MARC', file => "marc.txt", type => 'ALEPHSEQ' ); $exporter->add($importer); $exporter->commit; =head1 CONFIGURATION =over =item file Write output to a local file given by its path or file handle. Alternatively a scalar reference can be passed to write to a string and a code reference can be used to write to a callback function. =item fh Write the output to an L<IO::Handle>. If not specified, L<Catmandu::Util::io|Catmandu::Util/IO-functions> is used to create the output handle from the C<file> argument or by using STDOUT. =item fix An ARRAY of one or more fixes or file scripts to be applied to exported items. =item encoding Binmode of the output stream C<fh>. Set to "C<:utf8>" by default. =item default_fmt Set the value of the default C<FMT> field when none is given. Set to C<BK> by default. =back =head1 METHODS See L<Catmandu::Exporter>, L<Catmandu::Addable>, L<Catmandu::Fixable>, L<Catmandu::Counter>, and L<Catmandu::Logger> for a full list of methods. =head1 SEE ALSO L<Catmandu::Exporter> =cut package Catmandu::Exporter::MARC::ALEPHSEQ; use Catmandu::Sane; use Catmandu::Util qw(xml_escape is_different :array :is); use List::Util; use Moo; our $VERSION = '1.271'; with 'Catmandu::Exporter', 'Catmandu::Exporter::MARC::Base'; has record => (is => 'ro' , default => sub { 'record'}); has record_format => (is => 'ro' , default => sub { 'raw'} ); has skip_empty_subfields => (is => 'ro' , default => sub { 0 }); has default_fmt => (is => 'ro' , default => sub { 'BK'} ); sub add { my ($self,$data) = @_; if ($self->record_format eq 'MARC-in-JSON') { $data = $self->_json_to_raw($data); } my $id_str = $data->{_id}; $id_str =~ s{\D}{0}g if defined $id_str; my $_id = sprintf("%-9.9d", $id_str // 0); my $record = $data->{$self->record}; my @lines = (); # Check required FMT field if (@$record > 0 && $record->[0]->[0] ne 'FMT') { push @lines , join('',$_id, ' ' , 'FMT', ' ', ' ' , ' L ' , $self->default_fmt); } for my $field (@$record) { my ($tag,$ind1,$ind2,@data) = @$field; $ind1 = ' ' unless defined $ind1; $ind2 = ' ' unless defined $ind2; @data = $self->_clean_raw_data($tag,@data) if $self->skip_empty_subfields; next if $#data == -1; # Joins are faster than perl string concatenation if (@data < 2) { $self->log->warn("$tag doesn't have any data"); } if (index($tag,'LDR') == 0) { my $ldr = $data[1]; $ldr =~ s/ /^/og; push @lines , join('', $_id , ' ' , $tag , $ind1 , $ind2 , ' L ', $ldr ); } elsif (index($tag,'008') == 0) { my $f008 = $data[1]; $f008 =~ s/ /^/og; push @lines , join('', $_id , ' ' , $tag , $ind1 , $ind2 , ' L ', $f008 ); } elsif (index($tag,'FMT') == 0 || index($tag,'00') == 0) { push @lines , join('', $_id , ' ' , $tag , $ind1 , $ind2 , ' L ', $data[1] ); } else { my @line = ('', $_id , ' ' , $tag , $ind1 , $ind2 , ' L '); while (@data) { my ($code,$val) = splice(@data, 0, 2); next unless $code =~ /[A-Za-z0-9]/o; next unless is_string($val); $val =~ s{[[:cntrl:]]}{}g; push @line , '$$' , $code , $val; } push @lines , join('', @line); } } $self->fh->print(join("\n",@lines) , "\n"); } sub commit { my $self = shift; $self->fh->flush; 1; } 1; �����������������������������������������������������������������������������������������������������Condition�������������������������������������������������������������������������������������������000755��000765��000024�� 0�14137142137� 23175� 5����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix�����������������������������������������������������������������������������������������������������������������������������������marc_has.pm�����������������������������������������������������������������������������������������100644��000765��000024�� 2641�14137142137� 25453� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix/Condition�������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::Condition::marc_has; use Catmandu::Sane; use Catmandu::Fix::marc_map; use Catmandu::Fix::Condition::exists; use Catmandu::Fix::set_field; use Catmandu::Fix::remove_field; use Moo; use Catmandu::Fix::Has; our $VERSION = '1.271'; with 'Catmandu::Fix::Condition'; has marc_path => (fix_arg => 1); sub emit { my ($self,$fixer,$label) = @_; my $perl; my $tmp_var = '_tmp_' . int(rand(9999)); my $marc_map = Catmandu::Fix::marc_map->new($self->marc_path , "$tmp_var.\$append"); $perl .= $marc_map->emit($fixer,$label); my $all_match = Catmandu::Fix::Condition::exists->new("$tmp_var"); my $remove_field = Catmandu::Fix::remove_field->new($tmp_var); my $pass_fixes = $self->pass_fixes; my $fail_fixes = $self->fail_fixes; $all_match->pass_fixes([ $remove_field , @$pass_fixes ]); $all_match->fail_fixes([ $remove_field , @$fail_fixes ]); $perl .= $all_match->emit($fixer,$label); $perl; } =head1 NAME Catmandu::Fix::Condition::marc_has - Test if a MARC (sub)field exists =head1 SYNOPSIS # marc_has(MARC_PATH) unless marc_has('245') add_field('error.$append','no 245 value!') end =head1 DESCRIPTION Evaluate the enclosing fixes only if the MARC (sub)field exists. =head1 METHODS =head2 marc_has(MARC_PATH) Evaluates to true when the MARC_PATH values exists, false otherwise. =head1 SEE ALSO L<Catmandu::Fix::marc_has_many> =cut 1; �����������������������������������������������������������������������������������������������marc_remove.pm��������������������������������������������������������������������������������������100644��000765��000024�� 1263�14137142137� 25464� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix/Inline����������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::Inline::marc_remove; use Catmandu::MARC; require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(marc_remove); %EXPORT_TAGS = (all => [qw(marc_remove)]); our $VERSION = '1.271'; sub marc_remove { my ($data,$marc_path) = @_; return Catmandu::MARC->instance->marc_remove($data,$marc_path); } =head1 NAME Catmandu::Fix::Inline::marc_remove - remove marc fields (DEPRECATED) =head1 SYNOPSIS use Catmandu::Fix::Inline::marc_remove qw(:all); my $data = marc_remove($data,'CAT'); =head1 DEPRECATED This module is deprecated. Use the inline functionality of L<Catmandu::Fix::marc_remove> instead. =head1 SEE ALSO L<Catmandu::Fix::marc_remove> =cut 1; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ALEPHSEQ.pm�����������������������������������������������������������������������������������������100644��000765��000024�� 6456�14137142137� 24757� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Importer/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Importer::MARC::ALEPHSEQ - Package that imports Ex Libris' Aleph sequential MARC records =head1 SYNOPSIS # From the command line $ catmandu convert MARC --type ALEPHSEQ --fix "marc_map('245a','title')" < /foo/usm01.txt # From perl use Catmandu; # import records from file my $importer = Catmandu->importer('MARC',file => '/foo/usm01.txt' , type => 'ALEPHSEQ'); my $fixer = Catmandu->fixer("marc_map('245a','title')"); $importer->each(sub { my $item = shift; ... }); # or using the fixer $fixer->fix($importer)->each(sub { my $item = shift; printf "title: %s\n" , $item->{title}; }); =head1 CONFIGURATION =over =item file Read input from a local file given by its path. Alternatively a scalar reference can be passed to read from a string. =item fh Read input from an L<IO::Handle>. If not specified, L<Catmandu::Util::io> is used to create the input stream from the C<file> argument or by using STDIN. =item encoding Binmode of the input stream C<fh>. Set to C<:utf8> by default. =item fix An ARRAY of one or more fixes or file scripts to be applied to imported items. =back =head1 METHODS Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited. =head1 SEE ALSO L<Catmandu::Importer>, L<Catmandu::Iterable> =cut package Catmandu::Importer::MARC::ALEPHSEQ; use Catmandu::Sane; use Moo; our $VERSION = '1.271'; with 'Catmandu::Importer'; sub generator { my $self = shift; sub { state $fh = $self->fh; state $prev_id; state $record = []; while(<$fh>) { chop; next unless (length $_ >= 18); my ($sysid,$s1,$tag,$ind1,$ind2,$s2,$char,$s3,$data) = unpack("A9A1A3A1A1A1A1A1U0A*",$_); unless ($tag =~ m{^[0-9A-Z]+}o) { warn "skipping $sysid $tag unknown tag"; next; } unless ($ind1 =~ m{^[A-Za-z0-9-]$}o) { $ind1 = " "; } unless ($ind2 =~ m{^[A-Za-z0-9-]$}o) { $ind2 = " "; } unless (utf8::decode($data)) { warn "skipping $sysid $tag unknown data"; next; } if ($tag eq 'LDR' || $tag eq '008') { $data =~ s/\^/ /g; } my @parts = ('_' , split(/\$\$(.)/, $data) ); # All control-fields contain an underscore field containing the data # all other fields not. unless ($tag =~ /^FMT|LDR|00.$/o) { shift @parts; shift @parts; } # If we have an empty subfield at the end, then we need to add a implicit empty value push(@parts,'') unless int(@parts) % 2 == 0; if (@$record > 0 && $tag eq 'FMT') { my $result = { _id => $prev_id , record => [ @$record ] }; $record = [[$tag, $ind1, $ind2, @parts]]; $prev_id = $sysid; return $result; } push @$record, [$tag, $ind1, $ind2, @parts]; $prev_id = $sysid; } if (@$record > 0) { my $result = { _id => $prev_id , record => [ @$record ] }; $record = []; return $result; } else { return; } }; } 1; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MicroLIF.pm�����������������������������������������������������������������������������������������100644��000765��000024�� 4072�14137142137� 25151� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Importer/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Importer::MARC::MicroLIF - Package that imports MicroLIF records =head1 SYNOPSIS # From the command line $ catmandu convert MARC --type MicroLIF --fix "marc_map('245a','title')" < /foo/data.lif # From perl use Catmandu; # import records from file my $importer = Catmandu->importer('MARC',file => '/foo/data.lif', type => 'MicroLIF'); my $fixer = Catmandu->fixer("marc_map('245a','title')"); $importer->each(sub { my $item = shift; ... }); # or using the fixer $fixer->fix($importer)->each(sub { my $item = shift; printf "title: %s\n" , $item->{title}; }); =head1 CONFIGURATION =over =item id The MARC field which contains the system id (default: 001) =item file Read input from a local file given by its path. Alternatively a scalar reference can be passed to read from a string. =item fh Read input from an L<IO::Handle>. If not specified, L<Catmandu::Util::io> is used to create the input stream from the C<file> argument or by using STDIN. =item encoding Binmode of the input stream C<fh>. Set to C<:utf8> by default. =item fix An ARRAY of one or more fixes or file scripts to be applied to imported items. =back =head1 METHODS Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited. =head1 SEE ALSO L<Catmandu::Importer>, L<Catmandu::Iterable> =cut package Catmandu::Importer::MARC::MicroLIF; use Catmandu::Sane; use Moo; use MARC::File::MicroLIF; use Catmandu::Importer::MARC::Decoder; our $VERSION = '1.271'; with 'Catmandu::Importer'; has id => (is => 'ro' , default => sub { '001' }); has decoder => ( is => 'ro', lazy => 1 , builder => sub { Catmandu::Importer::MARC::Decoder->new; } ); sub generator { my ($self) = @_; my $file = MARC::File::MicroLIF->in($self->fh); # MARC::File doesn't provide support for inline files $file = $self->decoder->fake_marc_file($self->fh,'MARC::File::MicroLIF') unless $file; sub { $self->decoder->decode($file->next(),$self->id); } } 1; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MARCMaker.pm����������������������������������������������������������������������������������������100644��000765��000024�� 5346�14137142137� 25263� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Exporter/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Exporter::MARC::MARCMaker - Exporter for MARC records to USMARC =head1 SYNOPSIS # From the command line $ catmandu convert MARC --type XML to MARC --type MARCMaker < /foo/data.mrc # From Perl use Catmandu; my $importer = Catmandu->importer('MARC', file => "/foo/bar.mrc" , type => 'XML'); my $exporter = Catmandu->exporter('MARC', file => "marc.xml", type => 'MARCMaker' ); $exporter->add($importer); $exporter->commit; =head1 CONFIGURATION =over =item file Write output to a local file given by its path or file handle. Alternatively a scalar reference can be passed to write to a string and a code reference can be used to write to a callback function. =item fh Write the output to an L<IO::Handle>. If not specified, L<Catmandu::Util::io|Catmandu::Util/IO-functions> is used to create the output handle from the C<file> argument or by using STDOUT. =item fix An ARRAY of one or more fixes or file scripts to be applied to exported items. =item encoding Binmode of the output stream C<fh>. Set to "C<:utf8>" by default. =back =head1 METHODS See L<Catmandu::Exporter>, L<Catmandu::Addable>, L<Catmandu::Fixable>, L<Catmandu::Counter>, and L<Catmandu::Logger> for a full list of methods. =head1 SEE ALSO L<Catmandu::Exporter> =cut package Catmandu::Exporter::MARC::MARCMaker; use Catmandu::Sane; use Moo; our $VERSION = '1.271'; with 'Catmandu::Exporter', 'Catmandu::Exporter::MARC::Base'; has record => (is => 'ro' , default => sub { 'record'}); has record_format => (is => 'ro' , default => sub { 'raw'} ); sub add { my ($self, $data) = @_; if ($self->record_format eq 'MARC-in-JSON') { $data = $self->_json_to_raw($data); } for my $field (@{$data->{record}}) { my ($field,$ind1,$ind2,@sf) = @$field; if (!defined($ind1) || $ind1 =~ /^\s*$/) { $ind1 = '/'} if (!defined($ind2) || $ind2 =~ /^\s*$/) { $ind2 = '/'} next unless ($field =~ /^(LDR|\d{3})/); my @sf_map = (); for (my $i = 0 ; $i < @sf ; $i += 2) { if ($field eq 'LDR' || $field < 10) { push @sf_map , $sf[$i+1] if (defined($sf[$i+1])); } else { push @sf_map , "\$" . $sf[$i] , $sf[$i+1] if (defined($sf[$i+1])); } } my $sf_str = join("",@sf_map); my $maker_field; if ($field =~ /^\d{3}$/ && $field >= 10) { $maker_field = "=$field $ind1$ind2$sf_str\n"; } else { $maker_field = "=$field $sf_str\n"; } $self->fh->print($maker_field); } $self->fh->print("\n"); } sub commit { my ($self) = @_; $self->fh->flush; 1; } 1; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MARCMaker.pm����������������������������������������������������������������������������������������100644��000765��000024�� 4102�14137142137� 25241� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Importer/MARC�������������������������������������������������������������������������������������������������������������������������=head1 NAME Catmandu::Importer::MARC::MARCMaker - Package that imports MARCMaker records =head1 SYNOPSIS # From the command line $ catmandu convert MARC --type MARCMaker --fix "marc_map('245a','title')" < /foo/data.mrk # From perl use Catmandu; # import records from file my $importer = Catmandu->importer('MARC',file => '/foo/data.mrk', type => 'MARCMaker'); my $fixer = Catmandu->fixer("marc_map('245a','title')"); $importer->each(sub { my $item = shift; ... }); # or using the fixer $fixer->fix($importer)->each(sub { my $item = shift; printf "title: %s\n" , $item->{title}; }); =head1 CONFIGURATION =over =item id The MARC field which contains the system id (default: 001) =item file Read input from a local file given by its path. Alternatively a scalar reference can be passed to read from a string. =item fh Read input from an L<IO::Handle>. If not specified, L<Catmandu::Util::io> is used to create the input stream from the C<file> argument or by using STDIN. =item encoding Binmode of the input stream C<fh>. Set to C<:utf8> by default. =item fix An ARRAY of one or more fixes or file scripts to be applied to imported items. =back =head1 METHODS Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited. =head1 SEE ALSO L<Catmandu::Importer>, L<Catmandu::Iterable> =cut package Catmandu::Importer::MARC::MARCMaker; use Catmandu::Sane; use Moo; use MARC::File::MARCMaker; use Catmandu::Importer::MARC::Decoder; our $VERSION = '1.271'; with 'Catmandu::Importer'; has id => (is => 'ro' , default => sub { '001' }); has decoder => ( is => 'ro', lazy => 1 , builder => sub { Catmandu::Importer::MARC::Decoder->new; } ); sub generator { my ($self) = @_; my $file = MARC::File::MARCMaker->in($self->fh); # MARC::File doesn't provide support for inline files $file = $self->decoder->fake_marc_file($self->fh,'MARC::File::MARCMaker') unless $file; sub { $self->decoder->decode($file->next(),$self->id); } } 1; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_match.pm���������������������������������������������������������������������������������������100644��000765��000024�� 2645�14137142137� 26000� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix/Condition�������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::Condition::marc_match; use Moo; our $VERSION = '1.271'; extends 'Catmandu::Fix::Condition::marc_all_match'; =head1 NAME Catmandu::Fix::Condition::marc_match - Test if a MARC (sub)field matches a value =head1 SYNOPSIS # marc_match(MARC_PATH,REGEX) # Match when 245 contains the value "My funny title" if marc_match('245','My funny title') add_field('my.funny.title','true') end # Match when 245a contains the value "My funny title" if marc_match('245a','My funny title') add_field('my.funny.title','true') end # Match when all 650 fields contain digits if marc_match('650','[0-9]') add_field('has_digits','true') end # Match when /one/ of the 650 fields contain digits do marc_each() if marc_all_match('650','[0-9]') add_field('has_digits','true') end end =head1 DESCRIPTION Evaluate the enclosing fixes only if the MARC (sub)field matches a regular expression. When the MARC field is a repeated fiels, then all the MARC fields should match the regular expression. DEPRECATED: This condition is the same as L<Catmandu::Fix::Condition::marc_all_match> and will be deleted in the future =head1 METHODS =head2 marc_match(MARC_PATH, REGEX) Evaluates to true when all MARC_PATH values matches the REGEX, false otherwise. =head1 SEE ALSO L<Catmandu::Fix::Condition::marc_all_match>, L<Catmandu::Fix::Condition::marc_any_match>, =cut 1; �������������������������������������������������������������������������������������������marc_has_many.t�������������������������������������������������������������������������������������100644��000765��000024�� 4451�14137142137� 26024� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix/Condition���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::Condition::marc_has_many'; use_ok $pkg; } require_ok $pkg; my $mrc = <<'MRC'; <?xml version="1.0" encoding="UTF-8"?> <marc:collection xmlns:marc="http://www.loc.gov/MARC21/slim"> <marc:record> <marc:controlfield tag="001"> 92005291 </marc:controlfield> <marc:datafield ind1="1" ind2="0" tag="245"> <marc:subfield code="a">Title / </marc:subfield> <marc:subfield code="c">Name</marc:subfield> </marc:datafield> <marc:datafield ind1=" " ind2=" " tag="998"> <marc:subfield code="a">X</marc:subfield> <marc:subfield code="a">Y</marc:subfield> <marc:subfield code="b">Z</marc:subfield> </marc:datafield> <marc:datafield ind1=" " ind2=" " tag="999"> <marc:subfield code="a">X</marc:subfield> <marc:subfield code="a">Y</marc:subfield> </marc:datafield> <marc:datafield ind1=" " ind2=" " tag="999"> <marc:subfield code="a">Z</marc:subfield> </marc:datafield> </marc:record> </marc:collection> MRC note 'marc_has_many(001)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'if marc_has_many(001) add_field(test,failed) end' ); my $record = $importer->first; ok ! $record->{test} , 'ok no match'; } note 'marc_has_many(999)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'if marc_has_many(999) add_field(test,ok) end' ); my $record = $importer->first; is $record->{test} , "ok" , 'ok match'; } note 'marc_has_many(998a)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'if marc_has_many(998a) add_field(test,ok) end' ); my $record = $importer->first; is $record->{test} , "ok" , 'ok match'; } note 'marc_has_many(998b)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'if marc_has_many(998b) add_field(test,failed) end' ); my $record = $importer->first; ok ! $record->{test} , 'ok no match'; } done_testing; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_spec_has.t�������������������������������������������������������������������������������������100644��000765��000024�� 1211�14137142137� 26001� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix/Condition���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use Catmandu::Fix; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::Condition::marc_spec_has'; use_ok $pkg; } require_ok $pkg; my $fixes = <<EOF; if marc_spec_has('LDR{/6=\\a}{/7=\\a|/7=\\c|/7=\\d|/7=\\m}') add_field(type,'Book') end if marc_spec_has('LDR{/6=\\a}{/7=\\b}') set_field(type,'Other') end EOF my $fixer = Catmandu::Fix->new(fixes => [$fixes]); my $importer = Catmandu::Importer::MARC->new( file => 't/camel9.mrc' ); my $records = $fixer->fix($importer)->to_array; is $records->[0]->{type}, 'Book'; done_testing; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_all_match.t������������������������������������������������������������������������������������100644��000765��000024�� 3043�14137142137� 26145� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix/Condition���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::Condition::marc_all_match'; use_ok $pkg; } require_ok $pkg; my $mrc = <<'MRC'; <?xml version="1.0" encoding="UTF-8"?> <marc:collection xmlns:marc="http://www.loc.gov/MARC21/slim"> <marc:record> <marc:controlfield tag="001"> 92005291 </marc:controlfield> <marc:datafield ind1="1" ind2="0" tag="245"> <marc:subfield code="a">Title / </marc:subfield> <marc:subfield code="c">Name</marc:subfield> </marc:datafield> <marc:datafield ind1=" " ind2=" " tag="999"> <marc:subfield code="a">X</marc:subfield> <marc:subfield code="a">Y</marc:subfield> </marc:datafield> <marc:datafield ind1=" " ind2=" " tag="999"> <marc:subfield code="a">Z</marc:subfield> </marc:datafield> </marc:record> </marc:collection> MRC note 'marc_all_match(999,X)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'if marc_all_match(999,X) add_field(test,failed) end' ); my $record = $importer->first; ok ! $record->{test} , 'ok matched nothing' } note 'marc_all_match(999,[XYZ])'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'if marc_all_match(999,[XYZ]) add_field(test,ok) end' ); my $record = $importer->first; is $record->{test} , 'ok' , 'ok matched everything' } done_testing; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_any_match.t������������������������������������������������������������������������������������100644��000765��000024�� 3517�14137142137� 26172� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix/Condition���������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::Condition::marc_any_match'; use_ok $pkg; } require_ok $pkg; my $mrc = <<'MRC'; <?xml version="1.0" encoding="UTF-8"?> <marc:collection xmlns:marc="http://www.loc.gov/MARC21/slim"> <marc:record> <marc:controlfield tag="001"> 92005291 </marc:controlfield> <marc:datafield ind1="1" ind2="0" tag="245"> <marc:subfield code="a">Title / </marc:subfield> <marc:subfield code="c">Name</marc:subfield> </marc:datafield> <marc:datafield ind1=" " ind2=" " tag="999"> <marc:subfield code="a">X</marc:subfield> <marc:subfield code="a">Y</marc:subfield> </marc:datafield> <marc:datafield ind1=" " ind2=" " tag="999"> <marc:subfield code="a">Z</marc:subfield> </marc:datafield> </marc:record> </marc:collection> MRC note 'marc_any_match(999,A)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'if marc_any_match(999,A) add_field(test,failed) end' ); my $record = $importer->first; ok ! $record->{test} , 'ok matched nothing'; } note 'marc_any_match(999,X)'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'if marc_any_match(999,X) add_field(test,ok) end' ); my $record = $importer->first; is $record->{test} , 'ok' , 'ok matched something' } note 'marc_any_match(999,[XYZ])'; { my $importer = Catmandu->importer( 'MARC', file => \$mrc, type => 'XML', fix => 'if marc_any_match(999,[XYZ]) add_field(test,ok) end' ); my $record = $importer->first; is $record->{test} , 'ok' , 'ok matched something' } done_testing; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_has_many.pm������������������������������������������������������������������������������������100644��000765��000024�� 3321�14137142137� 26473� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix/Condition�������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::Condition::marc_has_many; use Catmandu::Sane; use Catmandu::Fix::marc_map; use Catmandu::Fix::Condition::exists; use Catmandu::Fix::set_field; use Catmandu::Fix::remove_field; use Moo; use Catmandu::Fix::Has; our $VERSION = '1.271'; with 'Catmandu::Fix::Condition'; has marc_path => (fix_arg => 1); sub emit { my ($self,$fixer,$label) = @_; my $perl; my $tmp_var = '_tmp_' . int(rand(9999)); my $marc_map = Catmandu::Fix::marc_map->new( $self->marc_path , "$tmp_var" , -split=>1 , -nested_arrays=>1 ); $perl .= $marc_map->emit($fixer,$label); my $all_match = $self->marc_path =~ m{^...(\/[0-9]+-[0-9]+)?$} ? Catmandu::Fix::Condition::exists->new("$tmp_var.1") : Catmandu::Fix::Condition::exists->new("$tmp_var.0.1"); my $remove_field = Catmandu::Fix::remove_field->new($tmp_var); my $pass_fixes = $self->pass_fixes; my $fail_fixes = $self->fail_fixes; $all_match->pass_fixes([ @$pass_fixes ]); $all_match->fail_fixes([ @$fail_fixes ]); $perl .= $all_match->emit($fixer,$label); $perl; } =head1 NAME Catmandu::Fix::Condition::marc_has_many - Test if a MARC has more than one (sub)field =head1 SYNOPSIS # marc_has_many(MARC_PATH) if marc_has_many('245') add_field('error.$append','more than one 245!') end =head1 DESCRIPTION Evaluate the enclosing fixes only if the MARC has more than one (sub)field. =head1 METHODS =head2 marc_has_many(MARC_PATH) Evaluates to true when the MARC has more than one (sub)field, false otherwise. =head1 SEE ALSO L<Catmandu::Fix::marc_has> =cut 1; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_spec_has.pm������������������������������������������������������������������������������������100644��000765��000024�� 3462�14137142137� 26467� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix/Condition�������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::Condition::marc_spec_has; use Catmandu::Sane; use Catmandu::Fix::marc_spec; use Catmandu::Fix::Condition::exists; use Catmandu::Fix::set_field; use Catmandu::Fix::remove_field; use Moo; use Catmandu::Fix::Has; our $VERSION = '1.12'; with 'Catmandu::Fix::Condition'; has marc_spec => (fix_arg => 1); sub emit { my ($self,$fixer,$label) = @_; my $perl; my $tmp_var = '_tmp_' . int(rand(9999)); my $marc_spec = Catmandu::Fix::marc_spec->new($self->marc_spec , "$tmp_var.\$append"); $perl .= $marc_spec->emit($fixer,$label); my $all_match = Catmandu::Fix::Condition::exists->new("$tmp_var"); my $remove_field = Catmandu::Fix::remove_field->new($tmp_var); my $pass_fixes = $self->pass_fixes; my $fail_fixes = $self->fail_fixes; $all_match->pass_fixes([ $remove_field , @$pass_fixes ]); $all_match->fail_fixes([ $remove_field , @$fail_fixes ]); $perl .= $all_match->emit($fixer,$label); $perl; } =head1 NAME Catmandu::Fix::Condition::marc_spec_has - Test if a MARCspec references data =head1 SYNOPSIS # marc_spec_has(MARCspec) unless marc_spec_has('LDR{/6=\a}{/7=\a|/7=\c|/7=\d|/7=\m}') set_field('type','Book') end =head1 DESCRIPTION Evaluate the enclosing fixes only if the MARCspec does reference data. Does the same like L<marc_has|Catmandu::Fix::Condition::marc_has> but uses MARCspec - A common MARC record path language. See L<MARCspec - A common MARC record path language|http://marcspec.github.io/MARCspec/> for documentation on the path syntax. =head1 METHODS =head2 marc_spec_has(MARCspec) Evaluates to true when the MARCspec references data, false otherwise. =head1 SEE ALSO =over =item * L<Catmandu::Fix::marc_has> =item * L<Catmandu::Fix::marc_match> =item * L<Catmandu::Fix::marc_has_many> =back =cut 1; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_all_match.pm�����������������������������������������������������������������������������������100644��000765��000024�� 3761�14137142137� 26630� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix/Condition�������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::Condition::marc_all_match; use Catmandu::Sane; use Catmandu::Fix::marc_map; use Catmandu::Fix::Condition::all_match; use Catmandu::Fix::set_field; use Catmandu::Fix::remove_field; use Moo; use Catmandu::Fix::Has; our $VERSION = '1.271'; with 'Catmandu::Fix::Condition'; has marc_path => (fix_arg => 1); has value => (fix_arg => 1); sub emit { my ($self,$fixer,$label) = @_; my $perl; my $tmp_var = '_tmp_' . int(rand(9999)); my $marc_map = Catmandu::Fix::marc_map->new($self->marc_path , "$tmp_var.\$append"); $perl .= $marc_map->emit($fixer,$label); my $all_match = Catmandu::Fix::Condition::all_match->new("$tmp_var.*",$self->value); my $remove_field = Catmandu::Fix::remove_field->new($tmp_var); my $pass_fixes = $self->pass_fixes; my $fail_fixes = $self->fail_fixes; $all_match->pass_fixes([ $remove_field , @$pass_fixes ]); $all_match->fail_fixes([ $remove_field , @$fail_fixes ]); $perl .= $all_match->emit($fixer,$label); $perl; } =head1 NAME Catmandu::Fix::Condition::marc_all_match - Test if a MARC (sub)field matches a value =head1 SYNOPSIS # marc_all_match(MARC_PATH,REGEX) # Match when 245 contains the value "My funny title" if marc_all_match('245','My funny title') add_field('my.funny.title','true') end # Match when 245a contains the value "My funny title" if marc_all_match('245a','My funny title') add_field('my.funny.title','true') end # Match when all 650 fields contain digits if marc_all_match('650','[0-9]') add_field('has_digits','true') end =head1 DESCRIPTION Evaluate the enclosing fixes only if the MARC (sub)field matches a regular expression. When the MARC field is a repeated fiels, then all the MARC fields should match the regular expression. =head1 METHODS =head2 marc_all_match(MARC_PATH, REGEX) Evaluates to true when all MARC_PATH values matches the REGEX, false otherwise. =head1 SEE ALSO L<Catmandu::Fix::Condition::marc_any_match> =cut 1; ���������������marc_any_match.pm�����������������������������������������������������������������������������������100644��000765��000024�� 4010�14137142137� 26633� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix/Condition�������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::Condition::marc_any_match; use Catmandu::Sane; use Catmandu::Fix::marc_map; use Catmandu::Fix::Condition::any_match; use Catmandu::Fix::set_field; use Catmandu::Fix::remove_field; use Moo; use Catmandu::Fix::Has; our $VERSION = '1.271'; with 'Catmandu::Fix::Condition'; has marc_path => (fix_arg => 1); has value => (fix_arg => 1); sub emit { my ($self,$fixer,$label) = @_; my $perl; my $tmp_var = '_tmp_' . int(rand(9999)); my $marc_map = Catmandu::Fix::marc_map->new($self->marc_path , "$tmp_var.\$append"); $perl .= $marc_map->emit($fixer,$label); my $any_match = Catmandu::Fix::Condition::any_match->new("$tmp_var.*",$self->value); my $remove_field = Catmandu::Fix::remove_field->new($tmp_var); my $pass_fixes = $self->pass_fixes; my $fail_fixes = $self->fail_fixes; $any_match->pass_fixes([ $remove_field , @$pass_fixes ]); $any_match->fail_fixes([ $remove_field , @$fail_fixes ]); $perl .= $any_match->emit($fixer,$label); $perl; } =head1 NAME Catmandu::Fix::Condition::marc_any_match - Test if a MARC (sub)field matches a value =head1 SYNOPSIS # marc_any_match(MARC_PATH,REGEX) # Match when 245 contains the value "My funny title" if marc_any_match('245','My funny title') add_field('my.funny.title','true') end # Match when 245a contains the value "My funny title" if marc_any_match('245a','My funny title') add_field('my.funny.title','true') end # Match when at least one 650 field contains digits if marc_any_match('650','[0-9]') add_field('has_digits','true') end =head1 DESCRIPTION Evaluate the enclosing fixes only if the MARC (sub)field matches a regular expression. When the MARC field is a repeated fiels, then at least one MARC fields should match the regular expression. =head1 METHODS =head2 marc_any_match(MARC_PATH, REGEX) Evaluates to true when at least one MARC_PATH values matches the REGEX, false otherwise. =head1 SEE ALSO L<Catmandu::Fix::Condition::marc_all_match> =cut 1; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_decode_dollar_subfields.t����������������������������������������������������������������������100644��000765��000024�� 1300�14137142137� 27105� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/t/Catmandu/Fix�������������������������������������������������������������������������������������������������������������������������������������#!perl use strict; use warnings; use Test::More; use Test::Exception; use Catmandu::Importer::MARC; use Catmandu::Fix; use utf8; my $pkg; BEGIN { $pkg = 'Catmandu::Fix::marc_decode_dollar_subfields'; use_ok $pkg; } require_ok $pkg; my $fixer = Catmandu::Fix->new(fixes => [ q|marc_decode_dollar_subfields()|, q|marc_map('200e','test')| ]); # t/dollar_subfields.mrc a special prepared marc file containing $subfields als values my $importer = Catmandu::Importer::MARC->new( file => 't/dollar_subfields.mrc', type => "RAW" ); my $record = $fixer->fix($importer->first); like $record->{test}, qr/: Ermoupolis, Syros Island, Greece/, q|fix: marc_decode_dollar_subfields()|; done_testing; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������marc_decode_dollar_subfields.pm���������������������������������������������������������������������100644��000765��000024�� 2342�14137142137� 27570� 0����������������������������������������������������������������������������������������������������ustar�00patrickhochstenbach�������������staff���������������������������000000��000000��Catmandu-MARC-1.271/lib/Catmandu/Fix�����������������������������������������������������������������������������������������������������������������������������������package Catmandu::Fix::marc_decode_dollar_subfields; use Catmandu::Sane; use Catmandu::MARC; use Moo; use Catmandu::Fix::Has; with 'Catmandu::Fix::Inlineable'; our $VERSION = '1.271'; sub fix { my ($self,$data) = @_; return Catmandu::MARC->instance->marc_decode_dollar_subfields($data); } =head1 NAME Catmandu::Fix::marc_decode_dollar_subfields - decode double encoded dollar subfields =head1 SYNOPSIS marc_decode_dollar_subfields() =head1 DESCRIPTION In some environments MARC subfields can contain data values that can be interpreted as subfields itself. E.g. when the 245-$a subfield contains the data: My Title $h subsubfield then the $h = subsubfield will not be accessible with normal MARC processing tools. Use the 'marc_decode_dollar_subfields()' fix to re-evaluate all the MARC subfields for these hidden data. =head1 METHODS =head2 marc_decode_dollar_subfields() Decode double encoded dollar subfields into real MARC subfields. =head1 INLINE This Fix can be used inline in a Perl script: use Catmandu::Fix::marc_decode_dollar_subfields as => 'marc_decode_dollar_subfields'; my $data = { record => [...] }; $data = marc_decode_dollar_subfields($data); =head1 SEE ALSO L<Catmandu::Fix> =cut 1; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������