Dokumentation für das Modul Citation/COinS[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]

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 Ok!

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:

Literatur

  • ANSI/NISO Z39.88-2004 (R2010) : The OpenURL Framework for Context-Sensitive Services. In: NISO.org, Donnerstag, 13. Mai 2010, PDF.
Hinweise
-- 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