2017-06-12 2 views
1

J'ai essayé de faire une requête SPARQL mais j'ai échoué. J'ai trois propriétés que je dois demander comme ça:La requête SPARQL pour trois sous-propriétés ne fonctionne pas

SELECT DISTINCT ?locality ?museRes ?calendar ?category 
FROM <http://opendata.cs.pub.ro/repo/context/TTT> 
WHERE { 
{ 
?museRes vCard:locality ?locality FILTER (regex(?museRes, "odaia_bunicii", "i")) . 
?museRes vCard:category ?category FILTER (regex(?museRes, "odaia_bunicii", "i")). 
?museRes vCard:hasCalendarRequest ?calendar FILTER (regex(?museRes, "odaia_bunicii", "i")) 
} 
} 

dans Romanian OpenData SPARQL endpoint

Le problème est que trois propriétés font partie d'un autre trois super-propriétés (dcterms: Spatials, dcterms: description et opendata: MuseumTour) et cette approche ne fonctionne pas. J'ai essayé avec l'opérateur OPTION mais il ne m'a montré que des museRes et des valeurs de localités même si le calendrier et la catégorie ne sont pas vides. En fin de compte, j'ai essayé d'utiliser UNION au lieu d'OPTION, mais cela ne fonctionne qu'avec UNION et j'ai besoin d'utiliser deux opérateurs UNION.

Comment puis-je demander vCard: localité vCard: catégorie et vCard: hasCalendarRequest dans le RDF ci-dessus?

<rdf:RDF 
    xmlns:marcrel="http://www.loc.gov/loc.terms/relators/" 
    xmlns:dcterms="http://purl.org/dc/terms/" 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:dcmitype="http://purl.org/dc/dcmitype/" 
    xmlns:opendata="http://opendata.cs.pub.ro/property/" 
    xmlns:vCard="http://www.w3.org/2006/vcard/ns#" 
    xmlns:dbPedia="http://dbpedia.org/ontology/" 
    xmlns:cdtype="http://purl.org/cld/cdtype/" 
    xmlns:cld="http://purl.org/cld/terms/"> 
    <dbPedia:Museum rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/"> 
    <dcterms:description> 
     <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Info/"> 
     <dc:identifier>7172383</dc:identifier> 
     <opendata:FoundingYear>2016</opendata:FoundingYear> 
     <dc:title xml:lang="en"></dc:title> 
     <dcterms:isReferencedBy></dcterms:isReferencedBy> 
     <marcrel:OWN> 
      <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Info/Own/"> 
      <dc:identifier></dc:identifier> 
      <dc:title></dc:title> 
      </rdf:Description> 
     </marcrel:OWN> 
     <opendata:Accreditation></opendata:Accreditation> 
     <dc:subject> 
      <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Info/Subject/"> 
      <vCard:value xml:lang="en"></vCard:value> 
      <vCard:label xml:lang="en">Specific (Principal) profile</vCard:label> 
      <vCard:label>Profil specific (principal)</vCard:label> 
      <vCard:value>Etnografie</vCard:value> 
      <vCard:label>Profil general</vCard:label> 
      </rdf:Description> 
     </dc:subject> 
     <dc:title>"Odaia Bunicii" - Centrul Folcloric Grădiniţa, Galicea Mare</dc:title> 
     <vCard:hasCategory> 
      <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Info/Category/"> 
      <opendata:MainCategory xml:lang="en">Museum</opendata:MainCategory> 
      <opendata:MainCategory>Muzeu</opendata:MainCategory> 
      <vCard:category xml:lang="en"></vCard:category> 
      <vCard:category>Muzeu Comunal</vCard:category> 
      </rdf:Description> 
     </vCard:hasCategory> 
     <dcterms:description> 
      <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Info/Description/"> 
      <opendata:Historic xml:lang="en"></opendata:Historic> 
      <opendata:Historic></opendata:Historic> 
      <dcterms:abstract xml:lang="en"></dcterms:abstract> 
      <dcterms:abstract></dcterms:abstract> 
      <dcterms:description xml:lang="en"></dcterms:description> 
      <dcterms:description>Centrul folcloric al grădiniţei Galicea Mare este situat în incinta Grădiniţei nr.1, structură a Şcolii Gimnaziale Galicea Mare, judeţul Dolj, pe drumul european E56. Pentru a readuce la viaţă şi a reînvia atât tradiţiile cât şi portul popular românesc, a luat naştere „Odaia bunicii”, un loc in care obiectele prind viaţă şi creează o atmosferă caldă, plina de dragostea ţaranilor de altadată. Expoziţia permanentă, deschisă în 2016, este concepută într-o manieră tradiţională, fiecare obiect aşteptând să fie folosit pentru a-şi arata maiestria, astfel: patul cu tablii de lemn şi saltea de paie aşteaptă să odihnească omul, măsuţa din lemn şi scaunelele aşteaptă cu nerăbdare să fie servită cina, dar şi războiul ţăranesc unde femeile ţeseau macate ne reamintesc nouă, celor mari, şi îi învaţă pe cei mici despre obiceiurile şi tradiţiile româneşti de altădată.</dcterms:description> 
      <opendata:Relevance xml:lang="en">Local</opendata:Relevance> 
      <opendata:Relevance>Locală</opendata:Relevance> 
      </rdf:Description> 
     </dcterms:description> 
     </rdf:Description> 
    </dcterms:description> 
    <dbPedia:Building> 
     <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Building/"> 
     <dbPedia:HistoricBuilding></dbPedia:HistoricBuilding> 
     <dcterms:abstract xml:lang="en"></dcterms:abstract> 
     <dcterms:abstract></dcterms:abstract> 
     <dc:identifier></dc:identifier> 
     <dc:type xml:lang="en">Building</dc:type> 
     <dc:type>Cladire</dc:type> 
     </rdf:Description> 
    </dbPedia:Building> 
    <opendata:MuseumTour> 
     <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Tour/"> 
     <vCard:hasCalendarRequest xml:lang="en">Unspecified</vCard:hasCalendarRequest> 
     <vCard:hasCalendarRequest>luni-vineri 8:00-13:00</vCard:hasCalendarRequest> 
     <opendata:VirtualTour></opendata:VirtualTour> 
     </rdf:Description> 
    </opendata:MuseumTour> 
    <opendata:Contact> 
     <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Contact/"> 
     <vCard:url> 
      <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Contact/URI/"> 
      <opendata:SocialMediaUri> 
       <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Contact/URI/SocialMediaUri/"> 
       <vCard:label>Link-uri social media.</vCard:label> 
       <vCard:hasValue></vCard:hasValue> 
       </rdf:Description> 
      </opendata:SocialMediaUri> 
      <opendata:CimecUri> 
       <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Contact/URI/CimecUri/"> 
       <vCard:label>Link-ul catre portalul CIMEC.</vCard:label> 
       <vCard:hasValue>http://ghidulmuzeelor.cimec.ro/id.asp?k=2030&amp;-„Odaia-bunicii”-Centrul-folcloric-Gradinita,-Galicea-Mare-GALICEA-MARE-Dolj</vCard:hasValue> 
       </rdf:Description> 
      </opendata:CimecUri> 
      <opendata:WebUri> 
       <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Contact/URI/WebUri/"> 
       <vCard:label>Link-ul catre site-ul muzeului.</vCard:label> 
       <vCard:hasValue></vCard:hasValue> 
       </rdf:Description> 
      </opendata:WebUri> 
      </rdf:Description> 
     </vCard:url> 
     <vCard:Individual> 
      <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Contact/Individual/"> 
      <opendata:Employee> 
       <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Contact/Individual/Employee/"> 
       <vCard:hasName>Gologan Veronica</vCard:hasName> 
       <vCard:hasRole>Profesor</vCard:hasRole> 
       </rdf:Description> 
      </opendata:Employee> 
      <opendata:Manager> 
       <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Contact/Individual/Manager/"> 
       <vCard:hasName>Văduva Cristian</vCard:hasName> 
       <vCard:hasRole>Director</vCard:hasRole> 
       </rdf:Description> 
      </opendata:Manager> 
      </rdf:Description> 
     </vCard:Individual> 
     <vCard:hasEmail></vCard:hasEmail> 
     <vCard:hasTelephone> 
      <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Contact/Telephone/"> 
      <vCard:Fax> 
       <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Contact/Telephone/Fax/"> 
       <vCard:rev></vCard:rev> 
       <vCard:value></vCard:value> 
       </rdf:Description> 
      </vCard:Fax> 
      <vCard:Work> 
       <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Contact/Telephone/Work/"> 
       <vCard:rev></vCard:rev> 
       <vCard:value>0251.316.006; 0762.278.850</vCard:value> 
       </rdf:Description> 
      </vCard:Work> 
      </rdf:Description> 
     </vCard:hasTelephone> 
     </rdf:Description> 
    </opendata:Contact> 
    <dcterms:spatials> 
     <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Spatials/"> 
     <vCard:hasAddress> 
      <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Spatials/Address/"> 
      <vCard:postal-code>207270</vCard:postal-code> 
      <vCard:region>Dolj</vCard:region> 
      <dbPedia:AdministrativeRegion>Galicea Mare</dbPedia:AdministrativeRegion> 
      <vCard:hasLocality> 
       <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Spatials/Locality/"> 
       <opendata:Siruta></opendata:Siruta> 
       <vCard:locality>Galicea Mare</vCard:locality> 
       </rdf:Description> 
      </vCard:hasLocality> 
      <vCard:street-address>Str. Calafatului nr. 10</vCard:street-address> 
      </rdf:Description> 
     </vCard:hasAddress> 
     <opendata:Access xml:lang="en"></opendata:Access> 
     <opendata:Access></opendata:Access> 
     <vCard:hasGeo> 
      <rdf:Description rdf:about="http://opendata.cs.pub.ro/resource/_Odaia_Bunicii-Centrul_Folcloric_Gradinita_Galicea_Mare_Dolj/Spatials/GeoPos/"> 
      <vCard:longitude>23.3</vCard:longitude> 
      <vCard:latitude>44.1</vCard:latitude> 
      <vCard:label>Localitate</vCard:label> 
      </rdf:Description> 
     </vCard:hasGeo> 
     </rdf:Description> 
    </dcterms:spatials> 
    </dbPedia:Museum> 
</rdf:RDF> 
+0

Pourquoi avez-vous les mêmes 'filter' trois fois? C'est redondant – AKSW

+0

Et l'opérateur s'appelle 'OPTIONAL'. Pour être honnête, ce que vous avez fait avec le 'OPTIONAL' n'est pas clair car vous n'avez pas montré la requête qui ne fonctionne pas. – AKSW

Répondre

-1

Après 3-4 heures, je trouve la solution:

SELECT DISTINCT ?locality ?category ?calendar ?importanta 
FROM <http://opendata.cs.pub.ro/repo/context/ilie> 
WHERE { 
?a vCard:locality ?locality. FILTER (regex(?a, "odaia_bunicii", "i")). 
?b vCard:category ?category. FILTER (regex(?b, "odaia_bunicii", "i")). 
?c vCard:hasCalendarRequest ?calendar. FILTER (regex(?c, "odaia_bunicii", "i")). 
?d openDataP:Relevance ?importanta. FILTER (regex(?d, "odaia_bunicii", "i")). 
} 
+0

Une solution pour quoi? C'est n'importe quoi, mais pas une solution: aucun des motifs triples de la requête n'est connecté à un autre, c'est-à-dire partage une variable. Cela signifie, il retourne le produit cartésien de tous, je ne pense pas que ce soit une requête utile. – AKSW

+0

Pouvez-vous m'aider avec une réponse à une question parce que je ne comprends pas beaucoup? – Doro

+0

@AKSW J'ai posté une nouvelle réponse ... Peux-tu me dire si c'est bon? – Doro

0

Une meilleure réponse ...

SELECT DISTINCT ?o ?museum_res ?locality ?calendar ?category ?importanta 
FROM <http://opendata.cs.pub.ro/repo/context/TTT> 
WHERE { 
{ 
    ?museum_res ?p ?o. 
    ?e dc:title ?title. 
    ?a vCard:locality ?locality. 
    ?b vCard:category ?category. 
    ?c vCard:hasCalendarRequest ?calendar. 
    ?d openDataP:Relevance ?importanta. 
    FILTER (
    UCASE(?o) = UCASE("http://dbpedia.org/ontology/Museum") && 
    contains(?title, "Odaia") && 
    contains(?e, ?museum_res) && 
    contains(?a, ?museum_res) && langMatches(lang(?locality),"") && 
    contains(?b, ?museum_res) && langMatches(lang(?category),"") && 
    contains(?c, ?museum_res) && langMatches(lang(?calendar),"") && 
    contains(?d, ?museum_res) &&langMatches(lang(?importanta),"") 
    ) 
} 
} 
ORDER BY ?museum_res 
LIMIT 1200 
+0

C'est la même requête SPARQL inutile. Aucun modèle triple ne partage une variable avec un autre modèle triple. Voir '? A vCard: locality? Locality. ? B vCard: category? Category.' Que pensez-vous qu'il fait? – AKSW