Czy można w łatwy sposób przetworzyć zapytanie sparql w zmiennych dla języka Java, np. Fyzz w python? W jaki sposób wykorzystano interfejsy API Jeny lub sezamu?Analizator składni SPARQL dla kodu Java
Odpowiedz
Możesz analizować i manipulować językiem SPARQL w Javie za pomocą Apache Jena ARQ po prostu na poziomie składni lub algebry. QueryFactory.create(queryString)
udostępnia reprezentację java kwerendy. Następnie rozglądamy:
Query query = QueryFactory.create(queryString);
query.isSelectType() && query.isQueryResultStar(); // of the form SELECT *?
query.getDatasetDescription(); // FROM/FROM NAMED bits
query.getQueryPattern(); // The meat of the query, the WHERE bit
...etc etc..
Op op = Algebra.compile(query); // Get the algebra for the query
(patrz the Query java documentation)
Spróbuj uruchomić z samouczka 'Manipulating SPARQL using ARQ'. To da ci pojęcie, w jaki sposób reprezentowane są zapytania i jak je wyciągać (visitors
są szczególnie przydatne). Chociaż początkowo poziom składni jest najbardziej znany, dla wielu zadań działa lepiej, ponieważ odpowiada to, co faktycznie robi zapytanie.
Oto w jaki sposób można analizować i manipulować zapytanie sparql użyciu Sesame:
do analizowania:
ParsedQuery pq = QueryParserUtil.parseQuery(QueryLanguage.SPARQL, queryString);
Wyjście to jest ParsedQuery
, który jest algebraiczna reprezentacja przedmiotem zapytania. Jeśli chcesz konkretnie dostać drzewa Przetwarza się, że możliwe jest również:
ASTQueryContainer parseTree = SyntaxTreeBuilder.parseQuery(queryString);
Następnie można bezpośrednio manipulować to drzewo składniowe poprzez wdrożenie niestandardowych SyntaxTreeBuilderVisitor (wskazówka: przedłużyć ASTVisitorBase
więc trzeba tylko przesłonić metody gdzie faktycznie chcesz coś zrobić).
Jeśli wrócimy do algebraicznej modelu można wykonać ParsedQuery
na Sesame Sail Repository:
if (pq instanceof ParsedTupleQuery) {
SailTupleQuery query = new SailTupleQuery(pq, repositoryConnection);
TupleQueryResult result = query.evaluate();
} else if (pq instanceof ParsedGraphQuery) {
// etc for other query types
}
manipulować ParsedQuery
przed wykonaniem go użyć realizacji QueryModelVisitor, np własny manipulator niestandardowe zapytania:
QueryModelVisitor myVisitor = new MyCustomQueryModelVisitor();
pq.getTupleExpr().visit(myVisitor);
Z takim niestandardowym modelu zapytania odwiedzającego masz pełną kontrolę nad zapytania, aby zoptymalizować go czy rzeczywiście przepisać do innej składni.
Niezależnie od tego, czy manipulacja na poziomie drzewa składni abstrakcyjnej (AST), czy na poziomie modelu zapytania, jest kwestią gustu: model zapytania zapewnia większą elastyczność w zakresie planowania/optymalizacji zapytań i częściowego przepisuje (do późniejszego wykonania w sklepie Sesame), a jeśli twoim celem jest całkowite przepisanie zapytania w innym celu (np. wykonanie go w magazynie innym niż Sesame), manipulowanie drzewem składni bezpośrednio może być łatwiejsze.
Na marginesie, powyższy sposób analizy i wykonania zapytania jest okrężnym sposobem robienia rzeczy. Jeśli nie trzeba manipulować analizowany zapytania przed wykonaniem go, można po prostu przygotować i wykonać kwerendę w repozytorium tak:??
String queryString = "SELECT ...";
RepositoryConnection conn = repo.getConnection();
try {
TupleQuery tq = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
TupleQueryResult result = tq.evaluate();
}
finally {
conn.close();
}
- 1. Czy istnieje dobry lekki analizator składni HL7 dla języka Java?
- 2. Najlepszy analizator składni dla języka C#?
- 3. Plik wcięcia Vima dla Treetop (analizator składni)
- 4. Niestandardowy analizator składni JQuery Tablesorter
- 5. Analizator składni akceptujący identyfikatory Scala?
- 6. Analizator składni JSON w PascalScript
- 7. pisać rekursywny analizator składni z pyparstwem
- 8. Analizator kodu HTML
- 9. Analizator składni How To in .NET
- 10. Standardowy analizator składni JSON dostarczany w pakiecie z językiem Java
- 11. Analizator składni i analizator JavaScript w języku C# .NET 4.5
- 12. Jak utworzyć analizator składni AST, który dopuszcza błędy składni?
- 13. Zagnieżdżony analizator składni logicznej za pomocą ANTLR
- 14. Analizator składni ANTLR z ręcznym lexerem
- 15. Analizator kodu HTML, taki jak firebug, dla programu Outlook
- 16. podświetlanie składni kodu źródłowego dla trac?
- 17. Analizator RSS dla .NET
- 18. Lekki analizator składni SAX XML w języku C++
- 19. Analizator kodu JavaScript po stronie klienta
- 20. Android niestandardowy analizator składni XML nie rozpoznaje przestrzeni nazw Android
- 21. Zasięg kodu Maven dla projektu Java 8
- 22. Edytor kodu oparty na javascript dla niestandardowej składni języka
- 23. Analizator wiersza polecenia dla Qt4
- 24. Który analizator składni mikrodanych powinien być używany w Pythonie
- 25. Analizator składni niewrażliwy na wielkość liter w C#
- 26. Pozycja śledzenia podczas skanowania tokenów komplikuje analizator składni
- 27. Android: Najlepszy analizator składni do analizy danych XML
- 28. Zastąp standardowy analizator składni JSON Androida, aby uzyskać lepszą wydajność?
- 29. Analizator składni wyeksportowanych zakładek Plik HTML przeglądarki Google Chrome i Mozilla w języku Java
- 30. analizator wyrażeń boolowskich w języku Java
zacznę mój główny z SPARQL String = „SELECT a b c WHERE {? A? B.? A ? C.} "; Zapytanie kwerendy = QueryFactory.create (sparql); ale pojawia się komunikat Wyjątek w wątku "główny" java.lang.NoClassDefFoundError: com/hp/hpl/jena/shared/PrefixMapping $ IllegalPrefixException \t at com.hp.hpl.jena.query.QueryFactory.create (QueryFactory.java:68) \t na com.hp.hpl.jena.query.QueryFactory.create (QueryFactory.java:40) \t na com.hp.hpl.jena.query.QueryFactory.create (QueryFactory.java:28) \t at testsparql.main (testsparql.java:13) –
Potrzebujesz biblioteki jena-arq i jena-core na swojej ścieżce klas. Podejrzewam, że tęsknisz za tym drugim. – user205512
Aha, i jena-iri iirc. (Użyj menedżera zależności, jeśli to możliwe) – user205512