2017-09-17 2 views
-1

Je n'arrive pas à obtenir des noms de périphériques littéraux de ma base RDF avec des données de smartphone. données Exemple:Obtenir le littéral par critères dans SPARQL à partir de RDF

<rdf:Description rdf:about="https://lukasgorny.pro/devices#GioneeX1"> 
    <feature:device-name>Gionee X1</feature:device-name> 
    <feature:screen-size>big</feature:screen-size> 
    <feature:internal-memory-size>small</feature:internal-memory-size> 
</rdf:Description> 
<rdf:Description rdf:about="https://lukasgorny.pro/devices#SharpAquosS3"> 
    <feature:device-name>Sharp Aquos S3</feature:device-name> 
    <feature:screen-size>big</feature:screen-size> 
    <feature:internal-memory-size>big</feature:internal-memory-size> 
</rdf:Description> 

Requête:

PREFIX feature: <https://lukasgorny.pro/devices#> 

SELECT ?device WHERE 
{ 
    ?device feature:device-name ?deviceName . 
    OPTIONAL { ?x feature:screen-size ?screenSize . } 
    OPTIONAL { ?y feature:internal-memory-size ?memorySize . } 
} 

Je veux extraire tous les noms de périphériques qui taille de l'écran est « grand » et la mémoire de taille interne est « petit » (ceux-ci sont paramétrées dans mon application, mais je vous donne un exemple ici). Pouvez-vous me diriger dans la bonne direction? Je n'arrive pas à trouver une solution.

+0

double possible de (https://stackoverflow.com/questions/2591719/exact-matching -of-strings-in-sparql) –

+2

Quel est le but des clauses 'OPTIONAL'? ceux-ci ne sont pas connectés à une variable du modèle triple externe. – AKSW

Répondre

1

Vous pouvez utiliser une condition FILTER pour cela, comme ceci: [? Correspondance exacte des chaînes dans SPARQL]

WHERE 
{ 
    ?x feature:screen-size ?screenSize . 
    FILTER(str(?screenSize) = "big") 
} 
+0

Fonctionne bien, mais qu'en est-il des filtres multiples? Voici mon code et il semble ne pas fonctionner: https://pastebin.com/2J0vEVBB Il me renvoie toujours 93 entrées. –

+2

C'est la même chose que pour les clauses 'OPTIONAL' de votre requête initiale. Pourquoi utilisez-vous différentes variables '? X' et'? Y'? Les modèles triples doivent être "connectés" par des variables partagées – AKSW

+0

@ ŁukaszovPietriejGornyov comme @AKSW l'a également suggéré, vous devez changer les variables '? X' et'? Y' dans votre requête à '? Device'. Tout le problème est que vous interrogez trois propriétés du même sujet, après tout. Aussi: se débarrasser des clauses FACULTATIVES. –