Il 03 gennaio 2013 00:53, sabas88 ha scritto: > Il giorno 03 gennaio 2013 00:06, Daniele Forsi <dfo...@gmail.com> ha > scritto: >> >> >> molto utile grazie >> c'è modo di evitare ripetizioni come la seguente (in particolare il >> cognome ripetuto due volte)? >> > > L'avevo notato anche io ma non mi ero posto il problema, però così credo che > spariscano > > SELECT ?name, ?surname, CONCAT( ?name, ' ', ?surname) WHERE { > ?person a <http://dbpedia.org/ontology/Person> . > ?person <http://it.dbpedia.org/property/nome> ?name . > ?person <http://it.dbpedia.org/property/cognome> ?surname . > ?person <http://it.dbpedia.org/property/nazionalità> "italiana"@it . > FILTER( isLiteral(?name) AND isLiteral(?surname) AND (!REGEX (?name, > ?surname) ) ) > } > > Ho semplicemente aggiunto una regex che controlla che il cognome non sia nel > nome (però così elimina possibili Carlo De Carlo o simili).
ho aggiunto di considerare solo le persone decedute: SELECT ?name, ?surname, CONCAT( Str(?name), ' ', Str(?surname)) WHERE { ?person a <http://dbpedia.org/ontology/Person> . ?person <http://it.dbpedia.org/property/nome> ?name . ?person <http://it.dbpedia.org/property/cognome> ?surname . ?person <http://it.dbpedia.org/property/annomorte> ?annomorte . FILTER( isLiteral(?name) AND isLiteral(?surname) AND (!REGEX (?name, ?surname) ) AND ?annomorte != '') } ho usato Str() perché certi "nomi" in realtà sono numeri e confronto anno morte con una stringa vuota perché non tutti gli anni sono numeri c'è però un altro problema che non capisco se è dovuto ai dati o alla query, in pratica fa il prodotto tra nomi e cognomi di tutti i template nella pagina (es. della persona e quelli delle fonti citate), e non sembrano distinguibili nei dati di dbpedia, succede in diversi casi, l'ho verificato per Fiona May dove nella bibliografia c'è l'autore Mauro Valeri e nella pagina http://it.dbpedia.org/page/Fiona_May ci sono 2 cognomi e 3 nomi: dbpprop-it:cognome May Valeri dbpprop-it:nome Mauro Fiona May Fiona e se nella tua query aggiungo un vincolo sul cognome: SELECT ?name, ?surname, CONCAT( Str(?name), ' ', Str(?surname)) WHERE { ?person a <http://dbpedia.org/ontology/Person> . ?person <http://it.dbpedia.org/property/nome> ?name . ?person <http://it.dbpedia.org/property/cognome> ?surname . ?person <http://it.dbpedia.org/property/cognome> "May"@it . ?person <http://it.dbpedia.org/property/nazionalità> "italiana"@it . FILTER( isLiteral(?name) AND isLiteral(?surname) AND (!REGEX (?name, ?surname) ) ) } si ottengono 5 "persone": name surname callret-2 "Mauro"@it "May"@it Mauro May "Fiona"@it "May"@it Fiona May "Mauro"@it "Valeri"@it Mauro Valeri "Fiona May"@it "Valeri"@it Fiona May Valeri "Fiona"@it "Valeri"@it Fiona Valeri -- Daniele Forsi _______________________________________________ Talk-it mailing list Talk-it@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-it