Module:InfoboxAnat

De Wikimedica

La documentation pour ce module peut être créée à Module:InfoboxAnat/Documentation

local p = {}

function p.infoboxAnat(f)
	-- a cause des erreurs 403 on desactive
	if true then
		return 1
	end
		
    local capiunto = require 'capiunto'
    local linkedwiki = require 'linkedwiki'
	--linkedwiki:Curl:setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36')
    -- init the prefix
    local rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
    local rdfs = 'http://www.w3.org/2000/01/rdf-schema#'
    local ri = 'http://wikimedi.ca/wiki/' 
    local rp = 'http:/wikimedi.ca/wiki/Property:'
    local  wikibase = 'http://wikiba.se/ontology#' --added JP https://stackoverflow.com/questions/43258341/how-to-get-wikidata-labels-in-more-than-one-language
    local xsd = 'http://www.w3.org/2001/XMLSchema#'
    local wdt = 'http://www.wikidata.org/prop/direct/'
    local wd = 'http://www.wikidata.org/entity/'
    local p = 'http://www.wikidata.org/prop/'
    local pq = 'http://www.wikidata.org/prop/qualifier/'
    local ps = 'http://www.wikidata.org/prop/statement/'
    local skos = 'http://www.w3.org/2004/02/skos/core#'
    local rdag2= 'http://rdvocab.info/ElementsGr2/'
    local foaf=  'http://xmlns.com/foaf/0.1/'
    local taglang = 'fr'
    local dateFormat = "d M Y"

    local subject = f.args.iri or linkedwiki.getCurrentIRI();

    local subject = linkedwiki.getCurrentIRI(); -- read the iri of the current page
    local object = linkedwiki.new(subject)
    --object:setDebug(true)
    object:removeSubject() -- delete all triples of this subject

    -- Save the data in the infobox in a knowledge base
    -- celaa va necessiter de configurer notre propre base relationnelle (en cours)

--this could be added later--    mw.log(object:addPropertyWithIri(rdf .. 'type', ri .. 'muscle'))
--this oculd be added later--    mw.log(object:addPropertyString(rdfs .. 'label', f.args["Titre"]))
--    mw.log(object:addPropertyWithIri(rp .. 'picture', f.args["Image"]))
--    mw.log(object:addProperty(rp .. 'nomDeNaissance', f.args['Nom de naissance']))
--    mw.log(object:addProperty(rp .. 'naissance', f.args['Date de naissance'], xsd .. 'date', ''))
--    mw.log(object:addProperty(rp .. 'naissancePrecision', f.args['Naissance précision (années)'], xsd .. 'integer', ''))
--    mw.log(object:addPropertyString(rp .. 'lieuDeNaissance', f.args['Lieu de naissance']))
--    mw.log(object:addProperty(rp .. 'deces', f.args['Date de décès'], xsd .. 'date', ''))
--    mw.log(object:addPropertyString(rp .. 'lieuDeDeces', f.args['Lieu de décès']))
--    mw.log(object:addProperty(rp .. 'electionAuPontificat', f.args['Election au pontificat'], xsd .. 'date', ''))
--    mw.log(object:addProperty(rp .. 'intronisation', f.args['Intronisation'], xsd .. 'date', ''))
--    mw.log(object:addProperty(rp .. 'finDuPontificat', f.args['Fin du pontificat'], xsd .. 'date', ''))

    --compare data with Wikidata
    local iriWikidata = ""
    local objWikidata = nil
    local objWikidataLieuNaissance = nil
    local objWikidataLieuDeces = nil
    local objPapeFonction = nil
    local linkWikidata = ""

    if not linkedwiki.isEmpty(f.args['Wikidata ID']) then
        local idConfigWikidata = 'http://www.wikidata.org'

        iriWikidata = wd .. f.args['Wikidata ID']
        objWikidata = linkedwiki.new(iriWikidata, idConfigWikidata, taglang)
--        objWikidata:setDebug(true)
--this oculd be added later--        mw.log(object:addPropertyWithIri(rp .. 'WikidataID', iriWikidata))
--        objWikidataLieuNaissance = linkedwiki.new(objWikidata:getValue(wdt .. 'P19'), idConfigWikidata, taglang)
--        objWikidataLieuDeces = linkedwiki.new(objWikidata:getValue(wdt .. 'P20'), idConfigWikidata, taglang)

--        listIri = linkedwiki.explode(";", objWikidata:getValue(p .. 'P39'))
--        objPapeFonction = nil
--        for i, iri in ipairs(listIri) do
--            objPapeFonction = linkedwiki.new(iri, idConfigWikidata, taglang)
--            if objPapeFonction:getValue(ps .. 'P39') == wd .. "Q19546" then
--                break
--            end
--        end

        linkWikidata = '[' .. iriWikidata .. ' ' .. f.args['Wikidata ID'] .. ']'
    end


	--	local image= f.args["Image"] or objWikidata:getValue(wdt .. 'P18')
	local image=  objWikidata:getValue(wdt .. 'P18')
	if image == "" and f.args["Image"] ~= nil then
		image = f.args["Image"]
	end
	
	-- label alternatif alias
	local NomLabel = '' -- nom officiel de wikidata
	local NomAliases = '' -- nom alternatifs
	--ObjAliases=objWikidata:getValue(rdfs .. 'alias');
	NomLabel=objWikidata:getString(rdfs .. 'label',taglang);
	NomAliases=objWikidata:getString(skos .. 'altLabel',taglang);
	--on ajoute le nom officiel en tete des alias
	if (NomLabel ~= "" and NomAliases ~= '') then
		NomAliases=  NomLabel .. ';' .. NomAliases
	end
	NomAliases= string.gsub(NomAliases,';',', ');
	--mw.log("logme:" .. NomAliases .. ' =>' .. NomLabel)

	
	-- classe, il y a au moins deux codes suivant les muscles pas standardisé
	local ObjSubclass = {}
	local NomSubclass= ""
	if  f.args['classe']  ~= nil  and f.args['classe'] ~= ""  then -- on force le type de classe , il y a beaucoup d'erreur, exemple humerus
		NomSubclass = f.args['classe']
	end
	if ( NomSubclass == nil or NomSubclass == '') then
		ObjSubclass = linkedwiki.new(objWikidata:getValue(wdt .. 'P279'), idConfigWikidata, taglang)
		NomSubclass= ObjSubclass:getString(rdfs .. 'label',taglang)
	end
	if NomSubclass== nil or NomSubclass == ''  then
		ObjSubclass = linkedwiki.new(objWikidata:getValue(wdt .. 'P31'), idConfigWikidata, taglang)
		NomSubclass= ObjSubclass:getString(rdfs .. 'label',taglang)
	end

	
	-- situation
	local ObjSituation = linkedwiki.new(objWikidata:getValue(wdt .. 'P361'), idConfigWikidata, taglang)
	local NomSituation= ObjSituation:getString(rdfs .. 'label',taglang)	
	
	-- situationAnat
	local ObjSituationAnat = linkedwiki.new(objWikidata:getValue(wdt .. 'P927'), idConfigWikidata, taglang)
	local NomSituationAnat= ObjSituationAnat:getString(rdfs .. 'label',taglang)	
	
	-- nombre de chefs : has part
	listIri = linkedwiki.explode(";",objWikidata:getValue(wdt .. 'P527'))
	local NbChefs =1
	local ObjHasPart = nil
	local ObjTerm = nil --P3491
	local ObjOri = nil -- P3490
	local NomHasPart = {}
	local NomHasPartTerm = {} --alsoknow as muscle insertion P3491 Q26708759
	local NomHasPartOri = {} -- muscle origin P3490 Q26708757
	local NomStringHasPart = ""
	local NomStringHasPartTerm   = ''
	local NomStringHasPartOri   = ''
    for i, iri in ipairs(listIri) do
        ObjHasPart = linkedwiki.new(iri, idConfigWikidata, taglang)
        NomHasPart[i] = ObjHasPart:getString(rdfs .. 'label',taglang)
        if  NomHasPart[i] == nil or NomHasPart[i] == ''  then -- isempty(NomHasPart) does not exist
  			NomHasPart[i] = ObjHasPart:getString(rdfs .. 'label','en')
  			NomStringHasPart = NomStringHasPart ..  "\n* " .. NomHasPart[i] ..' [' .. iri .. " traduire]"
  		else
  			NomStringHasPart = NomStringHasPart ..  "\n* [[" .. NomHasPart[i] ..']] '
  		end
		-- TO DO JP: rechercher origine et terminaisons pour les chefs
		NomHasPartTerm[i] = ObjHasPart:getString(wdt .. 'P3491',taglang)
		NomHasPartOri[i] = ObjHasPart:getString(wdt .. 'P3490',taglang)
	
        --mw.log("logme:" ..  i .. iri .. " - " .. " - " .. NomHasPart[i])
		NbChefs=i
	end
	-- si un seul chef on recherche les informations d.origine terminaison sur la page (sont absentes en géngéral
	if NbChefs == 1 then
		ObjTerm = linkedwiki.new(objWikidata:getValue(wdt .. 'P3491'), idConfigWikidata, taglang)
		if ObjTerm["subject"] ~= nil  and ObjTerm["subject"] ~= "" then 
	 		NomStringHasPartTerm = "[[" .. ObjTerm:getString(rdfs .. 'label',taglang)	 .. "]]"
 		end
 		ObjOri = linkedwiki.new(objWikidata:getValue(wdt .. 'P3490'), idConfigWikidata, taglang)
		--mw.log("logme" .. mw.dumpObject(ObjOri))
		if ObjOri["subject"] ~= nil  and ObjOri["subject"] ~= "" then 
			NomStringHasPartOri = "[[" .. ObjOri:getString(rdfs .. 'label',taglang) .. "]]"	
		end
	end
	-- si toujours vide on cherche l'info depuis la page
	if NomStringHasPartTerm == "" and f.args['terminaison'] ~= nil then
		NomStringHasPartTerm = f.args['terminaison']
	end
	if NomStringHasPartOri == "" and f.args['origine'] ~= nil then
		NomStringHasPartOri = f.args['origine']
	end
		
	
	
	-- type musculaire 
	local morphologie = ""
	if  f.args["morphologie"] ~= nil then
		morphologie =  f.args["morphologie"]
	end

	--action: 1 ou plusieurs
	listIri = linkedwiki.explode(";",objWikidata:getValue(wdt .. 'P3310'))
	local ObjAction = nil
	local NomAction = {}
	local NomStringAction = ""
    for i, iri in ipairs(listIri) do
        ObjAction = linkedwiki.new(iri, idConfigWikidata, taglang)
        NomAction[i] = ObjAction:getString(rdfs .. 'label',taglang)
        if  NomAction[i] == nil or NomAction[i] == ''  then -- isempty(NomAction) does not exist
  			NomAction[i] = ObjAction:getString(rdfs .. 'label','en')
  			NomStringAction = NomStringAction .. "\n* " .. NomAction[i] ..' [' .. iri .. " traduire] "
  		else
  			NomStringAction = NomStringAction .. '\n* [[' .. NomAction[i] ..']] '
		end
        --mw.log("logme:" ..  i .. iri .. " - " .. " - " .. NomAction[i])
    end	

	-- antagoniste 1 ou plusieurs A FAIRE!!!
	--local ObjAntagonist = linkedwiki.new(objWikidata:getValue(wdt .. 'P2329'), idConfigWikidata, taglang)
	--local NomAntagonist= ObjAntagonist:getString(rdfs .. 'label',taglang)		
	listIri = linkedwiki.explode(";",objWikidata:getValue(wdt .. 'P2329'))
	local ObjAntagonist = nil
	local NomAntagonist = {}
	local NomStringAntagonist = ""
    for i, iri in ipairs(listIri) do
        ObjAntagonist = linkedwiki.new(iri, idConfigWikidata, taglang)
        NomAntagonist[i] = ObjAntagonist:getString(rdfs .. 'label',taglang)
        if  NomAntagonist[i] == nil or NomAntagonist[i] == ''  then -- isempty(NomAntagonist) does not exist
  			NomAntagonist[i] = ObjAntagonist:getString(rdfs .. 'label','en')
  			NomStringAntagonist = NomStringAntagonist .. "\n* " .. NomAntagonist[i] ..' [' .. iri .. " traduire] "
  		else
  			NomStringAntagonist = NomStringAntagonist .. '\n* [[' .. NomAntagonist[i] ..']] '
		end
        --mw.log("logme:" ..  i .. iri .. " - " .. " - " .. NomAntagonist[i])
    end	
    
    -- Artere 1 ou plusieurs
	--local ObjArtere = linkedwiki.new(objWikidata:getValue(wdt .. 'P2286'), idConfigWikidata, taglang)
	--local NomArtere = ObjArtere:getString(rdfs .. 'label',taglang)	
	listIri = linkedwiki.explode(";",objWikidata:getValue(wdt .. 'P2286'))
	local ObjArtere = nil
	local NomArtere = {}
	local NomStringArtere = ""
    for i, iri in ipairs(listIri) do
        ObjArtere = linkedwiki.new(iri, idConfigWikidata, taglang)
        NomArtere[i] = ObjArtere:getString(rdfs .. 'label',taglang)
        if  NomArtere[i] == nil or NomArtere[i] == ''  then 
  			NomArtere[i] = ObjArtere:getString(rdfs .. 'label','en')
  			NomStringArtere = NomStringArtere .. "\n* " .. NomArtere[i] ..' [' .. iri .. " traduire] "
  		else
  			NomStringArtere = NomStringArtere .. '\n* [[' .. NomArtere[i] ..']] '
		end
        --mw.log("logme:" ..  i .. iri .. " - " .. " - " .. NomArtere[i])
    end	    
    
    -- nerf
	--local objnerf = linkedwiki.new(objWikidata:getValue(wdt .. 'P3189'), idConfigWikidata, taglang) 
	--local nerfnom= objnerf:getString(rdfs .. 'label',taglang)
	listIri = linkedwiki.explode(";",objWikidata:getValue(wdt .. 'P3189'))
	local ObjNerf = nil
	local NomNerf = {}
	local NomStringNerf = ""
    for i, iri in ipairs(listIri) do
        ObjNerf = linkedwiki.new(iri, idConfigWikidata, taglang)
        NomNerf[i] = ObjNerf:getString(rdfs .. 'label',taglang)
        if  NomNerf[i] == nil or NomNerf[i] == ''  then 
  			NomNerf[i] = ObjNerf:getString(rdfs .. 'label','en')
  			NomStringNerf = NomStringNerf .. "\n* " .. NomNerf[i] ..' [' .. iri .. " traduire] "
  		else
  			NomStringNerf = NomStringNerf .. '\n* [[' .. NomNerf[i] ..']] '
		end
        --mw.log("logme:" ..  i .. iri .. " - " .. " - " .. NomNerf[i])
    end	   
    
	-- agonistes  manuel seulement pas de code wikidata
	local agonistes = ""
	if  f.args["agonistes"] ~= nil then
		agonistes =  f.args["agonistes"]
	end
	
	--racines
	local racines = ""
	if  f.args["racines"] ~= nil then
		agonistes =  f.args["racines"]
	end	
	
	--racine principale
	local racine = ""
	if  f.args["racine"] ~= nil then
		racine =  f.args["racine"]
	end
	
	
	-- REFERENCES
	-- Anglais
	local ObjAnglais = linkedwiki.new(iriWikidata, idConfigWikidata, 'en')
	local NomAnglais = ObjAnglais:getString(rdfs .. 'label','en')
	-- Latin
	local ObjLatin = linkedwiki.new(objWikidata:getValue(wdt .. 'P3982'), idConfigWikidata, taglang)
	local NomLatin = ObjLatin['subject'] 	
	-- FMA
	local ObjFMA  = objWikidata:getValue(wdt .. 'P1402')
	-- TA
	local ObjTA  = objWikidata:getValue(wdt .. 'P1323')
	-- Britanica
	local ObjBritanica  = objWikidata:getValue(wdt .. 'P1417')
	-- ObjUBERON
	local ObjUBERON  = objWikidata:getValue(wdt .. 'P1554')
	-- MESH ID P486
	local ObjMESHid  = objWikidata:getValue(wdt .. 'P486')
	-- MESH Code P672
	local ObjMESHcode  = objWikidata:getValue(wdt .. 'P672')
	-- common category with images P373   -- il y a aussi un Commons gallery P935 pour la page dediee par la categ
	local ObjCommonCat  = objWikidata:getValue(wdt .. 'P373')
	
	-- lifesciencedb 3D
	local lifesciencedb = ""
	if  f.args["lifesciencedb"] ~= nil then
		lifesciencedb =  f.args["lifesciencedb"]
	end

	-- definition des locals pour les os	
	local ObjMusclesList = nil
	local NomMusclesList = {}
	local NomStringMusclesList = ""
	local ObjMusclesTermList = nil
	local NomMusclesTermList = {}
	local NomStringMusclesTermList = ""
	local ObjOsList = nil
	local NomOsList = {}
	local NomStringOsList = ""		
	if NomSubclass == "os" then
		--  muscle insertion P3490 - avoir le label fr
		listIri = linkedwiki.explode(";",objWikidata:getValue(wdt .. 'P3490'))

	    for i, iri in ipairs(listIri) do
	        ObjMusclesList = linkedwiki.new(iri, idConfigWikidata, taglang)
	        NomMusclesList[i] = ObjMusclesList:getString(rdfs .. 'label',taglang)
	        if  NomMusclesList[i] == nil or NomMusclesList[i] == ''  then 
	  			NomMusclesList[i] = ObjMusclesList:getString(rdfs .. 'label','en')
	  			NomStringMusclesList = NomStringMusclesList .. "\n* " .. NomMusclesList[i] ..' [' .. iri .. " traduire] "
	  		else
	  			NomStringMusclesList = NomStringMusclesList .. '\n* [[OrigineMuscle::' .. NomMusclesList[i] ..']] '
			end
	        --mw.log("logme:" ..  i .. iri .. " - " .. " - " .. NomMusclesList[i])
	    end	   		
		
		--Muscle terminaisons P3491 
		listIri = linkedwiki.explode(";",objWikidata:getValue(wdt .. 'P3491'))

	    for i, iri in ipairs(listIri) do
	        ObjMusclesTermList = linkedwiki.new(iri, idConfigWikidata, taglang)
	        NomMusclesTermList[i] = ObjMusclesTermList:getString(rdfs .. 'label',taglang)
	        if  NomMusclesTermList[i] == nil or NomMusclesTermList[i] == ''  then 
	  			NomMusclesTermList[i] = ObjMusclesTermList:getString(rdfs .. 'label','en')
	  			NomStringMusclesTermList = NomStringMusclesTermList .. "\n* " .. NomMusclesTermList[i] ..' [' .. iri .. " traduire] "
	  		else
	  			NomStringMusclesTermList = NomStringMusclesTermList .. '\n* [[TerminaisonMuscle::' .. NomMusclesTermList[i] ..']] '
			end
	        --mw.log("logme:" ..  i .. iri .. " - " .. " - " .. NomMusclesList[i])
	    end	  		
		
		-- connect with P2789 - avoir le label fr
		listIri = linkedwiki.explode(";",objWikidata:getValue(wdt .. 'P2789'))

	    for i, iri in ipairs(listIri) do
	        ObjOsList = linkedwiki.new(iri, idConfigWikidata, taglang)
	        NomOsList[i] = ObjOsList:getString(rdfs .. 'label',taglang)
	        if  NomOsList[i] == nil or NomOsList[i] == ''  then 
	  			NomOsList[i] = ObjOsList:getString(rdfs .. 'label','en')
	  			NomStringOsList = NomStringOsList .. "\n* " .. NomOsList[i] ..' [' .. iri .. " traduire] "
	  		else
	  			NomStringOsList = NomStringOsList .. '\n* [[' .. NomOsList[i] ..']] '
			end
	        --mw.log("logme:" ..  i .. iri .. " - " .. " - " .. NomOsList[i])
	    end	   
    end
    	
	-- type_articulaire
	-- morphologieArt
	-- connecte_os
	local listeOsArtic=""
	local listTypeArtic=""
	local listMorphArtic=""
	local listLigaments=""
	local listmouvements=""
	if NomSubclass == "articulation" then
		if  f.args["connecte_os"] ~= nil then
			local objOs= linkedwiki.explode(",", f.args["connecte_os"])
			for i, iri in ipairs(objOs) do
	  			listeOsArtic = listeOsArtic .. '\n* [[articule avec::' .. iri ..']] '
  			end
		end
		if  f.args["type_articulaire"] ~= nil then
			local objOs= linkedwiki.explode(",", f.args["type_articulaire"])
			for i, iri in ipairs(objOs) do
	  			listTypeArtic = listTypeArtic .. '\n* [[type articulaire::' .. iri ..']] '
  			end
		end
		if  f.args["morphologieArt"] ~= nil then
			local objOs= linkedwiki.explode(",", f.args["morphologieArt"])
			for i, iri in ipairs(objOs) do
	  			listMorphArtic = listMorphArtic .. '\n* [[Morphologie articulaire::' .. iri ..']] '
  			end
		end		
		if  f.args["ligaments"] ~= nil then
			local objOs= linkedwiki.explode(",", f.args["ligaments"])
			for i, iri in ipairs(objOs) do
	  			listLigaments = listLigaments .. '\n* [[ligament articulaire::' .. iri ..']] '
  			end
		end		
		if  f.args["mouvementsArt"] ~= nil then
			local objOs= linkedwiki.explode(",", f.args["mouvementsArt"])
			for i, iri in ipairs(objOs) do
	  			listmouvements = listmouvements .. '\n* [[mouvement articulaire::' .. iri ..']] '
  			end
		end			
		
	end
	
	

	-- creation de la boite avec capiunto
    local infobox = capiunto.create({
        bodyStyle = 'width : 50px',
        bodyClass = 'BoiteAnatomie',
        title = 'Structure Anatomique',
        top = objWikidata:checkString(rdfs .. 'label', f.args.Titre,taglang),
        topStyle = 'background:#FFD200;height:50px;font-size: 25px;vertical-align:middle'
    })	
    infobox:addImage(objWikidata:checkImage(wdt .. 'P18',image:gsub('http:','https:'), 200), "", "Image")
    infobox:addHeader('Classification')
    infobox:addRow('Classe', objWikidata:checkString(wdt .. 'P279',NomSubclass, taglang) )
    if  NomSituation ~= nil and NomSituation ~= '' then    
    infobox:addRow('Situation', objWikidata:checkString(wdt .. 'P361',NomSituation, taglang) )
	end
	if  NomSituationAnat ~= nil and NomSituationAnat ~= '' then    
    infobox:addRow('Partie', objWikidata:checkString(wdt .. 'P927',NomSituationAnat, taglang) )
    end
    if NbChefs >1 then
    	infobox:addRow('Chefs (' .. NbChefs ..')',  NomStringHasPart )
    end
    if morphologie ~= "" then
    	infobox:addRow('Morphologie', morphologie)
	end
	
    -- informations anatomiques MUSCLE
    if NomSubclass == "muscle" then
	    infobox:addHeader('Anatomie')
	    if NomStringHasPartOri ~= "" then
	    	infobox:addRow('Origine', NomStringHasPartOri)
    	end
    	if NomStringHasPartTerm ~= "" then
    		infobox:addRow('Terminaison', NomStringHasPartTerm)
		end
		if NomStringAction~= "" then
	    	infobox:addRow('Action', NomStringAction)
		end
		if agonistes ~= "" then
	    	infobox:addRow('Agoniste', agonistes )
		end
		if NomStringAntagonist ~= "" then
	    	infobox:addRow('Antagoniste', NomStringAntagonist )
		end
		if NomStringArtere  ~= "" then
	    	infobox:addRow('Artère', NomStringArtere )
	    end
	    if NomStringNerf ~= "" then
	    	infobox:addRow('Nerf', NomStringNerf )
		end
		if racines ~= "" then
	    	infobox:addRow('Racines', racines)
		end
		if racine ~= "" then
	    	infobox:addRow('Racine principale', racine)
	    end
	end


    --informations anatomiques ARTERE
    if NomSubclass == "artère" then
		infobox:addHeader('Anatomie')
	    -- Source
	    infobox:addRow('Source', "à faire")
	    -- Branches
	    infobox:addRow('Branches', "à faire")
	    -- Veine
	    infobox:addRow('Veine', "à faire")
	    -- Irrigue : (wikidata ou semantic)
	    infobox:addRow('Irrigue', "à faire sémantic")
    end
    
    -- informations anatomiques veine
    if NomSubclass == "veine" then
		infobox:addHeader('Anatomie')
		-- Source
		infobox:addRow('Source', "à faire")
	    -- Drains to (wikidata ou semantic)
	    infobox:addRow('Draine', "à faire")
	    -- artere
	    infobox:addRow('Artère', "à faire")
    end
    
    -- informations anatomiques os
    if NomSubclass == "os" then
		infobox:addHeader('Anatomie')
		-- articulations
		--infobox:addRow('Articulations', "à faire")
		-- liste de mucles attachés
		if NomStringMusclesList ~= nil and NomStringMusclesList ~= ''  then
			infobox:addRow('Origine musculaire', NomStringMusclesList)
		end
		
		if NomStringMusclesTermList ~= nil and NomStringMusclesTermList ~= ''  then
			infobox:addRow('Terminaison musculaire', NomStringMusclesTermList)
		end		
		-- Os en relations
		if NomStringOsList ~= nil and NomStringOsList ~= ''  then
			infobox:addRow('Os en relation', NomStringOsList)
		end
		-- processus
		--infobox:addRow('Processus', "à faire")
    end    
    
    -- information classe processus osseux la classe doit être ajoutée manuellement
    if NomSubclass == "processus osseux" then
		infobox:addHeader('Anatomie')
		-- os associé
		infobox:addRow('Os', "à faire")
		-- structures muscle. ligament dessus
		infobox:addRow('Insertion de', "à faire")
    end    
    
    -- informations anatomiques articulation
    if NomSubclass == "articulation" then
		infobox:addHeader('Anatomie')
		-- os
		if listeOsArtic ~="" then
			infobox:addRow('Os', listeOsArtic)
		end
		if listTypeArtic ~="" then
			infobox:addRow('Type articulaire', listTypeArtic)
		end
		if listMorphArtic ~="" then
			infobox:addRow('Morphologie articulaire', listMorphArtic)
		end
		if listLigaments ~="" then
			infobox:addRow('Ligaments', listLigaments)
		end
		if listmouvements ~="" then
			infobox:addRow('Mouvements', listmouvements)
		end
		-- muscles

		-- degres de libertés ?


    end    
      
    -- informations anatomiques  ligaments  ? 
    --TODO
    
    -- region anatomique, ex épaule , abdomene
    --TODO
    
    -- informations anatomiques autres structures ??
    --TODO
    
    -- références externes anatomiques d'interet
    infobox:addHeader('Références')
    if NomAliases ~= '' then
    	infobox:addRow('Alias', NomAliases )
	end
	infobox:addRow('Anglais', objWikidata:checkString(wdt .. 'P2286',NomAnglais, 'en') )
    infobox:addRow('Latin', objWikidata:checkString(wdt .. 'P3982',NomLatin, taglang) )
	if  ObjFMA ~= nil and ObjFMA ~= '' then    
    	infobox:addRow('FMA', '[http://xiphoid.biostr.washington.edu/fma/fmabrowser-hierarchy.html?fmaid=' .. ObjFMA .. " ".. ObjFMA  ..']' )
	end
	if  ObjTA ~= nil and ObjTA ~= '' then
		infobox:addRow('TA', '[http://tools.wmflabs.org/wikidata-externalid-url/?p=1323&url_prefix=http:%2F%2Fwww.unifr.ch%2Fifaa%2FPublic%2FEntryPage%2FTA98%20Tree%2FEntity%20TA98%20EN%2F&url_suffix=%20Entity%20TA98%20EN.htm&id='.. ObjTA ..  " ".. ObjTA  ..']' )
	end
	if  ObjBritanica ~= nil and ObjBritanica ~= '' then
		infobox:addRow('Britanica', '[https://www.britannica.com/science/' .. ObjBritanica .. " ".. ObjBritanica  ..']' )
	end
	if  ObjUBERON ~= nil and ObjUBERON ~= '' then	
		infobox:addRow('UBERON ID', '[http://purl.obolibrary.org/obo/UBERON_' .. ObjUBERON .. " ".. ObjUBERON  ..']' )
	end
	if  ObjMESHid ~= nil and ObjMESHid ~= '' then
		infobox:addRow('MeSH ID', '[https://meshb.nlm.nih.gov/#/record/ui?ui=' .. ObjMESHid .. " ".. ObjMESHid  ..']' )
	end
	if  ObjMESHcode ~= nil and ObjMESHcode ~= '' then
		infobox:addRow('MeSH Code', '[https://id.nlm.nih.gov/mesh/' .. ObjMESHcode .. " ".. ObjMESHcode  ..']' )
	end
	if lifesciencedb ~= nil and lifesciencedb~= "" then
		infobox:addRow('[http://lifesciencedb.jp/bp3d/ model 3D]', lifesciencedb )
	end
	if ObjCommonCat ~= "" then 
		infobox:addRow('Images', 'https://commons.wikimedia.org/wiki/Category:'.. ObjCommonCat:gsub(' ','_'))
	else
		infobox:addRow('Images', '[https://commons.wikimedia.org/wiki/Category:Human_muscles_by_body_part Chercher]')
	end
    infobox:addRow('Source Wikidata', linkWikidata)

  return infobox
end

return p
-- pour test debug    
-- 	infobox:addWikitext("hum" .. mw.dumpObject(listIri))
-- 	infobox:addWikitext("hum" .. mw.dumpObject(ObjHasPart))
-- 	 infobox:addWikitext( NomHasPart)
--infobox:addWikitext("hum" .. mw.dumpObject(objWikidata:getString(rdfs .. "label","fr")))
--infobox:addWikitext("hum:" ..  taglang )

--exemples
--    infobox:addWikitext( objWikidata:checkImage(wdt .. 'P18',image, 200) )    
--	  infobox:addImage("[[File:" .. image:gsub('http:','https:') .. "|200px]]", "", "Image")
--    infobox:addRow('Nom de naissance', objWikidata:checkString(wdt .. "P1477", f.args['Nom de naissance']))
--    infobox:addRow('Lieu de naissance', objWikidataLieuNaissance:checkString(rdfs .. "label", f.args['Lieu de naissance']))
--    infobox:addRow('Naissance', objWikidata:checkDate(wdt .. "P569", f.args['Date de naissance'], dateFormat))
--    infobox:addRow('Lieu de décès', objWikidataLieuDeces:checkString(rdfs .. "label", f.args['Lieu de décès']))
--    infobox:addRow('Date de décès', objWikidata:checkDate(wdt .. "P570", f.args['Date de décès'], dateFormat))
--    infobox:addRow('Élection au pontificat', f.args['Election au pontificat'])
--    infobox:addRow('Intronisation', objPapeFonction:checkDate(pq .. "P580", f.args['Intronisation'], dateFormat))
--    infobox:addRow('Fin du pontificat', objPapeFonction:checkDate(pq .. "P582", f.args['Fin du pontificat'], dateFormat))