2012-07-06 12 views
5

Próbuję dopasować jedno słowo w SPARQL za pomocą filtru regex, ale bez powodzenia ...:/ Wysyłam zapytanie do punktu końcowego znajdującego się pod adresem "http://dbtune.org/ musicbrainz/sparql ". Cóż, poniższa kwerenda działa:Filtr regex SPARQL

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX mo: <http://purl.org/ontology/mo/> 
SELECT ?artist ?name 
WHERE { 
    ?artist a mo:MusicArtist 
    . ?artist foaf:name "Switchfoot" 
    . ?artist foaf:name ?name 
    . FILTER(regex(str(?name), "switchfoot", "i")) 
} 

Ale jeśli usunąć wiersz 7 (artysta foaf.? Nazwa "Switchfoot"), poniższa kwerenda nie pasuje:

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX mo: <http://purl.org/ontology/mo/> 
SELECT ?artist ?name 
WHERE { 
    ?artist a mo:MusicArtist 
    . ?artist foaf:name ?name 
    . FILTER(regex(str(?name), "switchfoot", "i")) 
} 

I nie wiem, czy robię coś nie tak, czy to błąd punktu końcowego ...

Czy ktoś może mi pomóc?

+0

To smack of a bug (jak mówisz) lub jakiegoś rodzaju dławienie zapytania. Zastanawiam się, z jakiego punktu końcowego korzystają? – user205512

+0

Punkt końcowy jest „http://dbtune.org/musicbrainz/sparql” ... Zrobiłem test i zdałem sobie sprawę, że końcowy ogranicza wyniki do 1000. Wysłałem następujące zapytanie: SELECT count ( ? artysta) WHERE {? artist a mo: MusicArtist} I wrócił 1000, który jest zbyt mały ... Myślę, że może to naprawdę błąd ... =/ –

Odpowiedz

7

W drugim zapytaniu nie ma wzorca wykresu do indeksu. Jedynym sposobem, w jaki procesor zapytań może spełnić to zapytanie, jest pobranie nazwy każdego artysty w potrójnym sklepie, a następnie zastosowanie do każdego dopasowania wyrażenia regularnego. Nic dziwnego, że uderzasz w jakiś limit zasobów, niezależnie od tego, czy chodzi o czas procesora, czy czas.

Jeśli chcesz wykonywać bezpłatne wyszukiwania tekstowe, sugerowałbym pobranie zestawu danych do lokalnego punktu końcowego i użycie indeksu wolnego tekstu, takiego jak LARQ. Twoje pytania będą szybsze, a Twoi użytkownicy będą Ci za to wdzięczni!

+0

Dziękuję, Ian! –

+0

Myślę, że zrobię serwer do przechowywania tylko tych danych, które muszę dopasować do wyrażenia regularnego, takich jak "nazwa", "etykieta" i ewentualnie innych, tak że mogę uzyskać URI zasobu przez mój własny serwer i użyj go, aby uzyskać inne właściwości! –