Starting with Polaris 8.1, customers can now add Custom TOMs to Polaris, using a new MARC Expression Language (MEL). We’ve been testing the new TOMs, so I wanted to share what we’ve implemented so far in the hopes that this gives others a helpful starting point.
These examples are based on our cataloging practices and might need to be adjusted depending on your local systems.
Please update the post or reply with your own examples, improvements, or other approaches.
Playaway
Based on OLAC Best Practices
LDR/06 = i (Nonmusical sound recording)
006/00 = m (Computer file)
006/06 = q (Direct electronic)
006/09 = h (Sound)AND DOES NOT CONTAIN:
006/00 = a (Language Material)
MEL:
(LDR/06 = 'i' and (ANY 006 WHERE (_ matches /^m.{5}q.{2}h/i)) and not (006/00 = 'a'))
SQL (to check bibs that match)
SELECT DISTINCT BR.BibliographicRecordID
FROM Polaris.BibliographicRecords BR
WHERE BR.RecordStatusID = 1
AND BR.MARCBibType = 'i'
AND EXISTS (
SELECT 1
FROM Polaris.BibliographicTags BT006
JOIN Polaris.BibliographicSubfields BS006
ON BT006.BibliographicTagID = BS006.BibliographicTagID
WHERE BT006.BibliographicRecordID = BR.BibliographicRecordID
AND BT006.TagNumber = 6
AND LEFT(BS006.Data,10) LIKE 'm_____q__h'
)
AND NOT EXISTS (
SELECT 1
FROM Polaris.BibliographicTags BT006
JOIN Polaris.BibliographicSubfields BS006
ON BT006.BibliographicTagID = BS006.BibliographicTagID
WHERE BT006.BibliographicRecordID = BR.BibliographicRecordID
AND BT006.TagNumber = 6
AND LEFT(BS006.Data,1) = 'a'
)
Read Along Book
Examples: VoxBook / WonderBook.
Based on OLAC Best Practices)
(Two 006s Needed)
LDR/06 = i (Nonmusical sound recording)
006/00 = m (Computer file)
006/06 = q (Direct electronic)
006/09 = h (Sound)006/00 = a (Language Material)
MEL:
(LDR/06 = 'i' and (ANY 006 WHERE (_ matches /^m.{5}q.{2}h/i)) and (006/00 = 'a'))
SQL (to check bibs that match)
SELECT DISTINCT BR.BibliographicRecordID
FROM Polaris.BibliographicRecords BR
WHERE BR.RecordStatusID = 1
AND BR.MARCBibType = 'i'
AND EXISTS (
SELECT 1
FROM Polaris.BibliographicTags BT006
JOIN Polaris.BibliographicSubfields BS006
ON BT006.BibliographicTagID = BS006.BibliographicTagID
WHERE BT006.BibliographicRecordID = BR.BibliographicRecordID
AND BT006.TagNumber = 6
AND LEFT(BS006.Data,10) LIKE 'm_____q__h'
)
AND EXISTS (
SELECT 1
FROM Polaris.BibliographicTags BT006
JOIN Polaris.BibliographicSubfields BS006
ON BT006.BibliographicTagID = BS006.BibliographicTagID
WHERE BT006.BibliographicRecordID = BR.BibliographicRecordID
AND BT006.TagNumber = 6
AND LEFT(BS006.Data,1) = 'a'
)
Board Book
340$l board book binding
MEL:
340$l matches /board( |-)book|boardbook binding/i
SQL (to check bibs that match):
SELECT DISTINCT BR.BibliographicRecordID
FROM Polaris.BibliographicRecords BR
JOIN Polaris.BibliographicTags BT340
ON BR.BibliographicRecordID = BT340.BibliographicRecordID
AND BT340.TagNumber = 340
JOIN Polaris.BibliographicSubfields BS340
ON BT340.BibliographicTagID = BS340.BibliographicTagID
AND BS340.Subfield = 'l'
WHERE BR.RecordStatusID = 1
AND BS340.Data LIKE 'Board%Book%Binding'
Playaway Launchpad
LDR/06 - m (computer file)
007/00 - c (electronic resource)
007/01 - s (standalone device)
007/03 - c (multicolored)
MEL:
LDR/06 = 'm' and 007/00 = 'c' and 007/01 = 's' and 007/03 = 'c'
SQL (to check bibs that match)
SELECT DISTINCT BR.BibliographicRecordID
FROM Polaris.BibliographicRecords BR
WHERE BR.RecordStatusID = 1
AND BR.MARCBibType = 'm'
AND EXISTS (
SELECT 1
FROM Polaris.BibliographicTags BT007a
JOIN Polaris.BibliographicSubfields BS007a
ON BT007a.BibliographicTagID = BS007a.BibliographicTagID
WHERE BT007a.BibliographicRecordID = BR.BibliographicRecordID
AND BT007a.TagNumber = 7
AND SUBSTRING(BS007a.Data,1,1) = 'c'
AND SUBSTRING(BS007a.Data,2,1) = 's'
AND SUBSTRING(BS007a.Data,4,1) = 'c'
)
WhaZoodle
Pre-loaded media player, like a playaway for kids.
LDR/06 - m (Computer file)
007/00 - c (Electronic resource)
007/01 - z (Other)
007/00 - s (Sound recording)
007/01 - z (Other)
008/23 - q (Direct electronic)
008/26 - h (Sound)
MEL:
LDR/06 = 'm' and ANY 007 WHERE (_ matches /^cz/i) and ANY 007 WHERE (_ matches /^sz/i) and 008/23 = 'q' and 008/26 = 'h'
SQL (to check bibs that match)
SELECT DISTINCT BR.BibliographicRecordID
FROM Polaris.BibliographicRecords BR
JOIN Polaris.BibliographicTags BT008
ON BR.BibliographicRecordID = BT008.BibliographicRecordID
AND BT008.TagNumber = 008
JOIN Polaris.BibliographicSubfields BS008
ON BT008.BibliographicTagID = BS008.BibliographicTagID
WHERE BR.RecordStatusID = 1
AND BR.MARCBibType = 'm'
AND EXISTS (
SELECT 1
FROM Polaris.BibliographicTags BT007a
JOIN Polaris.BibliographicSubfields BS007a
ON BT007a.BibliographicTagID = BS007a.BibliographicTagID
WHERE BT007a.BibliographicRecordID = BR.BibliographicRecordID
AND BT007a.TagNumber = 007
AND LEFT(BS007a.Data,2) = 'cz'
)
AND EXISTS (
SELECT 1
FROM Polaris.BibliographicTags BT007b
JOIN Polaris.BibliographicSubfields BS007b
ON BT007b.BibliographicTagID = BS007b.BibliographicTagID
WHERE BT007b.BibliographicRecordID = BR.BibliographicRecordID
AND BT007b.TagNumber = 007
AND LEFT(BS007b.Data,2) = 'sz'
)
AND SUBSTRING(BS008.Data,24,1) = 'q'
AND SUBSTRING(BS008.Data,27,1) = 'h'
Book (modified)
Added “not 006/00 = m” to existing Book TOM to remove electronic items.
((LDR/06 in ['a','t'] and not (LDR/07 in ['b','i','s'])) or (006/00 in ['a','t']) or (007/00 = 't')) and not (006/00 in ['m'])