. . . . "Returns all positions held by a given person, with the title, the organization, the department or group, and the start and end years. A position with no end year is one that is still held." . . . "Get positions for person" . . "prefix rdfs: \nprefix dct: \nprefix np: \nprefix npa: \nprefix npx: \nprefix wd: \nprefix vivo: \n\nselect ?position ?position_label ?organization ?organization_label ?unit ?startYear ?endYear ?np (\"^\" as ?np_label) where {\n graph npa:graph {\n ?np npa:hasValidSignatureForPublicKeyHash ?pubkey .\n filter not exists { ?npx npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?pubkey . }\n filter not exists { ?np npx:hasNanopubType npx:ExampleNanopub . }\n ?np np:hasAssertion ?a .\n ?np np:hasPublicationInfo ?pi .\n ?np npx:introduces ?position .\n }\n graph ?a {\n ?position a vivo:Position .\n ?_person_iri wd:P39 ?position .\n optional { ?position rdfs:label ?position_label . }\n optional { ?position wd:P108 ?organization . }\n optional { ?position dct:description ?unit . }\n optional { ?position wd:P580 ?startYear . }\n optional { ?position wd:P582 ?endYear . }\n }\n # The organization label lives in pubinfo, not the assertion. OPTIONAL wraps\n # GRAPH and not the reverse: `GRAPH ?x { OPTIONAL {...} }` drops the whole row.\n optional { graph ?pi { ?organization rdfs:label ?organization_label . } }\n} order by desc(?startYear) desc(?endYear)" . . "Tobias Kuhn" . "2026-08-28T17:32:25Z"^^ . . . . "Get positions for person" . . . . . . "RSA" . "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB" . "Sd1OlE2e8POmXw0ODES1rWoN33/oNP0mcI/NoofoSD9b/F6/Xe456ByRP7mVv+VoWA+4AW2fHL/taohCZjbz7q2SF/xFnqTbQXssP7dMcZp13LtkLuNnX9QfeECioT2TM2F65zu9Aq+pHBXbkAGDK0ZOjKH6zxKU1UJCLr1QkKo=" . . .