About this board

Previous discussion was archived at User talk:TomT0m/Archive 1 on 2015-08-10.

Bouzinac (talkcontribs)

hello, tu saurais m'aider dans cette requête qui ne fonctionne pas au niveau du ?qualifier ?

SELECT ?item ?itemLabel ?qualifier ?qualifierLabel ?comprend ?comprendLabel ?pays ?paysLabel WHERE {
  ?item wdt:P31 wd:Q1292279.
  OPTIONAL { ?item wdt:P31 ?comprend. }
   OPTIONAL { wd:Q1292279 p:P31 [ pq:P642 ?qualifier ].}

  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr". }
  OPTIONAL { ?item wdt:P17 ?pays. }
}

Try it!

TomT0m (talkcontribs)

Je sais pas ce que tu veux faire, mais vu le nom des variables tu utilises le label « comprend » pour valeur de « nature de l’élément », ce qui n’est pas spécialement cohérent.

YanikB (talkcontribs)
SELECT ?item ?itemLabel ?qualifier ?qualifierLabel ?statutLabel ?pays ?paysLabel 
  WHERE {
   ?item p:P31 ?statut_statement .
   ?statut wdt:P279 wd:Q1292279 .
   ?statut_statement ps:P31 ?statut .
   OPTIONAL { ?item p:P31 [ pq:P642 ?qualifier ] }
   OPTIONAL { ?item wdt:P17 ?pays. }
   SERVICE wikibase:label { bd:serviceParam wikibase:language "fr". }
  }

Try it!

Bouzinac (talkcontribs)

Yes, YanikB! merci à toi

Reply to "Requête avec qualifier"

Je t'ai cité en exemple dans une de mes pages sur Wikispecies

1
Caftaric (talkcontribs)
Reply to "Je t'ai cité en exemple dans une de mes pages sur Wikispecies"
Bouzinac (talkcontribs)

Hello, je crois me souvenir que la chimie te passionne sauf erreur de ma part. Dans cette requête, quand ça commence par un C, j'ai l'impression que c'est des trucs chimie. Saurais tu t'en occuper pour mieux qualifier les éléments ?

SELECT DISTINCT ?item ?itemLabel 
WHERE {
  hint:Query hint:optimizer "None".
  SERVICE wikibase:mwapi {
    bd:serviceParam wikibase:api "Search";
                    wikibase:endpoint "www.wikidata.org";
                    mwapi:srsearch "list of -haswbstatement:P31 -haswbstatement:P279" .
    ?title wikibase:apiOutput mwapi:title. 
  }
  BIND(IRI(CONCAT(STR(wd:), ?title)) AS ?item)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
 # FILTER(STRSTARTS(?itemLabel, "C")).
}

Try it!

Reply to "Elements de chimie"
Pdehaye (talkcontribs)
TomT0m (talkcontribs)

Bonjour, désolé pour la réponse tardive. Je viens de regarder les éditions que j’ai annulé, et en fait non je suis pas vraiment d’accord, c’était soit de pur forme donc l’utilité est pas forcément folle (remplacement du nowiki par un modèle), ou la suppression des uri devant les identifiants, qui ne sont pas des erreurs dans ce modèle.

C’est moins utile maintenant, mais (on peut en discuter) utiliser des uri pour identifier les éléments dans le monde du web des données c’est pas déconnant non plus, et parfois quand on fait certains copier/collés on se retrouve avec une url dans le « coller ». Donc j’aime bien montrer cette fonctionnalité (mais j’avoue que le code est moins lisible)

Pdehaye (talkcontribs)

ok, merci pour la reponse

Reply to "Template:Claim"
Summary by TomT0m

une série de requête comparant les proportions de biographie par genre dans des livres pour WP:RAW

Simon Villeneuve (talkcontribs)

Salut,
J'ai lancé une nouvelle section sur les fr:WP:RAW qui s'intitule "SPARQL du mois" (exemple). Je lance l'invitation ici et là à des contributeurs qui maîtrisent relativement bien le SPARQL. Si jamais tu penses avoir une bonne idée de thématique et/ou de bonne requêtes à partager, n'hésite pas !
La section de février est déjà prête. Pour celle de mars, je pensais faire un tableau avec le nombre d'articles consacré aux hommes et aux femmes par différentes publications externes. J'ai commencé quelque chose, mais je bloque.
En gros, j'aimerais faire un tableau montrant le nombre d'éléments de certaines publications selon les genres. Pour ce faire, j'ai filtré certains identifiants avec cette requête :

SELECT DISTINCT ?property ?propertyLabel ?propertyDescription
WHERE
{
    ?property rdf:type wikibase:Property ;
              wdt:P31/wdt:P279* wd:Q36218176 ;
              wdt:P31/wdt:P279* wd:Q55452870 .
    SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }	
}

Try it!

J'aimerais savoir si tu sais comment, pour chacune de ces 23 propriétés, recenser tous les éléments humains et les diviser en genre ? J'ai trouvé la requête suivante dans les exemples, mais elle n'est construite que pour un cas spécifique.

En bref, je suis capable de faire "à la main" ce travail : faire une requête individuelle pour chacune de ces 23 propriétés, diviser les éléments en genres et entrer ces valeurs dans un tableau. Je me demandais si tu connaissais un moyen de faire la chose d'un seul coup en SPARQL.

TomT0m (talkcontribs)

Oui c'est possible, première tentative : https://query.wikidata.org/#SELECT%20DISTINCT%20%3Fproperty%20%3FpropertyLabel%20%3FpropertyDescription%20%3Fsexe%20%3FsexeLabel%20%28count%28%3Fperson%29%20as%20%3Feffectif%29%0AWHERE%0A%7B%0A%20%20%20%20%3Fproperty%20rdf%3Atype%20wikibase%3AProperty%20%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20wdt%3AP31%2Fwdt%3AP279%2a%20wd%3AQ36218176%2C%20wd%3AQ55452870%20%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20wikibase%3AdirectClaim%20%3FpropertyMainValue%20.%0A%20%20%20%20%3Fperson%20%3FpropertyMainValue%20%5B%5D%20%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20wdt%3AP21%20%3Fsexe%20.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22%5BAUTO_LANGUAGE%5D%2Cen%22%20%7D%09%0A%0A%7D%20group%20by%20%3Fproperty%20%3FpropertyLabel%20%3FpropertyDescription%20%3Fsexe%20%3FsexeLabel%20%0A%20%20order%20by%20%3Fproperty%20%3Fsexe mais il y a un peu de nettoyage à faire pour les "valeurs inconnues" je crois.

TomT0m (talkcontribs)

Entre une étape intermédiaire pour me rendre compte que les cas ou le sexe est inconnus sont probablement des cas ou il s'agit de compagnie ferroviaires ou de groupes donc que beaucoup de "non spécifié" ou "inconnus" ne sont pas très pertinent, je pense être arrivé à un truc pas mal en se restreignant aux humains :

select ?property ?propertyLabel ?propertyDescription ?sexe ?sexeLabel (count(?person) as ?effectif)
{
    ?property rdf:type wikibase:Property ;
              wdt:P31/wdt:P279* wd:Q36218176, wd:Q55452870 ;
              wikibase:directClaim ?propertyMainValue .
  
    ?person ?propertyMainValue [] ;
            wdt:P31 wd:Q5 .
    optional {
       ?person wdt:P21 ?sexe2
       bind(if(isBlank(?sexe2), "inconnu", ?sexe2) as ?sexe3) 
    }
    bind(if(!bound(?sexe3), "non specifié", ?sexe3) as ?sexe) 
  
    SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }	
  
} group by ?property ?propertyLabel ?propertyDescription ?sexe ?sexeLabel
  order by ?property ?sexe

Try it!

Simon Villeneuve (talkcontribs)

(cela concerne ton premier message. J'explore ton second à l'instant)

Vraiment trop cool !
Ça fait une demi-heure que je tente de transformer en % les effectifs en insérant ici et là des BIND et des count, mais je n'y arrive pas. Tu peux encore m'aider ?
Sinon, pour mieux apprendre le SPARQL, à part le livre sur Wikibook en anglais et les pages de W3C, tu as des suggestions ?

TomT0m (talkcontribs)

Une dernière version (pour l'instant, on verra les pourcentages plus tard) avec moins de ligne :

select ?property ?propertyLabel ?propertyDescription (group_concat(concat(str(?sexe_label_final), ": ", str(?effectif));separator=" - ") as ?sexes) (sum(?effectif) as ?total)

with {

select ?property ?sexe (count(?person) as ?effectif)
{
    ?property rdf:type wikibase:Property ;
              wdt:P31/wdt:P279* wd:Q36218176, wd:Q55452870 ;
              wikibase:directClaim ?propertyMainValue .
  
    ?person ?propertyMainValue [] ;
            wdt:P31 wd:Q5 .
    optional {
       ?person wdt:P21 ?sexe2 .
       bind(if(isBlank(?sexe2), "inconnu", ?sexe2) as ?sexe3) 
    }
    bind(if(!bound(?sexe3), "non specifié", ?sexe3) as ?sexe)
    
 
} group by ?property ?sexe
  order by ?property ?sexe
} as %dataset

where {
  {
    select ?property ?propertyLabel ?propertyDescription ?sexe ?sexe_label_final ?effectif{
      include %dataset .
      optional { ?sexe rdfs:label ?label_sexe filter langmatches(lang(?label_sexe), "fr") }
      SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
      bind (if(bound(?label_sexe), ?label_sexe, ?sexe) as ?sexe_label_final)
    }
  }
} group by ?property ?propertyLabel ?propertyDescription

Try it!

TomT0m (talkcontribs)

Et finalement voilà les pourcentages :

select ?property ?propertyLabel ?propertyDescription 
       (group_concat(concat(str(?sexe_label_final), 
                           ": ", 
                           str(?effectif), " ",
                           "(", str(round(?effectif / sum(?effectif) * 100)), "%",")") ; separator=" - ") as ?sexes) 
       (sum(?effectif) as ?total)

with {

select ?property ?sexe (count(?person) as ?effectif)
{
    ?property rdf:type wikibase:Property ;
              wdt:P31/wdt:P279* wd:Q36218176, wd:Q55452870 ;
              wikibase:directClaim ?propertyMainValue .
  
    ?person ?propertyMainValue [] ;
            wdt:P31 wd:Q5 .
    optional {
       ?person wdt:P21 ?sexe2 .
       bind(if(isBlank(?sexe2), "inconnu", ?sexe2) as ?sexe3) 
    }
    bind(if(!bound(?sexe3), "non specifié", ?sexe3) as ?sexe)
    
 
} group by ?property ?sexe
  order by ?property ?sexe
} as %dataset

where {
  {
    select ?property ?propertyLabel ?propertyDescription ?sexe ?sexe_label_final ?effectif{
      include %dataset .
      optional { ?sexe rdfs:label ?label_sexe filter langmatches(lang(?label_sexe), "fr") }
      SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
      bind (if(bound(?label_sexe), ?label_sexe, ?sexe) as ?sexe_label_final)
    }
  }
  bind( (?effectif / ?total )  as ?pourcent)
} group by ?property ?propertyLabel ?propertyDescription

Try it!

Simon Villeneuve (talkcontribs)
VIGNERON (talkcontribs)
TomT0m (talkcontribs)

tu as raison, c’est bien une erreur

VIGNERON (talkcontribs)

Ok, du coup c'est logique.

Reply to "Précision"
Jeblad (talkcontribs)

I was looking at your Module:PropertyPath, and wondered how you would do “attribute selectors” like in CSS selectors. The reason why is that I have messed around with something similar, without matching paths, but it does have attribute selectors. It will make it possible to write something like child/child['sex or gender' eq 'male']. With some additional fancyness (!) it is possible to write just child/child[sex or gender eq male].

My idea allows matching on simple cardinal values, but your solution seems to be much better on traversing graphs?

The reason why I was looking at this is that I 'm toying with a tag function “with”. It make a context where an item can be accessed with short form paths, and the results can be used for morphological changes in the content between the tags. It would make it possible to write something like <with root="Q34201">{:label} have {child/child::count} grandchild+{child/child::number}</with>

The +-thingy controls inflection, and :number will return grammatical number like singular (sg), plural (pl), or something similar. This is a pretty standard fst-based inflection scheme. A single colon is a value attribute or claim from the result, and a double colon is a pseudoattribute on the result. The double colon syntax can be simplified.

I've been toying with this for several years, so don't hold your breath, I'm not finishing this tomorrow! Actually I tried to get this accepted a few years back, but now I doubt it is possible to get acceptance for something like this.

Reply to "“With” and PropertyPath"

Reminder: Community Insights Survey

1
MediaWiki message delivery (talkcontribs)

RMaung (WMF) 19:54, 20 September 2019 (UTC)

Reply to "Reminder: Community Insights Survey"
MediaWiki message delivery (talkcontribs)

RMaung (WMF) 17:38, 10 September 2019 (UTC)

Reply to "Community Insights Survey"
Nomen ad hoc (talkcontribs)
TomT0m (talkcontribs)

L’idée c’est que les professeurs d’université sont des cas particuliers d’enseignants chercheurs à l’université. Donc tout prof. (d’université sous entendu) est aussi un enseignant chercheur de l’université de france.

Donc ça satisfait les conditions pour qu’on ait

<professeur d’université> subclass of (P279) <enseignant chercheur>

(sachant que

<A> subclass of (P279) <B>

signifie « tout ce qui est un exemple de A est aussi un exemple de B », on est pile poil dans ce pour quoi c’est approprié.

On peut donc mettre en profession « professeur d’université », ce qui mécaniquement veut dire qu’ils sont enseignants chercheurs et indique leur rang du même coup. Foin réellement besoin de propriété « grade ».

Nomen ad hoc (talkcontribs)

Raisonnement intéressant ! Mais à mon sens, ce n'est pas parce qu'une fonction est une sous-classe d'une activité qu'elle est également à considérer comme telle (par exemple, parlementaire est une sous-classe de législateur et donc de personnalité politique (une activité)

TomT0m (talkcontribs)

Ça se discute. Comment tu définis « politicien » ? Précisément par « quelqu’un qui occupe une fonction politique » (ou au moins, occuper une fonction politique est nécessaire pour être politicien.

Qu’est-ce qui définit cette fonction ? Un ensemble d’activités associées aux responsabilité qu’elle confère. Autrement dit, ce qui définit la fonction c’est … une certaine activité. Tout comme ce qui définit une activité. Par exemple ce qui définit « boulanger » ? fabriquer du pain. Législateur ? faire les lois. Membre du parlement ? Tu dois trouver une pelleté de texte définissant les activités que doit remplir un membre du parlement.

Pour moi tout ça ce sont des activités, effectivement, avec un certain décorum dans le cas de fonctions républicaines et surtout une manière d’y accéder très codifiée (élection, concours …)

Nomen ad hoc (talkcontribs)

Les fonctions sont aussi des activités, certes. Mais alors, faut-il cesser de les déclarer comme fonction ? Auquel cas, je ne verrais pas trop l'intérêt d'avoir une propriété dédiée...

TomT0m (talkcontribs)

Il y a une certaine redondance dans un tel modèle. Quelle est l’utilité, si nous savons qu’une personne a occupé une fonction politique, de préciser que c’est une « personnalité politique » en plus ? Ça se discute effectivement. Le seul truc qu’on a besoin de savoir c’est que la fonction en question est une fonction politique, sinon un président de la république est trivialement un politicien.

TomT0m (talkcontribs)
TomT0m (talkcontribs)

Il y a quand même évidemment un piège potentiel, l’utilisation des rangs. Si on prend quelqu’un qui s’est retiré de la vie politique, NKM par exemple, la « bonne pratique » serait de mettre son poste actuel en rang privilégié. Du coup, si on veut inférer que ce fut une personnalité politique il ne faut pas oublier d’aller chercher dans ses anciens postes également, parce que mettre une déclaration en rang privilégié aura tendance à « masquer » les anciens si on y prend pas garde.

Mais en regardant l’élément NKM à la date d’aujourd’hui il n’y a en pratique tout simplement aucune utilisation des rangs…

TomT0m (talkcontribs)

De manière intéressante il y a 18 000 éléments qui sont marqués ayant une fonction politique mais n’ayant pas d’occupation déclarée.

En cliquant sur 2 d’entre eux, un comte (moyen age) et un ministre africain.

Nomen ad hoc (talkcontribs)
Reply to "Rangs académiques"