
![]() | Dieses Modul wird auf vielen Seiten benutzt, und Änderungen werden projektweit sofort wahrgenommen. Bitte teste Änderungen vorher im /Sandkasten oder in deinem Benutzernamensraum. Die getestete Änderung sollte dann in einem einzigen Edit auf dieser Seite eingefügt werden. Bitte diskutiere Änderungen zuerst auf der Diskussionsseite bevor du sie implementierst. |
![]() | Dieses Modul ist getestet und für den projektweiten Gebrauch geeignet. Es kann in Vorlagen benutzt und auf Hilfeseiten erläutert werden. Entwicklungen an dem Modul sollten auf Citation/Test und die Anwendung auf der Spielwiese getestet werden, da wiederholte Trial-and-Error-Edits die Resourcen stark belasten können. |
Verwendung
Das Modul stellt Funktionen für die Bearbeitung von COinS-Daten, einem Literatur-Mikroformat, für das Modul:Citation zur Verfügung.
Versionsbezeichnung auf Wikidata: 2022-10-21
Funktionen
function cc.prepareForCOinS( args )
überprüft Parameter vor der Ausgabe in das COinS-span
-Tag.
- Vorgabe
args
Indizierte Tabelle mit den Literaturdaten.
function cc.makeCOinS( args, params )
liefert das COinS-span
-Tag mit den Literaturinformationen als Zeichenkette.
- Vorgabe
args
Indizierte Tabelle mit den Literaturdaten.params
Indizierte Tabelle mit den Parameterdefinitionen.
Verwendung in anderen Modulen
Dieses Modul ist notwendig für die Ausführung folgender Module. Bei Anpassungen sollte die Funktionstüchtigkeit der folgenden Module geprüft werden. Benutze dazu auch diese Tracking-Kategorie um Fehler zu finden, die sich dann auf Artikel auswirken:
- Citation
- Modul benötigt das Modul Citation/COinS – Wartungskategorie, in der nochmals alle Module gelistet sind, die von diesem Modul abhängig sind.
Literatur
- ANSI/NISO Z39.88-2004 (R2010) : The OpenURL Framework for Context-Sensitive Services. In: NISO.org, Donnerstag, 13. Mai 2010, PDF.
Hinweise
- Die obige Dokumentation wurde aus der Seite Modul:Citation/COinS/Doku eingefügt. (bearbeiten | Versionsgeschichte) Die Kategorien für dieses Modul sollten in der Dokumentation eingetragen werden. Die Interwiki-Links sollten auf Wikidata eingepflegt werden.
- Liste der Unterseiten
-- documentation local citationCOinS = { suite = 'Citation', sub = 'COinS', serial = '2022-10-21' } -- module variable and administration local cc = { moduleInterface = citationCOinS } -- module import -- require( 'strict' ) local ci = require( 'Module:Citation/i18n' ) local cu = require( 'Module:Citation/utilities' ) function cc.prepareForCOinS( args ) local function pagesMatch( s ) if not cu.isSet( s ) then return '' end s = s:match( '%a*%d+%s*%-%s*%a*%d+' ) or s:match( '%a*%d+' ) or -- Roman numerals s:match( '[Cc]*[LlXxVvIi]+%s*%-%s*[Cc]*[LlXxVvIi]+' ) or s:match( '[Cc]*[LlXxVvIi]+' ) or '' s = s:gsub( ' ', '' ) if s ~= '' and not s:match( '%d+' ) then -- Roman numerals local tab = mw.text.split( s, '-', true ) for key, value in ipairs( tab ) do if value == '' or not value:match( '^[Cc]*[Xx]?[Ll]?[Xx]*[Ii]?[Vv]?[Ii]*$' ) then s = '' break end end end if s == '' then cu.addErrorMsg( ci.texts.wrongPages ) end return s end for key, value in pairs( args ) do if ci.params[ key ] then args[ key ] = cu.coinsCleanup( args[ key ] ) end end args.pages = pagesMatch( args.pages ) args.columns = pagesMatch( args.columns ) if cu.isSet( args.columns ) and not cu.isSet( args.pages ) then args.pages = args.columns end args.extent = args.extent:match( '%d+' ) -- only first author args.author = cu.getFirst( args.author or '', ';' ) local s, count s, count = args.author:gsub( ',', ',' ) if count > 1 then args.author = cu.getFirst( args.author, ',' ) end for key, value in ipairs( { 'author', 'editor' } ) do args[ value ] = mw.ustring.gsub( args[ value ], '[%[%]!#$%%%*%+%?]', '' ) end args.isbn = cu.getFirst( args.isbn or '', ',' ) args.isbn = args.isbn:match( '[%d%-Xx]+' ) end function cc.makeCOinS( args ) local rft = {} local function insertCOinS( key, value ) if cu.isSet( value ) then table.insert( rft, key .. '=' .. mw.uri.encode( '' .. value, 'PATH' ) ) end end -- make COinS (ContextObjects in Spans, OpenURL) format -- https://groups.niso.org/apps/group_public/download.php/14833/z39_88_2004_r2010.pdf -- https://www.oclc.org/developer/develop/web-services/worldcat-knowledge-base-api/openurl-resource.en.html -- handle titles -- maps handled like books if args.type == 'book' or args.type == 'map' or args.type == 'bookitem' then table.insert( rft, 'rft_val_fmt=' .. mw.uri.encode( 'info:ofi/fmt:kev:mtx:book', 'PATH' ) ) if args.type == 'bookitem' then table.insert( rft, 'rft.genre=bookitem' ) insertCOinS( 'rft.atitle', args.title ) insertCOinS( 'rft.btitle', args.collection ) else table.insert( rft, 'rft.genre=book' ) insertCOinS( 'rft.btitle', args.title ) end -- newspaper is now handled like a journal to improve data import elseif args.type == 'journal' or args.type == 'newspaper' then table.insert( rft, 'rft_val_fmt=' .. mw.uri.encode( 'info:ofi/fmt:kev:mtx:journal', 'PATH' ) ) table.insert( rft, 'rft.genre=article' ) insertCOinS( 'rft.atitle', args.title ) insertCOinS( 'rft.jtitle', args.type == 'journal' and args.journal or args.newspaper ) -- handle web -- DCMI: Dublin Core™ Metadata -- https://www.dublincore.org/specifications/dublin-core/dces/ else table.insert( rft, 'rft_val_fmt=' .. mw.uri.encode( 'info:ofi/fmt:kev:mtx:dc', 'PATH' ) ) insertCOinS( 'rft.type', 'webpage' ) insertCOinS( 'rft.title', args.title ) insertCOinS( 'rft.source', args.website ) insertCOinS( 'rft.identifier', args.url ) insertCOinS( 'rft.description', args.comment ) insertCOinS( 'rft.format', args.format ) end if #rft > 2 then local prefix local rftUrl = ( cu.isSet( args.url ) and not args.url:find( 'doi.org/', 1, true ) ) and args.url or '' for key, value in pairs( ci.params ) do if cu.isSet( args[ key ] ) and value.COinS then if key == 'date' and args.dateFormat == 'R' then insertCOinS( value.COinS, string.sub( args[ key ], 1, 4 ) ) elseif value.COinS ~= 'rft.jtitle' and value.COinS ~= 'rft.title' then prefix = value.COinS:sub( 1, 3 ) if prefix == 'rft' then insertCOinS( value.COinS, args[ key ] ) elseif prefix == 'inf' then table.insert( rft, 'rft_id=' .. mw.uri.encode( value.COinS .. '/' .. args[ key ], 'PATH' ) ) elseif prefix == 'url' and rftUrl == '' then rftUrl = value.url:format( args[ key ] ) elseif prefix == 'jst' then if not cu.isSet( args.doi ) then table.insert( rft, 'rft_id=' .. mw.uri.encode( 'info:doi/' .. value.doi:format( args[ key ] ), 'PATH' ) ) end if rftUrl == '' then rftUrl = value.url:format( args[ key ] ) end end end end end if rftUrl ~= '' then if rftUrl:match( '^//' ) then rftUrl = 'https:' .. rftUrl end table.insert( rft, 'rft_id=' .. mw.uri.encode( rftUrl, 'PATH' ) ) end table.insert( rft, 1, 'rfr_id=' .. mw.uri.encode( 'info/sid:/' .. ci.project.name, 'PATH' ) ) table.insert( rft, 1, 'ctx_ver=Z39.88-2004' ) return tostring( mw.html.create( 'span' ) :addClass( 'Z3988' ) :attr( 'title', table.concat( rft, '&' ) ) ) end return '' end return cc