Premières requêtes envisagées pour l'extraction des factoïdes.
## Extraction des entités (actants)
Voir : [[Extraction des factoïdes : actants (entités) | https://gitlab.tetras-libre.fr/unsel/unsel-rdf-unl/-/wikis/Extraction-des-facto%C3%AFdes-:-actants-(entit%C3%A9s)]]
Cette requête permet d'extraire les actants. Il faudrait l'adapter pour définir l'ensemble des mots-clés définissant un actant (ici : person, administrator), et faire référence à cet ensemble dans la requête (un truc du style regex(..., "icl>$a")), pour tout $a dans ACTANT).
Autre point. La requête va créer un actant par lexème. Il faudrait l'adapter pour créer une seule ressource/classe pour tous les lexèmes avec un label identique.
```sparql
CONSTRUCT{
?lexrdfs:subClassOfsystem-ontology:actor
}
WHERE{
?uw1rdfs:label?uw1Label.
?uw1unl:is_substructure_of?req.
?uw1unl:is_occurrence_of?lex.
FILTER(
regex(str(?uw1Label),"icl>person")
||regex(str(?uw1Label),"icl>administrator"))
}
```
Ensuite, la hierarchie des actants peut être retrouvée en prenant en compte la relation "mod".
```sparql
CONSTRUCT{
?lex2rdfs:subClassOf?lex1
}
WHERE{
?uw1rdfs:label?uw1Label.
?uw2rdfs:label?uw2Label.
?uw1unl:mod?uw2.
?uw1unl:is_occurrence_of?lex1.
?uw2unl:is_occurrence_of?lex2.
FILTER(
(regex(str(?uw1Label),"icl>person")
||regex(str(?uw1Label),"icl>administrator"))
&&
true
)
}
```
NB : dans cette requête, le "true" est à revoir.
## Extraction des entités (messages)
Les messages sont des entités qui permettent de transmettre une information.
```sparql
CONSTRUCT{
?lex1rdfs:subClassOfsystem-ontology:message
}
WHERE{
?uw1rdfs:label?uw1Label.
?uw2unl:obj?uw1.
?uw1unl:is_occurrence_of?lex1.
FILTER(regex(str(?uw1Label),"icl>message")
||regex(str(?uw1Label),"icl>assignment"))
}
```
## Extraction des entités (composants)
A raffiner. Un composant est un objet qui n'est pas un message. Il faudrait également prendre en compte les labels, en définissant l'ensemble des entités correspondant à un composant. Idéalament, il faudrait avoir dans le document de spécification la description du système et de ses composants, et se servir de cette description pour avoir l'ensemble des composants à prendre en compte.
```sparql
CONSTRUCT{
?lex1rdfs:subClassOfsystem-ontology:component
}
WHERE{
?uw1rdfs:label?uw1Label.
?uw2unl:obj?uw1.
?uw1unl:is_occurrence_of?lex1.
FILTER(regex(str(?uw1Label),"icl>thing"))
}
```
# Extraction des actants "modifiés" (relation "unl:mod")
Cette requête permet d'obtenir les actants "modifiés" en partant d'un actant de base, et en prenant en compte une relation "unl:mod".
L'extraction d'une liste des agents pourrait être réalisée sur le même principe, en prenant comme base un filet de type "baseActor". Une première approche part du filet modActor, et prend en compte récursivement les conjonction OU.
## Approche naïve, **non retenue**
Si on cherche à prendre en compte la conjonction OU sur un filet de type mod_Actor, on ne sait sur quelle UW s'applique le OU. On pourrait s'en sortir