Naar inhoud springen

Module:Infobox station

Uit Wikipedia, de vrije encyclopedie
Moduledocumentatie​[bekijk] [bewerk] [ververs] [geschiedenis]

Afbeelding

[brontekst bewerken]

Onderschrift

[brontekst bewerken]

Plaatsing en uitlijning in de tabel

[brontekst bewerken]

Plaats (bestuurlijke eenheid

[brontekst bewerken]

Stationscode

[brontekst bewerken]

(enkel item) Voor deze infobox de Franse stationscode, P8181

Stationscode UIC

[brontekst bewerken]

(enkel item) UIC stationscode, P722

Voorbeeld waarde, geen id

Sluitingsdatum

[brontekst bewerken]

(NB dit voorbeeld stript maand en dag, moet opgeruimd worden)

Voorbeeld datum

Perronsporen

[brontekst bewerken]

Voorbeeld getal (amount)

Spoorlijnen

[brontekst bewerken]

(voorbeeld van mogelijk meerdere items)

Aansluitende diensten

[brontekst bewerken]

Exploitant

[brontekst bewerken]

Commonscategorie

[brontekst bewerken]

Coordinaten en kaart

[brontekst bewerken]

Werkt op basis van sjabloon:mapframe

local p = {}

--Function ter verificatie of een waarde leeg is (geen of lege string)
function is_empty(ie_val)
	if(ie_val) then --if not nul, check for empty string
		if(string.len(ie_val)>0 and ie_val~="-") then return false; --lengte van de waarde is niet nul en de waarde is geen streepje, derhalve niet leeg
		elseif(ie_val=="-") then return true; --streepje, betekent leeg
		else return true; end --lege string, betekent leeg
	else return true; end --indien geen, betekent dat dat de waarde leeg is
end

--Function om een Wikidata item id te verkrijgen en daarmee een link naar het desbetreffende lemma te verkrijgen, of als er geen lemma voor deze tekst bestaat het wikidata label als tekst weer te geven
function title_for(item_id)
	tf_item = mw.wikibase.getEntity(item_id);
	if(tf_item.sitelinks and tf_item.sitelinks.nlwiki) then --er bestaat een sitelink naar nlwiki
		page = tf_item.sitelinks.nlwiki.title;
		return "[["..page.."|"..mw.text.split(page, " %(")[1].."]]";
	elseif(tf_item.labels.nl) then return tf_item.labels.nl.value; --er bestaat op wikidata een label in het Nederlands
	else return ""; end --als geen van beide bestaat, geef een lege string
end

--Function om een potloodje te plaatsen achter een Wikidatawaarde. Die verwijst de lezer naar de juiste Wikidataproperty om deze waarde aan te passen.
function editsymbol(pnr)
	result = '<span style="float:right">[[File:OOjs UI icon edit-ltr-progressive.svg' ..
	'|frameless|text-top|10px|Bewerken op Wikidata|link=https://www.wikidata.org/wiki/' ..
	mw.wikibase.getEntityIdForCurrentPage() .. '?uselang=nl#' .. pnr .. ']]</span>'
	return result
end

function appendtable(arg, pnr, outputname, groep, usetitlefor)
  if (0==1) then  
    -- niet werkende zoekfunctie uitgeschakeld
	if (is_empty(args[arg]) and item and item.claims[pnr]) then
		if usetitlefor then
           args[arg] = title_for(item:getBestStatements(pnr)[1].mainsnak.datavalue.value.id); 
       	else
           args[arg] = item:getBestStatements(pnr)[1].mainsnak.datavalue.value;
        end
        args[arg] = args[arg] .. editsymbol(pnr)
    end
  end

    opgezocht = false;
    if (is_empty(args[arg]) and item and item.claims[pnr] and usetitlefor) then
       for j = 1, #item.claims[pnr] do 
          args[arg] = title_for(item.claims[pnr][j].mainsnak.datavalue.value.id); opgezocht=true;
       end
    end

    if (is_empty(args[arg]) and item and item.claims[pnr]) then
        if (#item.claims[pnr]>0) then args[arg]='{{#property:'..pnr..'}}';end --vangnet
		      
    end
   
    if not (args[arg]) then args[arg]='';end
	if (not is_empty(args[arg])) then
        if groepen[groep]~='-' then
            table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."'''"..groepen[groep].."'''"); --insert sectionheader into the result
            groepen[groep]='-';
        end 
        if pnr=='P2044' then
           if landcode=='AT' then args[arg] = args[arg]..' [[Meter über Adria|m.ü.A.]]'; end
           if landcode=='CH' then args[arg] = args[arg]..' [[Meter über Meer|m.ü.M.]]'; end
           if landcode=='DK' then args[arg] = args[arg]..' moh.'; end
           if landcode=='NL' then args[arg] = args[arg]..' [[Normaal Amsterdams Peil|NAP]]'; end
        end
        if (opgezocht) then args[arg]= args[arg] .. editsymbol(pnr); end
		table.insert(res, label .. "'''" .. outputname .. "'''" .. " || " .. args[arg]);
	end
end

function stasoort(bt) --bedrijfstype
   if (bt=='1') then bt = [[Doorgangsstation]]; end
   if (bt=='2') then bt = [[Richtingstation]]; end
   if (bt=='3') then bt = [[Kruisingsstation]]; end
   if (bt=='4') then bt = [[Kopstation]]; end
   if (bt=='5') then bt = [[Halte (stopplaats)|Halte]]; end
   if (bt=='6') then bt = [[Vorkstation]]; end
   return bt
end

function stabouw(ct) --constructietype
   if (ct=='0') then ct = [[Geul (sleuf)|Sleuf]]; end
   if (ct=='1') then ct = [[Maaiveld]]; end
   if (ct=='2') then ct = [[Talud]]; end
   if (ct=='3') then ct = [[Viaductstation]]; end
   if (ct=='4') then ct = [[Ondiep gelegen zuilenstation]]; end
   if (ct=='5') then ct = [[Pylonenstation]]; end
   if (ct=='6') then ct = [[Enkelgewelfdstation]]; end
   if (ct=='7') then ct = [[Dubbelgewelfdstation]]; end
   if (ct=='8') then ct = [[Kolommenstation]]; end
   if (ct=='9') then ct = [[Caisson]]; end
   if (ct=='10') then ct = [[Grotstation]]; end
   if (ct=='11') then ct = Loods; end
   if (ct=='12') then ct = [[Horizontale lift]]; end
   if (ct=='13') then ct = [[Kuip (station)|Kuip]]; end
   if (ct=='14') then ct = [[Semi-ondergrondsstation]]; end
   if (ct=='15') then ct = Gestapeldstation; end
   return ct
end

function perdeu(pd)
   if (pd=='1') then pd = 'in perronhek'; end
   if (pd=='2') then pd = 'in perronscherm'; end
   if (pd=='3') then pd = 'in tunnelwand'; end
   return pd
end

function treinsoort(td)
   xq=0; yq=0; soort='P'; zq='';
   itex = mw.wikibase.getEntity(td);
   if (itex and itex.claims["P31"]) then --zoeken naar soort treindienst
     
      for j = 1, #itex.claims["P31"] do 
         modaliteit = title_for (itex.claims["P31"][j].mainsnak.datavalue.value.id);  
         fltr = string.upper(modaliteit);      
         if (string.find(fltr,'RINGLIJN') )then yq = 1; end 
         if (string.find(fltr,'VOORSTAD') and xq < 7) then soort = 'S'; xq = 7; end
         if (string.find(fltr,'TREINSERIE') and xq < 4) then soort = 'P'; xq = 4; end
         if (string.find(fltr,'TREINDIENST') and xq < 4) then soort = 'P'; xq = 4; end
         if (string.find(fltr,'TREINCATEGORIE') and xq < 4) then soort = 'P'; xq = 4; end
         if (string.find(fltr,'LUCHTHAVENTREIN') and xq < 7) then soort = 'P'; xq = 7; end
         if (string.find(fltr,'REIZIGERSTREIN') and xq < 7) then soort = 'P'; xq = 7; end 
         if (string.find(fltr,'METRO') and xq < 7) then soort = 'M'; xq = 7; end 
         if (string.find(fltr,'LIGHT') and xq < 5) then soort = 'L'; xq = 5; end  
         if (string.find(fltr,'LICHT') and xq < 5) then soort = 'L'; xq = 5; end 
         if (string.find(fltr,'SNELTRAM') and xq < 5) then soort = 'L'; xq = 5; end     
         if (string.find(fltr,'S-BAHN') and xq < 3) then soort = 'S'; xq = 3; end
         if (string.find(fltr,'S-TREIN') and xq < 3) then soort = 'S'; xq = 3; end
         if (string.find(fltr,'VOORMALIGE') and xq < 7) then soort = 'X'; xq = 7; end
         if (string.find(fltr,'OPGEHEVEN') and xq < 7) then soort = 'X'; xq = 7; end
         if (string.find(fltr,'HOOFD') and xq < 7) then soort = 'H'; xq = 7; end
         if (string.find(fltr,'NEVEN') and xq < 7) then soort = 'H'; xq = 7; end
         if (string.find(fltr,'HOGE') and xq < 7) then soort = 'H'; xq = 7; end
         if (string.find(fltr,'SPOORLIJN') and xq < 4) then soort = 'H'; xq = 4; end
               
         --if claim.lineName == 'Docklands Light Railway' then soort = 'X' end --niet netjes om een concrete waarde uit te sluiten maar gezien de vervuiling in wikidata onontkoombaar 
         --zq=zq..modaliteit..' '..soort..'<br>';
      end
   end 
   return soort;
end

function voluit(date_string)
    jaar ='';
    maand='';
    dag='';
    j=0;
    for i = 1, #date_string do
       local d = date_string:sub(i,i)
       if d=='-' then j=j+1; else
          if j==0 then jaar=jaar..d end
          if j==1 then maand=maand..d end
          if j==2 and i<11 then 
             if dag~='' then dag=dag..d; d='0'; end
             if d~='0' then dag=dag..d; end
          end
       end
    end
    if dag[1]=='0' then dag=dag[2]; end
    if maand=='00' then maand='';end
    if maand=='01' then maand='januari'; end
    if maand=='02' then maand='februari'; end
    if maand=='03' then maand='maart'; end
    if maand=='04' then maand='april'; end
    if maand=='05' then maand='mei'; end
    if maand=='06' then maand='juni'; end
    if maand=='07' then maand='juli'; end
    if maand=='08' then maand='augustus'; end
    if maand=='09' then maand='september'; end
    if maand=='10' then maand='oktober'; end
    if maand=='11' then maand='november'; end
    if maand=='12' then maand='december'; end

	date_string = dag..'&nbsp;'..maand..'&nbsp;'..jaar;
    return date_string
end

--Main function
function p.main(frame)
	parent = frame:getParent();
	args = parent.args;
    groepen = {'Algemeen','Geschiedenis','Vroegere namen','Stationsbouw','Spoorlijn(en)','Treindienst(en)','Voorstadsdienst(en)','Metro','Metrolijn(en)','Lightrail','Overig openbaar vervoer','Ligging'} 

	item = mw.wikibase.getEntity(mw.wikibase.getEntityIdForCurrentPage());
	label = '\n|-\n| style="width:120px" | '; --begin van een rij
	res = {'{| class="infobox" style="width:{{Infobox/breedte}}px; font-size:85%;"'}; --tabel waar het resultaat in zal worden opgeslagen

    --Opmaak instellingen #00aaFF
	letters = 'white';
    balk = 'maroon'; 
    landcode='';
    portaal='';

    if(is_empty(args["land"]) and item and item.claims["P17"]) then 
		args["land"] = title_for(item:getBestStatements('P17')[1].mainsnak.datavalue.value.id); end
	    
    if(is_empty(args["vlag"]) and item and item.claims["P17"]) then 
	   --getting the item for country, then retrieving iso-2 code from it to use in Template:Vlagland
	   country_item = mw.wikibase.getEntity(item:getBestStatements('P17')[1].mainsnak.datavalue.value.id);
       if (country_item.id=='Q55') then landcode='NL'; else
	      if(country_item and country_item.claims["P297"] and #country_item:getBestStatements('P297')>0) then
             landcode = country_item:getBestStatements('P297')[1].mainsnak.datavalue.value; end
       end
                 if landcode=='AT' then letters='white'; balk='red'; portaal='Oostenrijk'; end
                 if landcode=='BE' then letters='white'; balk='darkblue'; portaal='België'; end
                 if landcode=='CH' then letters='white'; balk='red'; portaal='Zwitserland'; end
                 if landcode=='CZ' then letters='white'; balk='#138fd6'; portaal='Tsjechië'; end
                 if landcode=='ES' then letters='red'; balk='yellow'; portaal='Spanje'; end
                 if landcode=='FR' then letters='white'; balk='navy'; portaal='Frankrijk'; end
                 if landcode=='HU' then letters='white'; balk='green'; portaal='Hongarije'; end
                 if landcode=='IT' then letters='white'; balk='green'; portaal='Italië'; end
                 if landcode=='LI' then letters='yellow'; balk='navy'; portaal='Liechtenstein'; end
		         if landcode=='NL' then letters='white'; balk='darkblue'; portaal='Nederland'; end
                 if landcode=='PT' then letters='yellow'; balk='green'; portaal='Portugal'; end
                 if landcode=='SK' then letters='white'; balk='navy'; portaal='Slowakije'; end
                 if landcode=='SI' then letters='white'; balk='blue'; portaal='Slovenië'; end
       
    end
    stijl="color:"..letters..";background-color:"..balk;

	--Titel
	if(is_empty(args["naam"])) then --if argument "naam" not set, it gets page name with text in brackets removed
		args["naam"] = mw.text.split(tostring(mw.title.getCurrentTitle()), " %(")[1]; 
        memo = args["naam"];        local l=0
        local weergave=''
        for l = 1, #memo do
           d = memo:sub(l,l);
           weergave=weergave..d;
           if string.upper(weergave)=="STATION " then weergave='' end
        end
        args["naam"]=weergave;
    end
	 
	table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."<big>'''"..args["naam"].."'''</big>"); --insert argument "naam" into the result

	
	--Afbeelding
	if(is_empty(args["afbeelding"]) and item and item.claims["P18"]) then 
		args["afbeelding"] = item:getBestStatements('P18')[1].mainsnak.datavalue.value; end
	if(is_empty(args["afbeeldingbreedte"])) then args["afbeeldingbreedte"] = "275px"; end
	if(is_empty(args["beschrijving_afbeelding"]) and 
	  item and item.claims["P18"] and 
	  item.claims["P18"][1].qualifiers and 
	  item.claims["P18"][1].qualifiers["P2096"]) then 
		desc_text = ""; nl_index = -1;
		desc = item:getBestStatements('P18')[1].qualifiers["P2096"];
		--iterate over P2096 qualifiers, untill there is one with dutch language
		for i = 1, #desc do
			if(desc[i].datavalue.value.language=="nl") then
				nl_index = i; break; end
		end
		if(nl_index~=-1) then args["beschrijving_afbeelding"] = desc[nl_index].datavalue.value.text; end
	end
	
	--insert image and its description, if present, into the result table
	if(not is_empty(args["afbeelding"])) then 
		table.insert(res, '\n|-\n| align="center" colspan="2" | [[Bestand:'..
		  args["afbeelding"].."|"..args["afbeeldingbreedte"].."|center]]"); end
	if(not is_empty(args["beschrijving_afbeelding"])) then 
		table.insert(res, "{{center|1=''"..args["beschrijving_afbeelding"].."''}}"); end
	
	--ALGEMEEN (1)

    --Stationsafkorting 
    appendtable("stationscode", "P296", "Afkorting",1)

    --Stationscode (enkel item) Voor deze infobox de Franse stationscode, P8181
	appendtable("stationscode_fr", "P8181", "Stationscode",1)

	--Stationscode UIC (enkel item) UIC stationscode, P722
	appendtable("stationscode_uic", "P722", "UIC-identificatie",1)
        
        --Status(enkel item) In gebruik of niet, P5817
	appendtable("gebruiksstatus", "P5817", "Status", 1, true)

        --Exploitant (voorbeeld van mogelijk meerdere items)
	if(is_empty(args["exploitant"]) and item and item.claims["P137"]) then 
		exploitant_lijst = {};
		--there can be multiple values of P137, adding each of them to the table
		for i = 1, #item.claims["P137"] do 
			table.insert(exploitant_lijst, title_for(item.claims["P137"][i].mainsnak.datavalue.value.id)); end
		args["exploitant"] = table.concat(exploitant_lijst, ", <br/>") .. editsymbol("P137"); --result is a table concatenated with separator being a comma and newline 
	end
	if(not is_empty(args["exploitant"])) then 
		table.insert(res, label.."'''Exploitant'''".." || "..args["exploitant"]); end

        --Links
	if (is_empty(args["beschreven_op"]) and item and item.claims["P973"]) then 
		url_list = {};
		--there can be multiple values of P973, adding each of them to the table
		for i = 1, #item.claims["P973"] do 
			link = item.claims["P973"][i].mainsnak.datavalue.value;
			--link text will be a part of url between http:// and first /
			link_text = mw.text.split(mw.text.split(link, "//")[2], "/")[1];
			table.insert(url_list, "["..link.." "..link_text.."]"); end
		args["beschreven_op"] = table.concat(url_list, "<br/>") .. editsymbol("P973");
	end
	if (not is_empty(args["beschreven_op"])) then 
		table.insert(res, label.."'''Beschreven op'''"..
		  " || <small>"..args["beschreven_op"].."</small>"); end

	--Commonscategorie, P373
	if (is_empty(args["commonscategorie"]) and item and item.claims["P373"]) then 
		args["commonscategorie"] = item:getBestStatements('P373')[1].mainsnak.datavalue.value;
		args["commonscategorie"] = args["commonscategorie"]
		cces = true
	end
	if (not is_empty(args["commonscategorie"])) then
		cctxt = label.."'''Commonscategorie'''".." || [[Commons:Category:"..args["commonscategorie"].."|"..args["commonscategorie"].."]]"
		if cces then
			cctxt = cctxt .. editsymbol("P373")
		end
		table.insert(res, cctxt)
	end
 --GESCHIEDENIS (2)

    --Openingsdatum 
	if(is_empty(args["opening"]) and item and item.claims["P1619"]) then 
		--date in Wikidata is stored in format +YYYY-MM-DD... , only year is needed
		date_string = item:getBestStatements('P1619')[1].mainsnak.datavalue.value.time;
		date_string = mw.text.split(date_string, "+")[2];
  		args["opening"] = voluit(date_string).. editsymbol("P1619"); 
    end
	if(not is_empty(args["opening"])) then kop = true; end

 --Sluitingsdatum 
	if(is_empty(args["sluiting"]) and item and item.claims["P3999"]) then 
		--date in Wikidata is stored in format +YYYY-MM-DD... , only year is needed
		local sluitDatum = item:getBestStatements('P3999');
		if #sluitDatum > 0 then
			local dv = sluitDatum[1].mainsnak.datavalue
			if dv then
				date_string = dv.value.time;
				date_string = mw.text.split(date_string, "+")[2];
				date_string = mw.text.split(date_string, "-")[1];
				args["sluiting"] = voluit(date_string) .. editsymbol("P3999");
                
			end
		end
    end 
        
    if(not is_empty(args["sluiting"])) then kop = true;end

    if (kop) then 
            table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."'''Geschiedenis'''");end --insert sectionheader into the result

        if(not is_empty(args["opening"])) then 
		table.insert(res, label.."'''Opening'''".." || "..args["opening"]); end


	if(not is_empty(args["sluiting"])) then 
		table.insert(res, label.."'''Sluiting'''".." || "..args["sluiting"]); end

 --VROEGERE NAMEN (3)
    j=0; breed='';
    
    if ((not is_empty(args["naam1"])) and (not is_empty(args["datum1"])) ) then 
       breed=breed..'<tr><td>'..args["naam1"]..'</td><td>'..args["datum1"]..'</td></tr>';
       j=j+1;
    end 
    if ((not is_empty(args["naam2"])) and (not is_empty(args["datum2"])) ) then 
       breed=breed..'<tr><td>'..args["naam2"]..'</td><td>'..args["datum2"]..'</td></tr>';
       j=j+1;
    end 
    if ((not is_empty(args["naam3"])) and (not is_empty(args["datum3"])) ) then 
       breed=breed..'<tr><td>'..args["naam3"]..'</td><td>'..args["datum3"]..'</td></tr>';
       j=j+1;
    end 
    if ((not is_empty(args["naam4"])) and (not is_empty(args["datum4"])) ) then 
       breed=breed..'<tr><td>'..args["naam4"]..'</td><td>'..args["datum4"]..'</td></tr>';
       j=j+1;
    end 
    if ((not is_empty(args["naam5"])) and (not is_empty(args["datum5"])) ) then 
       breed=breed..'<tr><td>'..args["naam5"]..'</td><td>'..args["datum5"]..'</td></tr>';
       j=j+1;
    end  
    if (j>0) then
       if (j==1) then groepen[3] = 'Vroegere naam'; end
       table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."'''"..groepen[3].."'''"); --insert sectionheader into the result
       breed= '<table><tr><td style="width:132px">Naam</td><td style="width:132px">Tot</td></tr>'..breed..'</table>';
       table.insert(res, '\n|-\n| align="center" colspan="2"  | '..breed );
       groepen[3]='-';
    end

 --CONSTRUCTIE (4)
    kop = false;
      --Architect (mogelijk meerdere items) 4.1
	if(is_empty(args["architect"]) and item and item.claims["P84"]) then 
		architect_lijst = {};
		--there can be multiple values of P84, adding each of them to the table
		for i = 1, #item.claims["P84"] do 
			table.insert(architect_lijst, title_for(item.claims["P84"][i].mainsnak.datavalue.value.id));
        end
		args["architect"] = table.concat(architect_lijst, ", <br/>"); --result is a table concatenated with separator being a comma and newline 
    end
    if(not is_empty(args["architect"])) then kop = true; end

    
    -- bedrijfstype  
    if (not is_empty(args["bedrijfstype"])) then 
       args["bedrijfstype"]=stasoort(args["bedrijfstype"]);
       if(not is_empty(args["bedrijfstype"])) then kop = true; end
    end                            

    --constructietype
    if (not is_empty(args["type"])) then 
       args["ctype"]=stabouw(args["type"]);
       if(not is_empty(args["ctype"])) then kop = true; end
    end      

    --totaal aantal sporen
    if (not is_empty(args["sporen"])) then kop = true;end 

    --aantal perronsporen
    if (is_empty(args["perronsporen"]) and item and item.claims["P1103"]) then 
		args["perronsporen"] = tonumber(item:getBestStatements('P1103')[1].mainsnak.datavalue.value.amount);
		args["perronsporen"] = args["perronsporen"] .. editsymbol("P1103")
	end
        if(not is_empty(args["perronsporen"])) then kop=true; end

    --totaal aantal perrons
    if(not is_empty(args["perrons"])) then kop = true;end 

    --perrondeuren
    if (args["type"]=='12') then args["perrondeur"]='3'; end
    if (not is_empty(args["perrondeur"])) then 
       args["perrondeur"]=perdeu(args["perrondeur"]);
       if(not is_empty(args["perrondeur"])) then kop = true; end
    end      

    --totaal aantal roltrappen
    if(not is_empty(args["roltrappen"])) then kop = true;end 

    --totaal aantal liften
    if(not is_empty(args["liften"])) then kop = true;end 

    --bij ondergrondse stations diepte onder de straat
    if(not is_empty(args["diepte"])) then kop = true;end 
                             
    if (kop) then 
            table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."'''Stationsbouw'''");end --insert sectionheader into the result

    if (not is_empty(args["architect"])) then 
		table.insert(res, label.."'''Architect'''".." || "..args["architect"]); end

    if (not is_empty(args["bedrijfstype"])) then 
		table.insert(res, label.."'''Bedrijfstype'''".." || "..args["bedrijfstype"]); end

    if (not is_empty(args["ctype"])) then 
		table.insert(res, label.."'''Constructie'''".." || "..args["ctype"]); end

    if (not is_empty(args["sporen"])) then 
		table.insert(res, label.."'''Sporen'''".." || "..args["sporen"]); end

	if (not is_empty(args["perronsporen"])) then 
		table.insert(res, label.."'''Perronsporen'''".." || "..args["perronsporen"]); end

    if (not is_empty(args["perrons"])) then 
		table.insert(res, label.."'''Perrons'''".." || "..args["perrons"]); end

    if (not is_empty(args["perrondeuren"])) then 
		table.insert(res, label.."'''Perrondeuren'''".." || "..args["perrondeuren"]); end

    if (not is_empty(args["roltrappen"])) then 
		table.insert(res, label.."'''Roltrappen'''".." || "..args["roltrappen"]); end

    if (not is_empty(args["liften"])) then 
		table.insert(res, label.."'''Liften'''".." || "..args["liften"]); end

    if (not is_empty(args["diepte"])) then 
		table.insert(res, label.."'''Diepte'''".." || "..args["diepte"]); end

--SPOORLIJNEN (5) (voorbeeld van mogelijk meerdere items)
    breed=''; lijnen_lijst = {};
	if(is_empty(args["lijnen"]) and item and item.claims["P81"]) then 
		logo = 'Aiga railtransportation 25.svg';
		station = item.id; 
		for i = 1, #item.claims["P81"] do 
            zulu = true;
            lijn_item = mw.wikibase.getEntity(item:getBestStatements('P81')[i].mainsnak.datavalue.value.id);
		    if(lijn_item and lijn_item.claims["P527"]) then --primair zoeken naar stations van de lijn
                richting=''; stainricht='Eindpunt'; size_logo=25; stainblok=2;

                for j = 1, #lijn_item.claims["P527"] do 
                    --hier controleren of de P527 een station is.
                   
                    vergelijker = lijn_item.claims["P527"][j].mainsnak.datavalue.value.id;
                                        
                    if (vergelijker == station) then 
                       if breed=='' then breed=breed..'<table><tr><td>Lijn</td><td>Richting</td><td>Volgend station</td></tr>'; end
                          if (j==1) then richting = station; end
                          breed=breed..'<tr><td colspan="3"><hr></td></tr>';
                          breed=breed..'<tr><td style="width:32px">[[Bestand:' ..logo .. '|' .. size_logo .. ' px]]</td><td style="width:116px">' ..title_for(richting).. '</td><td style="width:116px">' ..stainricht.. '</td></tr>';
                          stainblok = 0; zulu = false;
                       else
                          if richting=='' then richting = vergelijker; end
                          if stainblok ~=1  then 
                          stainricht = title_for(lijn_item.claims["P527"][j].mainsnak.datavalue.value.id); 
                          stainblok=stainblok+1;
                       end
                       
                    end
                   	
			    end
                if stainblok==0 then stainricht='Eindpunt'; stainblok=1; end 
                if stainblok==1 then
                   breed=breed..'<tr><td style="width:32px">[[Bestand:' ..logo .. '|' .. size_logo .. ' px]]</td><td style="width:116px">' ..title_for(vergelijker).. '</td><td style="width:116px">' ..stainricht.. '</td></tr>';
                   breed=breed..'<tr><td colspan="3" align="center">('..title_for(item.claims["P81"][i].mainsnak.datavalue.value.id)..')</td></tr>';   
                end;   
            end --einde P527
            
             if (0==1) then
             if(lijn_item and lijn_item.claims["P197"] and zulu) then --subsidiair zoeken naar opvolgende stations bij het station
                richting=''; stainricht='Eindpunt'; size_logo=25; stainblok=2;

                --for j = 1, #lijn_item.claims["P197"] do 
                
                    --hier controleren of het gevonden station aan de lijn ligt
                   
                    vergelijker = lijn_item.claims["P197"][j].mainsnak.datavalue.value.id;
                                        
                    if (vergelijker == station) then 
                       if breed=='' then breed=breed..'<table><tr><td>Lijn</td><td>Richting</td><td>Volgend station</td></tr>'; end
                          if (j==1) then richting = station; end
                          breed=breed..'<tr><td colspan="3"><hr></td></tr>';
                          breed=breed..'<tr><td style="width:32px">[[Bestand:' ..logo .. '|' .. size_logo .. ' px]]</td><td style="width:116px">' ..title_for(richting).. '</td><td style="width:116px">' ..stainricht.. '</td></tr>';
                          stainblok = 0; zulu = false;
                       else
                          if richting=='' then richting = vergelijker; end
                          if stainblok ~=1  then 
                          stainricht = title_for(lijn_item.claims["P197"][j].mainsnak.datavalue.value.id); 
                          stainblok=stainblok+1;
                       end
                       
                    end
                   	
			    end
                if stainblok==0 then stainricht='Eindpunt'; stainblok=1; end 
                if stainblok==1 then
                   breed=breed..'<tr><td style="width:32px">[[Bestand:' ..logo .. '|' .. size_logo .. ' px]]</td><td style="width:116px">' ..title_for(vergelijker).. '</td><td style="width:116px">' ..stainricht.. '</td></tr>';
                   breed=breed..'<tr><td colspan="3" align="center">('..title_for(item.claims["P81"][i].mainsnak.datavalue.value.id)..')</td></tr>';   
                end;   
            end --einde P197
                     
			if (zulu) then table.insert(lijnen_lijst, title_for(item.claims["P81"][i].mainsnak.datavalue.value.id)); end
        end -- einde aflopen P81
       
       if breed~='' then 
          breed=breed..'<tr><td colspan="3"><hr></td></tr>';
          breed=breed..'<tr><td colspan="3" align="center"><small>Brongegevens aanpassen in wikidata'..editsymbol("P81")..'</small></td></tr>';
          breed=breed..'</table>'; 
       else
          args["lijnen"] = table.concat(lijnen_lijst, ", <br/>") .. editsymbol("P81"); --result is a table concatenated with separator being a comma and newline 
       end
	end
	if(not is_empty(args["lijnen"])) then 
        table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."'''Spoorlijn(en)'''"); --insert sectionheader into the result
        table.insert(res, label.."'''Lijnen'''".." || "..args["lijnen"]);
    else
        if breed=='' then os = '{{Opvolgende stations|||||H}}'; else os=breed; end --terugval op os als P527 niets oplevert (moet verder uitgewerkt)
         table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."'''Spoorlijn(en)'''"); --insert sectionheader into the result
        table.insert(res, '\n|-\n| align="center" colspan="2"  | '..os );
        table.insert(res, '\n|-\n| align="center" colspan="2"  | '..table.concat(lijnen_lijst, ", <br/>"));
 		
  	end

	--Modaliteiten in de juiste lijst zetten
	if(is_empty(args["aansluitende_dienst"]) and item and item.claims["P1192"]) then 
		aansluitende_dienst = {}; ad=false; args["aansluitende_dienst"]='';
        voorstads_dienst = {}; vd=false; args["voorstads_dienst"]='';
        metro_dienst = {}; md=false; args["metro_dienst"]='';
        sneltram_dienst = {}; ld=false; args["sneltram_dienst"]='';
		--there can be multiple values of P1192, adding each of them to the table
		for i = 1, #item.claims["P1192"] do 
            lijn_item = item.claims['P1192'][i].mainsnak.datavalue.value.id;
            lijn_naam = title_for(lijn_item);
		    td = treinsoort(lijn_item);
            --lijn_naam = lijn_naam..'('..td..')';
            td = td:sub(1,1);
			if (td=='P') then table.insert(aansluitende_dienst, lijn_naam); ad=true; end
            if (td=='S') then table.insert(voorstads_dienst, lijn_naam); vd=true; end
            if (td=='M') then table.insert(metro_dienst, lijn_naam); md=true; end
            if (td=='L') then table.insert(sneltram_dienst, lijn_naam); ld=true; end
        end
        if (ld) then args["sneltram_dienst"] = table.concat(sneltram_dienst, ", <br/>") .. editsymbol("P1192"); end
        if (md) then args["metro_dienst"] = table.concat(metro_dienst, ", <br/>") .. editsymbol("P1192"); end
        if (ad) then args["aansluitende_dienst"] = table.concat(aansluitende_dienst, ", <br/>") .. editsymbol("P1192"); end
		if (vd) then args["voorstads_dienst"] = table.concat(voorstads_dienst, ", <br/>") .. editsymbol("P1192"); end --result is a table concatenated with separator being a comma and newline 
	end

    --TREINDIENSTEN (6)
	if(not is_empty(args["aansluitende_dienst"])) then 
                table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."'''Treindienst(en)'''"); --insert sectionheader into the result

        os = '{{Opvolgende stations|||||P}}';
        table.insert(res, '\n|-\n| align="center" colspan="2"  | '..os );
		if (args["aansluitende_dienst"]~='') then table.insert(res, label.."'''Aansluiting'''".." || "..args["aansluitende_dienst"]); end
    end

    --VOORSTADSDIENSTEN (7)
    if(not is_empty(args["voorstads_dienst"])) then 
                table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."'''Voorstadsdienst(en)'''"); --insert sectionheader into the result
         os = '{{Opvolgende stations|||||S}}';
        table.insert(res, '\n|-\n| align="center" colspan="2"  | '..os );
        table.insert(res, label.."'''Aansluiting'''".." || "..args["voorstads_dienst"]);
    end

        --METROSTATION (8)
       
    --METRODIENSTEN (9)
    if(not is_empty(args["metro_dienst"])) then 
                table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."'''Metro'''"); --insert sectionheader into the result
         os = '{{Opvolgende stations|||||M}}';
        table.insert(res, '\n|-\n| align="center" colspan="2"  | '..os );
        table.insert(res, label.."'''Aansluiting'''".." || "..args["metro_dienst"]);
    end
    
    --SNELTRAM / LIGHTRAIL (A)
    if(not is_empty(args["sneltram_dienst"])) then 
                table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."'''Sneltram/Lightrail'''"); --insert sectionheader into the result
         os = '{{Opvolgende stations|||||L}}';
        table.insert(res, '\n|-\n| align="center" colspan="2"  | '..os );
        table.insert(res, label.."'''Aansluiting'''".." || "..args["sneltram_dienst"]);
    end

    --OVERIG OV--
       kop = false;
       if(not is_empty(args["spoorwegstation"])) then kop = true;end --B1
       if(not is_empty(args["voorstadstation"])) then kop = true;end --B2
       if(not is_empty(args["metrostation"])) then kop = true;end --B3
       if(not is_empty(args["sneltram"])) then kop = true;end --B4
       if(not is_empty(args["tramlijnen"])) then kop = true;end --B5
       if(not is_empty(args["buslijnen"])) then kop = true;end --B6
       if(not is_empty(args["trolleylijnen"])) then kop = true;end --B7
       if(not is_empty(args["kabeltram"])) then kop = true;end --B8

       if (kop) then 
          table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."'''Overig openbaar vervoer'''"); --insert sectionheader into the result
          groepen[11]='-';
          
          if(not is_empty(args["spoorwegstation"])) then
             table.insert(res, label.."'''Spoorwegstation(s)'''".." || "..args["spoorwegstation"]); end
          
          if(not is_empty(args["voorstadstation"])) then 
             table.insert(res, label.."'''Voorstadstation(s)'''".." || "..args["voorstadstation"]); end

          if(not is_empty(args["metrostation"])) then
             table.insert(res, label.."'''Metrostation(s)'''".." || "..args["metrostation"]); end
       
          if(not is_empty(args["sneltram"])) then 
             table.insert(res, label.."'''Sneltram(s)'''".." || "..args["sneltram"]); end
       
          if(not is_empty(args["tramlijnen"])) then 
             table.insert(res, label.."'''Tramlijn(en)'''".." || "..args["tramlijnen"]); end
       
          if(not is_empty(args["buslijnen"])) then 
             table.insert(res, label.."'''Buslijn(en)'''".." || "..args["buslijnen"]); end
       
          if(not is_empty(args["trolleylijnen"])) then 
             table.insert(res, label.."'''Trolleylijn(en)'''".." || "..args["trolleylijnen"]); end
          
          if(not is_empty(args["kabeltram"])) then 
             table.insert(res, label.."'''Kabeltram'''".." || "..args["kabeltram"]); end
          		 
       end

     --LIGGING
          table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
	  .."'''Ligging'''"); --insert sectionheader into the result
          groepen[12]='-';
        --Land

	--Land
	if(is_empty(args["land"]) and item and item.claims["P17"]) then 
		args["land"] = title_for(item:getBestStatements('P17')[1].mainsnak.datavalue.value.id); end
	
    if(is_empty(args["vlag"]) and item and item.claims["P17"]) then 
		--getting the item for country, then retrieving iso-2 code from it to use in Template:Vlagland
		country_item = mw.wikibase.getEntity(item:getBestStatements('P17')[1].mainsnak.datavalue.value.id);
		if(country_item and country_item.claims["P297"]) then
			if (landcode~='') then args["vlag"] = '{{'..landcode..'}}&nbsp;'; else args["vlag"] = ""; end
			  --country_item:getBestStatements('P297')[1].mainsnak.datavalue.value..'}}&nbsp;';
		else args["vlag"] = ""; end
	elseif(is_empty(args["vlag"])) then args["vlag"] = ""; end --if there is no iso-2 code, there would be no flag
		if (args["vlag"]~='') then table.insert(res, label.."'''Land'''".." || "..args["vlag"].. editsymbol("P17")); end
    --C2
    --Kanton (CH)
    if(not is_empty(args["kanton"])) then
      opschrift = 'Kanton'; 
      if landcode=='CH' then opschrift = '[[Kantons van Zwitserland|Kanton]]'; end 
      table.insert(res, label.."'''"..opschrift.."''' || "..args["kanton"]); 
    end

	--Deelstaat (AT & DE)
    if(not is_empty(args["deelstaat"])) then
      opschrift = 'Deelstaat'; 
      if landcode=='AT' then opschrift = '[[Deelstaten van Oostenrijk|Deelstaat]]'; end 
      table.insert(res, label.."'''"..opschrift.."''' || "..args["deelstaat"]); 
    end

    --Regio (FR, IT, DK, ES)
    if(not is_empty(args["regio"])) then
      opschrift = 'Regio'; 
      if landcode=='DK' then opschrift = "[[Regio's  van Denemarken|Regio]]"; end 
      if landcode=='IT' then opschrift = "[[Regio's  van Italië|Regio]]"; end 
      table.insert(res, label.."'''"..opschrift.."''' || "..args["regio"]); 
    end 

    --Landschap
    if(not is_empty(args["landschap"])) then
      opschrift = 'Landschap'; 
      if landcode=='SE' then opschrift = '[[Landschappen van Zweden|Landschap]]'; end 
      table.insert(res, label.."'''"..opschrift.."''' || "..args["landschap"]); 
    end
    
    --C2&C3
    --Provincie (C2:NO, NL, BE, C3:SE, IT, ES)
    if(not is_empty(args["provincie"])) then
      opschrift = 'Provincie'; 
      if landcode=='SE' then opschrift = '[[Län|Provincie]]'; end 
      if landcode=='NO' then opschrift = '[[Provincies van Noorwegen|Provincie]]'; end  
      if landcode=='NL' then opschrift = '[[Provincies van Nederland|Provincie]]'; end 
      table.insert(res, label.."'''"..opschrift.."''' || "..args["provincie"]); 
    end

    --C3
    --Departement (FR)
    if(not is_empty(args["departement"])) then
      opschrift = 'Departement'; 
      table.insert(res, label.."'''"..opschrift.."''' || "..args["departement"]); 
    end

    --District (CH, AT, DE)
	  if(not is_empty(args["district"])) then
      opschrift = 'District'; 
      if landcode=='AT' then opschrift = '[[Districten van Oostenrijk|District]]'; end 
      table.insert(res, label.."'''"..opschrift.."''' || "..args["district"]); 
    end

    --C4
    if(not is_empty(args["gemeente"])) then
      opschrift = 'Gemeente'; 
      table.insert(res, label.."'''"..opschrift.."''' || "..args["gemeente"]); 
    end

    --C5
    --Plaats (voorbeeld enkel item)
	appendtable("plaats", "P131", "Plaats", 12, true)

    --C6
    --stadsdeel
    if(not is_empty(args["stadsdeel"])) then
      opschrift = 'Stadsdeel'; 
      table.insert(res, label.."'''"..opschrift.."''' || "..args["stadsdeel"]); 
    end
    
    --Adres (voorbeeld enkel item)
	appendtable("adres", "P6375", "Adres", 12)
    
    --Hoogte (voorbeeld enkel item)
    appendtable("hoogte", "P2044", "Hoogte", 12)



	--Coordinates and map
	if (is_empty(args["breedtegraad"]) or is_empty(args["lengtegraad"])) and 
	  item and item.claims["P625"] then
	    --if arguments "breedtegraad" and "lengtegraad" not set, take value from Wikidata
		coord = item:getBestStatements('P625')[1].mainsnak.datavalue.value;
		args["breedtegraad"] = coord.latitude;
		args["lengtegraad"] = coord.longitude;
	end
	--if both latitude and longtitude are set, add an OSM-map
	if( (not is_empty(args["breedtegraad"])) and (not is_empty(args["lengtegraad"])) ) then 

        geocoord="{{Coor dec2|"..args["breedtegraad"].."|"..args["lengtegraad"].."||type:railwaystation_scale:6250_region:GB}}"
        table.insert(res, label.."'''Coördinaten'''".." || "..geocoord.. editsymbol("P625")) 

		if(is_empty(args["mapframe_breedte"])) then 
			args["mapframe_breedte"] = mw.text.split(args["afbeeldingbreedte"], "px")[1];
		else args["mapframe_breedte"] = mw.text.split(args["mapframe_breedte"], "px")[1]; end
		table.insert(res, '\n|-\n| align="center" colspan="2" | '..
		  '<mapframe width='..args["mapframe_breedte"]..' height='..args["mapframe_breedte"]..
		  ' latitude='..args["breedtegraad"]..' longitude='..args["lengtegraad"]..
		  ' zoom=11 frameless align="center">'..
		  '{"type": "Feature","geometry": { "type": "Point", "coordinates": ['..
		  args["lengtegraad"]..','..args["breedtegraad"]..
		  '] },"properties": {"title": "'..args["naam"]..'"'..
		  ',"marker-symbol": "rail","marker-size": "medium","marker-color": "C0C"'..
		  '}}</mapframe>');
	end
    
    voet = '<table><tr><td style="vertical-align:middle;"><b>Portaal</b>&nbsp;[[Bestand:Portal.svg|22px|link=Portal.svg]]</td><td class="ta-left">[[Portaal:Openbaar vervoer|<b style="color:'..letters..'">Openbaar vervoer</b>]]';
    if portaal~='' then voet=voet..'<br>[[Portaal:'..portaal..'|<b style="color:'..letters..'">'..portaal..'</b>]]'; end
    voet = voet..'</td></tr></table>';
    table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '..voet);

	return frame:preprocess(table.concat(res)..'\n|}'); --the final result id the concatenated result table
end

return p;