mff-uk / odcs

ODCleanStore
1 stars 11 forks source link

Implement RDF interface RDFDataUnit #208

Closed tomas-knap closed 11 years ago

tomesj commented 11 years ago

I added imlementation - I asign Petr to see and resolve described problem defined in constructor of this class.

skodapetr commented 11 years ago

Problem solved, I need Jirka to provide me some information about usage of new RDFDataUnit so I could replace RDFRepository with our new RDFDataUnit class. (assigned to Jirka, Jirka please send me that information by email)

There can be question about preserving RDFRepository for compatibility reasons? Bud I would prefer not to if possible?

tomas-knap commented 11 years ago

Jirka, please check that soon.

No, the tool is not yet widely distributed, we do not need to preserve old versions.

tomesj commented 11 years ago

Yes, of course. We are discussing it by email :-)

tomesj commented 11 years ago

RDFDataUnit implementation complete - Petr replace methods extract/transform/load in DPUs with that. I check right using - via email discussion.

tomas-knap commented 11 years ago

Jirka, some adjustments needed before closing:

tomas-knap commented 11 years ago

Jirko,

metody makeSelectQuery/makeConstrustQuery vraci FIle. To se muze hodit, ale to RDFDataUnit musi nabidnout i metodu, ktera vrati openRDF resultSet, se kterym je rovnou mozne pracovat, napriklad si iterovat pres vysledky.

Tedy cekal bych tam napriklad metodu, ktera vrati http://www.openrdf.org/doc/sesame2/api/org/openrdf/query/TupleQueryResult.html

Ale cim vice metod udelas s ruznymi vystupy tim lepe. Idealne aby to umelo vracet i vystup prekonvertovany do JENA modelu.

Zapracuj na tom co nejdrive, nejlepe dnes, Martin bude zitra dotazovani pouzivat, tedy priprav do zitrka prosim aspon ty metody select/construct query, ktere vraci openRDF datove struktury.

tomas-knap commented 11 years ago

Jirkam further comments, please check as soon as possible. I have renamed certain methods a bit, but you shoul d be able to find them:

  1. Comment for: @param baseURI String name of defined used URI prefix namespace used by
    • all triples. Is not clear to mean. Explain better. What the baseURI brings to the DPU developer?

2. There must be method extractRDFFromSPARQLEndpoint(URL endpointURL, String namedGraph),query is not mandatory!

  1. There must be method extractFromSPARQLEndpoint(URL endpointURL, String defaultGraphURI, String user, String password)
  2. please add list of supported extensions to method:

/* * Extract triples from file and store them in DataUnit. The file type is * determined by file's extension. * @param file File contains RDF data to extract. * @throws RDFDataUnitException when extraction fail. */ public void extractRDFFromFile(File file) throws RDFDataUnitException { repository.extractFromFile(file); }

Also check that all the methods are tested propertly, there must be at least one test for every method and every type of parametr (e.g. text.xml, text.ttl,.. for the method above)

  1. In general, specify which formats of RDFFormat are supported (were tested), e.g. in method extractFromFile (file, format).
  2. repository.addTriple(subject, predicate, object) - it must behave in a way that when creating the triple using open RDF, it creates the triple NOT in a default namespace but simply with the namespaces provided. for example addTriple("http://example.com/subject","http://example2.com/pred", "http://example3.com/o" ) is stored as triple: http://example.com/subject http://example2.com/pred http://example3.com/o (WRITTEN in TTL syntax in this example). I have deleted method addTriople(namespace, s, p, o), because it rarely happens that all s, p, o are from the same namespace.
  3. public File makeSelectQuery(String selectQuery, String filePath) What is the purpose of the parametr filePath? The file is returned as a return value, right?
  4. The same problem for public File executeConstructQuery(String constructQuery, String filePath, RDFFormatType formatType)
  5. Metoda Load ma spatny komentar
  6. Vysvetli mi rozdil mezi navratovymi hodnotami pro select query: TupleQueryResult a Map<String, List>, kdyztak prosim nejlepe sem hod nejaky priklad vystupu obojiho
  7. Hod sem prosim priklad toho GraphQueryResult. To tedy muze byt jen vystup construct query?
tomesj commented 11 years ago
  1. BaseURI je string, který v případě, že je definován je použit u každé trojice, např mám-li BaseURI=http://my/base/, a vkládám trojici ("subject, "predicate,"object"), vlozi se mi trojici "http://my/base/subject, http://my/base/predicate, http://my/base/object. Je-li prázný, je potřeba napsat celé URI pro každou složku (s,p,o).

Napsal jsem toto: @param baseURI = String name of defined URI prefix namespace used by adding new triple statement as united prefix. If this string is empty, is needed to use whole URI name for each element of new added triple.

  1. Je-li ale dotaz prázdný, znamená to, že se mají vytáhnout všechny trojice z daného grafu ? Protože reálně vždy nějaký dotaz být musí v případě sparql endpointu-> tedy v tomto případě zavolat tento ?
  2. Stejný dotaz jako u 2.
  3. Různé parametry a rozšíření už byly přidány tedy postupně pro - file, format, pouziti prefixu, pouziti statistického hadleru.

Další várka dotazů:

  1. Testy odpovídají všem základním typům, které podporujeme - celkem 7 - AUTO, RDFXML,TTL, N3, NTRIPLES, TRIG a TRIX.
  2. Je vlastně bez otázky
  3. public File makeSelectQuery(String selectQuery, String filePath) Parametr filePath určuje cestu, kde má být daný file vytvořen pro uložení výsledků vytvořen.
  4. Stejný důvod jako u 3.
  5. Komentář se vztahuje k DataUnit - částečně opraveno.
  6. Návratové hodnoty pro select query:

Nejlépe na přikladě Select ?x ?y where {....}

Map - mapuje název sloupce výsledku na dané hodnoty, tj x=> hodnota1, hodnota2, ...hodnotaN, y=>h1, h2, ...hN

TupleQueryResult - dává bindings hodnot (tj, x - hodnota1, y´-h1, x-hodnota2,y-h2,...) tj. dá se přes to např. dobře iterovat :-)

  1. Ano GraphQueryResult je jen výsledkem dotazu typu construct - jeho výsledkem je nějaký graph, resp. všechny jeho trojice.

Samotná instance jako taková nemá výstup, slouží pak k volání metod - převedení výsledků do podoby, kterou chceme.

Lze zde volat metody jako: a) addTo(C extends Collection) - přidá všechny získané trojice do dané kolekce b) asList - vrací list obsahující všechny trojice c) asSet - vrací množinu obsahující všechny trojice d) asGraph - vrací graph obsahující všechny trojice

tomas-knap commented 11 years ago

Jirko, jeste k tomu baseURI, a kdyz vkladam (x, http://myexample/y, z), tak se z toho udela diky baseURI trojice http://my/base/x, http://myexample/y, http://my/base/z ?

Ad prazdny dotaz u addTriplesFromSPARQL, chapu, ale neni potreba preci po uzivateli chtit aby dodal dotaz "dej mi vse z grafu", proste se ten dotaz "dej mi vse z daneho named graph" vytvori u tebe, tedy uzivatel ten dotaz nemusi resit. Tedy dopln tam prosim onu metodu, ktera query nepotrebuje a query typy construct {?s ?p ?o} where {?s ?p ?o } se doplni samo.

Add list of supported formats, jde mi o to, aby v komentari bylo primo uvedeno, ktere extensions se automaticky rozpoznavaji. Navic kdyz koukam, tak RDFFormat obsahuje i JSON a dalsi, tedy to take podporujeme? Pokud ne, je treba to v komentari zduraznit.

K tomu Map a TupleQueryRes, popis to prosim podrobne do dokumentace, idealne s prikladem, klidne realnejsim (tedy trebas dotaz vrat mi jmena a prijmeni vsech osob). Aby si DPU developer udelal predstavu co muze cekat jako vystup a nemusel studovat hned TupleQueryRes dokumentaci

public File makeSelectQuery(String selectQuery, String filePath) Parametr filePath určuje cestu, kde má být daný file vytvořen pro uložení výsledků vytvořen. -> To chapu, ale proc je File navratova hodnota i vystupni parametr? Nestaci to jen jednou??

Uprav take, jak uz jsem psal v predchozim to "addTriple", aneb addTriple(x,y,z) musi vest nikoliv na volani addTriple("", subjectName, predicateName, objectName) a nasledne NIKOLIV na valueFaktory.createURI(namespace, subjectName), ale na valueFaktory.createURI(subjectName); Vis co tim myslim? Proste addTriple(x,y,z) primo udela trojici (x,y,z), zadne extra dolepovani prefixu, nic takoveho

tomesj commented 11 years ago

Je to tak, že když vkládám (x, http://myexample/y, z), tak mi z toho udela diky baseURI trojice http://my/base/x, http://my/base/http://my/example/y http://myexample/z.

Tedy časté užití to určitě nemá - spíš se bude používat případ, kdy je každá část zpravidla jiná (jiný namespace).

Ten prázdný dotaz jsem chtěl jenom ujasnit - chápeme to tedy stejně - přidám příslušné metody k tomu určené

Co se týče RDFFormatu, tak tam, kde se vyskytuje, tak automaticky podporujeme všechny nabízené, tedy i např. JSON. Problém může být u ostatních metod, které s tím souvisejí - například hadleru pro export na základě formátu (což pro JSON není implementováno). Máme podporu pro těch již zmíněných 7 typů - pokusím se to nějak nastínit do komentářů, aby to bylo jasné.

Zkusím přidat též nějaký příklad a typické použití pro Map/TupleQueryResult....

TupleQueryResult jsem nahradil třídou MyTupleQueryResult - stejná funkcionalita, ale řeší navíc problém při zavírání spojení s repositářem (při TupleQueryResul a jeho metodách je nutné mít aktivní spojení - bez toho metody vždy vyhazují exception - po použití je naopak spojení zavřít - řeší předefinování metody close :-)

public File makeSelectQuery(String selectQuery, String filePath)

Stejně jako obvykle tvořím File file=new File(filePath), tak zde dostanu File file=makeSelectQuery(selectQuery,filePath);

Tohle např.pak používá Bohuslav, když chce uložit výsledek dotazování do souboru, který si uživatel stahuje.

Jo, chápu, jak to myslíš s tím addTriple - upravím to tedy :-)

tomas-knap commented 11 years ago

Ok, diky :-) S tim file uz to chapu, ok, tak jo. Tu metody s baseURI bych vyhodil z toho RDFDataUnit, to nikdo nikdy nepouzije imho a jeste to bude matouci.

tomas-knap commented 11 years ago

Jirko, jeste mi tam prosim dopln metodu:

public void copyAllDataToTargetDataUnit(RDFDataUnit targetDataUnit);

tomesj commented 11 years ago

Vyřešeno - metody s baseURI přehozeny z RDFDataUnitHelper do RDFDataUnit. Přídána 1 další implementace pro metodu extractFromFile.

Metoda copyAllDataToTargetDataUnit přidána pro developery do RDFDataUnitHelper :-)