query.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. //ATTENZIONE: ALCUNE QUERY HANNO LO STESSO NOME! CAMBIARE I NOMI
  2. prefixes = "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \
  3. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \
  4. PREFIX crm: <http://www.cidoc-crm.org/cidoc-crm/> \
  5. PREFIX owl: <http://www.w3.org/2002/07/owl#> \
  6. PREFIX schema: <http://schema.org/> \
  7. PREFIX foaf: <http://xmlns.com/foaf/0.1/> \
  8. PREFIX person: <http://www.w3.org/ns/person#>"
  9. //QUERY DA INTERFACCIA DI RICERCA
  10. //search_graph è il grafo in cui effettuare la ricerca e selezionato attraverso il menu a tendina dell'interfaccia di ricerca
  11. //search_name è la stringa passata dall'input nell'interfaccia di ricerca
  12. queryMMO = prefixes + " SELECT DISTINCT "+ search_graph +" AS ?graph ?subject ?label ?object\
  13. WHERE {GRAPH "+ search_graph +" { ?subject ?property ?object }\
  14. ?subject rdf:type crm:E22_Man-Made_Object ;\
  15. rdfs:label ?label ;\
  16. ?property ?object .\
  17. ?object bif:contains \"\' "+ search_name + " \'\" .\
  18. }"
  19. queryInfObj = prefixes + " SELECT DISTINCT "+ search_graph +" AS ?graph (SAMPLE(?type) AS ?typeName) ?subject ?label ?object \
  20. WHERE {GRAPH "+ search_graph +" { ?subject ?property ?object }\
  21. ?subject rdf:type crm:E73_Information_Object ;\
  22. rdfs:label ?label ;\
  23. ?property ?object .\
  24. ?object bif:contains \"\' "+ search_name + " \'\" .\
  25. OPTIONAL {?subject crm:P2_has_type ?entity_type . \
  26. ?entity_type rdfs:label ?type .}\
  27. } \
  28. GROUP BY ?subject ?object ?label "+ gg + ""
  29. queryPerson = prefixes + " SELECT DISTINCT "+ search_graph +" AS ?graph ?subject ?label \
  30. WHERE {GRAPH "+ search_graph +" { ?subject rdfs:label ?label ;\
  31. rdf:type crm:E21_Person .\
  32. ?label bif:contains \"\' "+ search_name + " \'\" .}\
  33. }"
  34. queryPlace = prefixes + " SELECT DISTINCT "+ search_graph +" AS ?graph ?subject ?label \
  35. WHERE {GRAPH "+ search_graph +" { ?subject rdfs:label ?label ;\
  36. rdf:type crm:E53_Place .\
  37. ?label bif:contains \"\' "+ search_name + " \'\" .}\
  38. }"
  39. //QUERY SCHEDA LETTERA
  40. //thisUrlParams.link è passato dalla url della pagina ed è il link della risorsa
  41. query1 = prefixes + " SELECT DISTINCT ?mittente ?destinatario ?data_partenza ?data_arrivo ?luogo_partenza ?luogo_arrivo \
  42. WHERE {?subject crm:P128_carries <" + thisUrlParams.link + "> \
  43. GRAPH <http://dev.restore.ovi.cnr.it:8890/ovi/datini> {?subject crm:P25i_moved_by ?mov_ev .} \
  44. ?send rdfs:subClassOf ?mov_ev ; \
  45. rdf:type crm:EL2_Send_Letter ; \
  46. crm:P4_has_time-span ?time_spanA; \
  47. crm:P27_moved_from ?placeA; \
  48. crm:P01_has_domain ?sender . \
  49. \
  50. ?time_spanA rdfs:label ?data_partenza . \
  51. ?placeA rdfs:label ?luogo_partenza . \
  52. ?sender crm:P02_has_range ?mittente . \
  53. \
  54. ?receive rdfs:subClassOf ?mov_ev; \
  55. rdf:type crm:EL3_Receive_Letter ; \
  56. crm:P4_has_time-span ?time_spanB; \
  57. crm:P26_moved_to ?placeB; \
  58. crm:P01_has_domain ?receiver . \
  59. \
  60. ?time_spanB rdfs:label ?data_arrivo . \
  61. ?placeB rdfs:label ?luogo_arrivo . \
  62. ?receiver crm:P02_has_range ?destinatario . \
  63. }"
  64. query2 = prefixes + " SELECT DISTINCT ?uriSender ?mittente ?uriReceiver ?destinatario ?timeSpanSend ?timeSpanReceive ?placeSend ?placeReceive ?identifier ?material ?dimension ?currentLocation \
  65. WHERE {?subject crm:P128_carries <" + thisUrlParams.link + "> . \
  66. GRAPH <http://dev.restore.ovi.cnr.it:8890/aspo/datini> {?subject crm:P25i_moved_by ?mov_ev .} \
  67. ?send rdfs:subClassOf ?mov_ev ; \
  68. rdf:type crm:EL2_Send_Letter . \
  69. ?receive rdfs:subClassOf ?mov_ev ; \
  70. rdf:type crm:EL3_Receive_Letter . \
  71. \
  72. OPTIONAL {?subject crm:P54_has_current_permanent_location ?uriCurrentLocation . \
  73. ?uriCurrentLocation rdfs:label ?currentLocation . } \
  74. OPTIONAL {?subject crm:P45_consist_of ?uriMaterial . \
  75. ?uriMaterial rdfs:label ?material . } \
  76. OPTIONAL {?subject crm:P43_has_dimension ?uriDimension . \
  77. ?uriDimension rdfs:label ?dimension . } \
  78. OPTIONAL {?subject crm:P1_is_identified_by ?uriIdentifier . \
  79. ?uriIdentifier rdfs:label ?identifier . } \
  80. \
  81. OPTIONAL {?send crm:P4_has_time-span ?time_spanS . \
  82. ?time_spanS rdfs:label ?timeSpanSend } \
  83. OPTIONAL {?receive crm:P4_has_time-span ?time_spanR . \
  84. ?time_spanR rdfs:label ?timeSpanReceive } \
  85. \
  86. OPTIONAL {?send crm:P27_moved_from ?placeS . \
  87. ?placeS rdfs:label ?placeSend } \
  88. OPTIONAL {?receive crm:P26_moved_to ?placeR . \
  89. ?placeR rdfs:label ?placeReceive } \
  90. \
  91. OPTIONAL {?send crm:P01_has_domain ?pcS . \
  92. ?pcS crm:P02_has_range ?uriSender . \
  93. ?uriSender rdfs:label ?mittente } \
  94. \
  95. OPTIONAL {?receive crm:P01_has_domain ?pcR . \
  96. ?pcR crm:P02_has_range ?uriReceiver . \
  97. ?uriReceiver rdfs:label ?destinatario } \
  98. }"
  99. querySegnatura = prefixes + "SELECT DISTINCT ?segnatura_OVI \
  100. WHERE {?subject crm:P128_carries <" + thisUrlParams.link + ">; \
  101. crm:P1_is_identified_by ?segnatura_ASPO . \
  102. ?segnatura_ASPO crm:P139_has_alternative_form ?segnatura . \
  103. ?segnatura crm:P2_has_type ?tipo_segnatura; \
  104. rdfs:label ?segnatura_OVI . \
  105. ?tipo_segnatura rdfs:label \"Segnatura OVI\"}"
  106. queryAreaLinguistica = prefixes + " SELECT DISTINCT ?lingua ?area_linguistica \
  107. WHERE {<" + thisUrlParams.link + "> crm:P72_has_language ?language . \
  108. ?language crm:P3_has_note ?area ; \
  109. rdfs:label ?lingua . \
  110. ?area rdfs:label ?area_linguistica \
  111. }"
  112. queryDescrizione = prefixes + " SELECT DISTINCT ?descrizione \
  113. WHERE {<" + thisUrlParams.link + "> crm:P3_has_note ?description . \
  114. ?description rdfs:label ?descrizione \
  115. }"
  116. queryTipo = prefixes + " SELECT DISTINCT ?tipologia \
  117. WHERE {<" + thisUrlParams.link + "> crm:P2_has_type ?type . \
  118. ?type rdf:type crm:E55_Type; \
  119. rdfs:label ?tipologia . \
  120. }"
  121. querySiglaOVI = prefixes + " SELECT DISTINCT ?sigla_OVI \
  122. WHERE {<" + thisUrlParams.link + "> crm:P1_is_identified_by ?id . \
  123. ?id rdf:type crm:E42_Identifier; \
  124. crm:P2_has_type ?type ; \
  125. rdfs:label ?sigla_OVI . \
  126. ?type rdfs:label 'Sigla OVI'. \
  127. }"
  128. queryTitolo = prefixes + " SELECT DISTINCT ?titolo \
  129. WHERE {<" + thisUrlParams.link + "> crm:P1_is_identified_by ?title . \
  130. ?title rdf:type crm:E35_Title; \
  131. rdfs:label ?titolo . \
  132. }"
  133. queryTestoLemmatizzato = prefixes + " SELECT DISTINCT ?testo_lemmatizzato \
  134. WHERE {<" + thisUrlParams.link + "> crm:P190_has_symbolic_content ?testo_lemmatizzato . \
  135. }"
  136. queryEdizione = prefixes + " SELECT DISTINCT ?edizione ?edizione_abbreviata \
  137. WHERE {?edition crm:P70_documents <" + thisUrlParams.link + "> ; \
  138. crm:P1_is_identified_by ?edition_id . \
  139. ?edition_id rdfs:label ?edizione; \
  140. crm:P139_has_alternative_form ?ed_abbr . \
  141. ?ed_abbr rdfs:label ?edizione_abbreviata \
  142. }"
  143. queryRaccolta = prefixes + " SELECT DISTINCT ?raccolta \
  144. WHERE {?racc crm:P148_has_component <" + thisUrlParams.link + "> ; \
  145. crm:P2_has_type ?racc_type ; \
  146. rdfs:label ?raccolta . \
  147. ?racc_type rdfs:label 'Raccolta'. \
  148. }"
  149. queryToponimi = prefixes + "SELECT DISTINCT ?link_toponimo ?toponimo \
  150. WHERE {<" + thisUrlParams.link + "> crm:P67_refers_to ?link_toponimo . \
  151. ?link_toponimo rdfs:label ?toponimo ; \
  152. crm:P2_has_type 'Toponimo' . \
  153. }"
  154. queryAntroponimi = prefixes + "SELECT DISTINCT * \
  155. WHERE {<" + thisUrlParams.link + "> crm:P67_refers_to ?link_antroponimo . \
  156. ?link_antroponimo rdfs:label ?antroponimo; \
  157. crm:P2_has_type 'Antroponimo'}"
  158. //QUERY SCHEDA NLP
  159. //thisUrlParams.link è passato dalla url della pagina ed è il link della risorsa
  160. queryTesto = prefixes + " SELECT DISTINCT ?titolo ?testo WHERE {?subject crm:P128_carries <" + thisUrlParams.link + ">;\
  161. crm:P128_carries ?object .\
  162. ?object rdf:type crm:E33_Linguistic_Object;\
  163. crm:P190_has_symbolic_content ?testo;\
  164. rdfs:label ?titolo .}"
  165. //QUERY SCHEDA LUOGO
  166. //thisUrlParams.link è passato dalla url della pagina ed è il link della risorsa
  167. query = prefixes + " SELECT DISTINCT ?graph ?name_place ?coordinates {\
  168. GRAPH ?graph {<" + thisUrlParams.link + "> crm:P168_place_is_defined_by ?coordinates;\
  169. rdfs:label ?name_place .\
  170. }\
  171. }"
  172. queryRiferimenti = prefixes + " SELECT DISTINCT ?references {\
  173. <" + thisUrlParams.link + "> owl:sameAs ?references\
  174. }"
  175. queryToponimi = prefixes + " SELECT DISTINCT ?toponimi {\
  176. <" + thisUrlParams.link + "> crm:P1_is_identified_by ?uri_toponym .\
  177. ?uri_toponym rdfs:label ?toponimi\
  178. }"
  179. queryRicezione = prefixes + " SELECT DISTINCT ?object ?label {\
  180. <" + thisUrlParams.link + "> owl:sameAs ?place .\
  181. ?event_to crm:P26_moved_to ?place ;\
  182. rdf:type crm:EL3_Receive_Letter ;\
  183. rdfs:subClassOf ?event .\
  184. ?object crm:P25i_moved_by ?event ; \
  185. rdfs:label ?label .\
  186. } "
  187. queryInvio = prefixes + " SELECT DISTINCT ?object ?label {\
  188. <" + thisUrlParams.link + "> owl:sameAs ?place .\
  189. ?event_to crm:P27_moved_from ?place ;\
  190. rdf:type crm:EL2_Send_Letter ;\
  191. rdfs:subClassOf ?event .\
  192. ?object crm:P25i_moved_by ?event ; \
  193. rdfs:label ?label .\
  194. }"
  195. queryCitazione = prefixes + " SELECT DISTINCT ?object ?label\
  196. {<" + thisUrlParams.link + "> crm:P1_is_identified_by ?toponym .\
  197. ?object crm:P67_refers_to ?toponym ;\
  198. rdfs:label ?label\
  199. }"
  200. queryPersone = prefixes + " SELECT DISTINCT ?range ?label \
  201. WHERE{ \
  202. {?place owl:sameAs <" + thisUrlParams.link + "> .\
  203. ?event_to crm:P26_moved_to ?place ;\
  204. rdf:type crm:EL3_Receive_Letter ;\
  205. crm:P01_has_domain ?domain .\
  206. ?domain crm:P02_has_range ?range .\
  207. ?range rdfs:label ?label .\
  208. } UNION {\
  209. ?place owl:sameAs <" + thisUrlParams.link + "> .\
  210. ?event_to crm:P27_moved_from ?place ;\
  211. rdf:type crm:EL2_Send_Letter ;\
  212. crm:P01_has_domain ?domain .\
  213. ?domain crm:P02_has_range ?range .\
  214. ?range rdfs:label ?label .\
  215. }\
  216. }"
  217. queryCount = prefixes + " SELECT ?place ?label COUNT(?label) AS ?Count \
  218. WHERE{ \
  219. ?place_to owl:sameAs <" + thisUrlParams.link + "> . \
  220. ?event_to crm:P26_moved_to ?place_to ; \
  221. rdf:type crm:EL3_Receive_Letter ; \
  222. rdfs:subClassOf ?event . \
  223. ?event_from rdfs:subClassOf ?event ; \
  224. rdf:type crm:EL2_Send_Letter ; \
  225. crm:P27_moved_from ?place . \
  226. ?place rdfs:label ?label \
  227. } \
  228. ORDER BY DESC (?Count)"
  229. queryCount2 = prefixes + " SELECT ?place ?label COUNT(?label) AS ?Count \
  230. WHERE{ \
  231. ?place_from owl:sameAs <" + thisUrlParams.link + "> . \
  232. ?event_from crm:P27_moved_from ?place_from ; \
  233. rdf:type crm:EL2_Send_Letter ; \
  234. rdfs:subClassOf ?event . \
  235. ?event_to rdfs:subClassOf ?event ; \
  236. rdf:type crm:EL2_Send_Letter ; \
  237. crm:P27_moved_from ?place . \
  238. ?place rdfs:label ?label . \
  239. } \
  240. ORDER BY DESC (?Count) "
  241. //QUERY SCHEDA PERSONA
  242. //thisUrlParams.link è passato dalla url della pagina ed è il link della risorsa
  243. query = prefixes + " SELECT DISTINCT ?place ?label ?coordinates \
  244. WHERE { \
  245. {?pc crm:P02_has_range <" + thisUrlParams.link + "> . \
  246. ?event_from crm:P01_has_domain ?pc ; \
  247. rdf:type crm:EL3_Receive_Letter; \
  248. crm:P26_moved_to ?place_from . \
  249. ?place_from rdf:type crm:E53_Place ; \
  250. owl:sameAs ?place . \
  251. ?place rdfs:label ?label ; \
  252. crm:P168_place_is_defined_by ?coordinates . \
  253. } UNION { \
  254. ?pc crm:P02_has_range <" + thisUrlParams.link + "> . \
  255. ?event_from crm:P01_has_domain ?pc ; \
  256. rdf:type crm:EL2_Send_Letter; \
  257. crm:P27_moved_from ?place_from . \
  258. ?place_from rdf:type crm:E53_Place ; \
  259. owl:sameAs ?place . \
  260. ?place rdfs:label ?label ; \
  261. crm:P168_place_is_defined_by ?coordinates . \
  262. } \
  263. }"
  264. queryInfo = prefixes + " SELECT DISTINCT ?graph ?label ?identifier ?name ?givenName ?familyName ?gender ?Birth_Date ?Birth_Place ?Death_Date ?Death_Place ?patronymic ?occupation (group_concat(distinct ?relative1 ;separator=', ') as ?relatives) ?qualification ?group \
  265. WHERE { \
  266. VALUES ?uri {<" + thisUrlParams.link + ">} \
  267. GRAPH ?graph {?uri rdfs:label ?label} \
  268. ?uri foaf:name ?name . \
  269. OPTIONAL {?uri crm:P1_is_identified_by ?id . \
  270. ?id rdfs:label ?identifier } \
  271. OPTIONAL {?uri foaf:givenName ?givenName} \
  272. OPTIONAL {?uri foaf:familyName ?familyName} \
  273. OPTIONAL {?uri foaf:gender ?gender} \
  274. OPTIONAL {?uri person:patronymicName ?patronymic } \
  275. OPTIONAL {?uri schema:hasOccupation ?uriOccupation . \
  276. ?uriOccupation rdf:type schema:Occupation; \
  277. rdfs:label ?occupation } \
  278. OPTIONAL {?uri schema:honorificPrefix ?qualification} \
  279. OPTIONAL {?uri schema:relatedTo ?uriRel1 . \
  280. ?uriRel1 rdfs:label ?relative1} \
  281. OPTIONAL {?uri crm:P100i_died_in ?Death . \
  282. ?Death crm:P4_has_time-span ?Death_TS; \
  283. crm:P7_took_place_at ?Place_D .\
  284. ?Death_TS rdfs:label ?Death_Date . \
  285. ?Place_D rdfs:label ?Death_Place } \
  286. OPTIONAL {?uri crm:P98i_was_born ?Birth . \
  287. ?Birth crm:P4_has_time-span ?Birth_TS; \
  288. crm:P7_took_place_at ?Place_B . \
  289. ?Birth_TS rdfs:label ?Birth_Date . \
  290. ?Place_B rdfs:label ?Birth_Place } \
  291. OPTIONAL {?uri crm:P107i_is_current_or_former_member_of ?uriGroup . \
  292. ?uriGroup rdfs:label ?group } \
  293. } \
  294. GROUP BY ?graph ?label ?identifier ?name ?givenName ?familyName ?gender ?Birth_Date ?Birth_Place ?Death_Date ?Death_Place ?patronymic ?occupation ?qualification ?group "
  295. queryLetters = prefixes + " SELECT DISTINCT ?type ?document_uri ?document_name \
  296. WHERE {?pc crm:P02_has_range <" + thisUrlParams.link + "> . \
  297. ?ev_send crm:P01_has_domain ?pc ; \
  298. rdfs:label ?type ; \
  299. rdfs:subClassOf ?event . \
  300. ?document_uri crm:P25i_moved_by ?event ; \
  301. rdfs:label ?document_name . \
  302. }"
  303. queryNetwork = prefixes + " SELECT DISTINCT ?uri ?label ?uri2 ?label2 \
  304. WHERE { \
  305. {?event rdf:type crm:EL1_Exchange_Letters . \
  306. ?event_to rdfs:subClassOf ?event; \
  307. rdf:type crm:EL2_Send_Letter ; \
  308. crm:P01_has_domain ?pc_to . \
  309. ?pc_to crm:P02_has_range ?uri . \
  310. ?uri rdfs:label ?label . \
  311. ?event_from rdfs:subClassOf ?event; \
  312. rdf:type crm:EL3_Receive_Letter; \
  313. crm:P01_has_domain ?pc_from . \
  314. ?pc_from crm:P02_has_range ?uri2 . \
  315. ?uri2 rdfs:label ?label2 . \
  316. FILTER (?uri = <" + thisUrlParams.link + ">) \
  317. } UNION { \
  318. ?event rdf:type crm:EL1_Exchange_Letters . \
  319. ?event_to rdfs:subClassOf ?event; \
  320. rdf:type crm:EL3_Receive_Letter ; \
  321. crm:P01_has_domain ?pc_from . \
  322. ?pc_from crm:P02_has_range ?uri . \
  323. ?uri rdfs:label ?label . \
  324. ?event_from rdfs:subClassOf ?event; \
  325. rdf:type crm:EL2_Send_Letter; \
  326. crm:P01_has_domain ?pc_to . \
  327. ?pc_to crm:P02_has_range ?uri2 . \
  328. ?uri2 rdfs:label ?label2 . \
  329. FILTER (?uri = <" + thisUrlParams.link + ">) \
  330. } \
  331. } LIMIT 30"
  332. //QUERY SCHEDA OPERA D'ARTE
  333. //thisUrlParams.link è passato dalla url della pagina ed è il link della risorsa
  334. queryInfo = prefixes + " SELECT DISTINCT ?graph ?identifier ?label ?title ?uriType ?type ?uriOwner ?current_owner ?current_location ?subject (group_concat(distinct ?dimension ; separator='<br />') as ?dimensions) (GROUP_CONCAT(DISTINCT CONCAT(?uriMaterial, '; ', ?material) ; SEPARATOR = '<br />') AS ?Materials) ?condition ?note \
  335. WHERE { \
  336. VALUES ?uri {<" + thisUrlParams.link + ">} \
  337. GRAPH ?graph {?uri rdfs:label ?label} \
  338. OPTIONAL {?uri crm:P3_has_note ?note } \
  339. ?uri crm:P128_carries ?Inf_Obj . \
  340. OPTIONAL {?Inf_Obj crm:P1_is_identified_by ?uriTitle . \
  341. ?uriTitle rdf:type crm:E35_Title; \
  342. rdfs:label ?title } \
  343. OPTIONAL {?Inf_Obj crm:P2_has_type ?uriType . \
  344. ?uriType rdfs:label ?type } \
  345. OPTIONAL {?uri crm:P43_has_dimension ?uriDimension . \
  346. ?uriDimension rdfs:label ?dimension } \
  347. OPTIONAL {?uri crm:P1_is_identified_by ?uriIdentifier . \
  348. ?uriIdentifier rdfs:label ?identifier } \
  349. OPTIONAL {?uri crm:P45_consists_of ?uriMaterial . \
  350. ?uriMaterial rdfs:label ?material } \
  351. OPTIONAL {?uri crm:P44_has_condition ?uriCondition . \
  352. ?uriCondition crm:P2_has_type ?condition} \
  353. OPTIONAL {?uri crm:P54_has_current_permanent_location ?current_location } \
  354. OPTIONAL {?uri crm:P62_depicts ?uriSubject . \
  355. ?uriSubject rdfs:label ?subject; \
  356. crm:P2_has_type 'Identificazione Iconografica' .} \
  357. OPTIONAL {?uri crm:P52_has_current_owner ?uriOwner . \
  358. ?uriOwner rdfs:label ?current_owner } \
  359. }"
  360. queryProduction = prefixes + " SELECT DISTINCT (GROUP_CONCAT(DISTINCT CONCAT(?uriPerson, '; ', ?person, '; ', ?role) ; SEPARATOR = '<br />') AS ?Partecipants) (group_concat(distinct ?time_span ;separator='-') as ?time) (GROUP_CONCAT(DISTINCT CONCAT(?uriTecne, '; ', ?technique) ; SEPARATOR = '<br />') AS ?techniques) \
  361. WHERE { \
  362. VALUES ?uri {<" + thisUrlParams.link + ">} \
  363. ?uri crm:P128_carries ?Information_Object . \
  364. ?Information_Object crm:P108i_was_produced_by ?Production . \
  365. OPTIONAL {?Production crm:P4_has_time-span ?uriTS ; \
  366. crm:P32_used_general_technique ?uriTecne . \
  367. ?uriTS rdfs:label ?time_span . \
  368. ?uriTecne rdfs:label ?technique} \
  369. OPTIONAL {?pc crm:P01_has_domain ?Production ; \
  370. crm:P02_has_range ?uriPerson ; \
  371. crm:P14.1_in_the_role_of ?uriRole . \
  372. ?uriPerson rdfs:label ?person . \
  373. ?uriRole rdfs:label ?role} \
  374. }"