estado do documento: concluído, não pretendo fazer atualizações.
Compilar e executar os tutoriais de código: https://jena.apache.org/tutorials/rdf_api.html
nota: as explicações sobre cada tutorial são apresentadas na respectiva página do tutorial.
A fim de não modificar os exemplos recebidos junto com Jena, copiei todos os 11 exemplos para um novo diretório. Para não misturar arquivos relativos a cada exemplo, crio um sub-diretório para cada exemplo, movo o código-fonte, compilo e, se necessário, acrescento os arquivos de dados. Para vários exemplos os arquivos de dados são iguais. Há multiplicação de arquivos de dados idênticos, mas acho que não é grande prejuízo.
nota: Os códigos-fonte contém a linha package jena.examples.rdf ;
. Caso ela seja mantida, informa que o código pertence a um pacote (que corresponde a uma hierarquia de diretórios). A compilação precisa ser algo como javac jena/examples/rdf/TutorialX.java
e a execução java jena/examples/rdf/TutorialX
.
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial1$ javac -cp /home/fabio/apache-jena-3.17.0/lib Tutorial01.java Tutorial01.java:21: error: package org.apache.jena.rdf.model does not exist import org.apache.jena.rdf.model.*; ^ Tutorial01.java:22: error: package org.apache.jena.vocabulary does not exist import org.apache.jena.vocabulary.*; ^ Tutorial01.java:34: error: cannot find symbol Model model = ModelFactory.createDefaultModel(); ^ symbol: class Model location: class Tutorial01 Tutorial01.java:34: error: cannot find symbol Model model = ModelFactory.createDefaultModel(); ^ symbol: variable ModelFactory location: class Tutorial01 Tutorial01.java:37: error: cannot find symbol Resource johnSmith = model.createResource(personURI); ^ symbol: class Resource location: class Tutorial01 Tutorial01.java:40: error: cannot find symbol johnSmith.addProperty(VCARD.FN, fullName); ^ symbol: variable VCARD location: class Tutorial01 6 errors fabio@fabio-13Z940-G-BK7
comando para compilação que funcionou: javac -cp '/home/fabio/apache-jena-3.17.0/lib/*' Tutorial01.java
mas falha para executar veja os comandos aqui.
Como cheguei a esse comando: Achei esta referência:https://info.sice.indiana.edu/~dingying/Teaching/Z636/Slides/InstallJena.txt
Referências que não resolveram:
http://www.inf.ed.ac.uk/teaching/courses/masws/Coding/build/html/jena.html http://www-inf.it-sudparis.eu/~gaaloulw/KM/courses/6-Course_KM_Jena.pdf
Para (tentar) executar:
Comentei a linha: package jena.examples.rdf ;
para não precisar colocar este código dentro de um pacote.
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial1$ javac -cp '/home/fabio/apache-jena-3.17.0/lib/*' Tutorial01.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial1$ java -cp '/home/fabio/apache-jena-3.17.0/lib/*' Tutorial01 Erro: Não foi possível localizar nem carregar a classe principal Tutorial01 Causada por: java.lang.ClassNotFoundException: Tutorial01 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial1$ java Tutorial01 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/jena/rdf/model/ModelFactory at Tutorial01.main(Tutorial01.java:34) Caused by: java.lang.ClassNotFoundException: org.apache.jena.rdf.model.ModelFactory at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 1 more fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial1$ java -cp '/home/fabio/apache-jena-3.17.0/lib/*' Tutorial01 Erro: Não foi possível localizar nem carregar a classe principal Tutorial01 Causada por: java.lang.ClassNotFoundException: Tutorial01 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial1$ cat Tutorial01.java
Para (tentar) executar dentro do pacote:
fabio@fabio-13Z940-G-BK71P1:~/apache-jena-3.17.0/src-examples$ javac -cp '/home/fabio/apache-jena-3.17.0/lib/*' jena/examples/rdf/Tutorial01.java fabio@fabio-13Z940-G-BK71P1:~/apache-jena-3.17.0/src-examples$ ls arq data jena jena-examples tdb fabio@fabio-13Z940-G-BK71P1:~/apache-jena-3.17.0/src-examples$ find . -name *.class ./jena/examples/rdf/Tutorial01.class fabio@fabio-13Z940-G-BK71P1:~/apache-jena-3.17.0/src-examples$ java -cp '/home/fabio/apache-jena-3.17.0/lib/*' jena/examples/rdf/Tutorial01 Erro: Não foi possível localizar nem carregar a classe principal jena.examples.rdf.Tutorial01 Causada por: java.lang.ClassNotFoundException: jena.examples.rdf.Tutorial01 fabio@fabio-13Z940-G-BK71P1:~/apache-jena-3.17.0/src-examples$ java jena/examples/rdf/Tutorial01 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/jena/rdf/model/ModelFactory at jena.examples.rdf.Tutorial01.main(Tutorial01.java:34) Caused by: java.lang.ClassNotFoundException: org.apache.jena.rdf.model.ModelFactory at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 1 more fabio@fabio-13Z940-G-BK71P1:~/apache-jena-3.17.0/src-examples$
Achei um post que reporta um problema parecido: https://stackoverflow.com/questions/49949842/how-do-i-interact-with-apache-jena-locally-macos, mas a solução é incluir um classpath. Acho que fiz algo equivalente com -cp
. O link para o exemplo completo dá num blog: https://henrietteharmse.com/2018/04/10/creating-writing-and-reading-jena-tdb2-datasets/
Achei uma apresentação https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjT4-rlhMftAhXBE7kGHSwPBAcQFjAEegQIDRAC&url=https%3A%2F%2Finfo.sice.indiana.edu%2F~dingying%2FTeaching%2FZ636%2FSlides%2FJenaRDFAPI.ppt&usg=AOvVaw1ILc8VfjCZqjsB_w6tV_kK que baixei localmente. Talvez a idéia de colocar asterisco no -cp não seja muito boa...
Consegui resolver.
abio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial1$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial01.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial1$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial01 Minha mensagem. fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial1$
Minha interpretação: quando uso -cp
, informo para procurar as classes em algum diretório. Como informei, sobrescrevo a informação do classpath padrão para a execução. Padrão que acredito que seja buscar no diretório corrente. Caso eu não inclua o diretório corrente no classpath, a máquina virtual não busca no diretório corrente, que é onde está a classe que acabei de compilar. Isto gera um class not found
para a classe que está na pasta corrente. Isto se corrige incluindo a pasta corrente no classpath. Acho que eu não preciso fazer isso para compilação quando tenho um arquivo só, mas acho que não causa erro se eu incluir na compilação também. Então os comandos de compilação e execução ficam:
javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial01.java
java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial01
Acho também que esta string (só) funciona em Linux. Em Windows talvez seja "só" trocar o colon (:) por semicolon (;), mas pode ser mais complicado.
Da primeira vez que fiz, como o código não escreve nada na tela, fiquei meio em dúvida se executou algo (hipótese de mundo aberto: pode existir algo que eu não sei e que faz esse comando não executar o programa e não dar mensagem de erro), então inseri um System.out.println
.
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial2$ ls Tutorial02.class Tutorial02.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial2$ rm Tutorial02.class fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial2$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial02.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial2$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial02 Erro: Não foi possível localizar nem carregar a classe principal Tutorial02 Causada por: java.lang.NoClassDefFoundError: jena/examples/rdf/Tutorial02 (wrong name: Tutorial02) fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial2$ ls Tutorial02.class Tutorial02.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial2$ gedit Tutorial02.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial2$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial02.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial2$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial02 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial2$ cat Tutorial02.java
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial3$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial03.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial3$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial03 http://somewhere/JohnSmith http://www.w3.org/2001/vcard-rdf/3.0#N 5190b8a4-c1b5-4b46-bb7d-a6e9b8ff8dc5 . http://somewhere/JohnSmith http://www.w3.org/2001/vcard-rdf/3.0#FN "John Smith" . 5190b8a4-c1b5-4b46-bb7d-a6e9b8ff8dc5 http://www.w3.org/2001/vcard-rdf/3.0#Family "Smith" . 5190b8a4-c1b5-4b46-bb7d-a6e9b8ff8dc5 http://www.w3.org/2001/vcard-rdf/3.0#Given "John" . fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial3$
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mkdir Tutorial4 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mv Tutorial04.java Tutorial4 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ cd Tutorial4 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial4$ ls Tutorial04.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial4$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial04.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial4$ gedit Tutorial04.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial4$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial04.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial4$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial04 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:vcard="http://www.w3.org/2001/vcard-rdf/3.0#"> <rdf:Description rdf:about="http://somewhere/JohnSmith"> <vcard:N rdf:parseType="Resource"> <vcard:Family>Smith</vcard:Family> <vcard:Given>John</vcard:Given> </vcard:N> <vcard:FN>John Smith</vcard:FN> </rdf:Description> </rdf:RDF> fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial4$
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mkdir Tutorial5 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mv Tutorial05.java Tutorial5 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ cd Tutorial5 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial5$ ls Tutorial05.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial5$ gedit Tutorial05.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial5$ fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial5$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial05.java Note: Tutorial05.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial5$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' -Xlint Tutorial05.java Tutorial05.java:42: warning: [deprecation] get() in FileManager has been deprecated InputStream in = FileManager.get().open( inputFileName ); ^ 1 warning fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial5$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial05 Exception in thread "main" java.lang.IllegalArgumentException: File: vc-db-1.rdf not found at Tutorial05.main(Tutorial05.java:44) fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial5$ cp ../../vc-db-1.rdf . fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial5$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial05 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#"> <rdf:Description rdf:about="http://somewhere/SarahJones"> <vCard:N rdf:parseType="Resource"> <vCard:Given>Sarah</vCard:Given> <vCard:Family>Jones</vCard:Family> </vCard:N> <vCard:FN>Sarah Jones</vCard:FN> </rdf:Description> <rdf:Description rdf:about="http://somewhere/JohnSmith"> <vCard:N rdf:parseType="Resource"> <vCard:Given>John</vCard:Given> <vCard:Family>Smith</vCard:Family> </vCard:N> <vCard:FN>John Smith</vCard:FN> </rdf:Description> <rdf:Description rdf:about="http://somewhere/MattJones"> <vCard:N rdf:parseType="Resource"> <vCard:Given>Matthew</vCard:Given> <vCard:Family>Jones</vCard:Family> </vCard:N> <vCard:FN>Matt Jones</vCard:FN> </rdf:Description> <rdf:Description rdf:about="http://somewhere/RebeccaSmith"> <vCard:N rdf:parseType="Resource"> <vCard:Given>Rebecca</vCard:Given> <vCard:Family>Smith</vCard:Family> </vCard:N> <vCard:FN>Becky Smith</vCard:FN> </rdf:Description> </rdf:RDF> fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial5$
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mkdir Tutorial6 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mv Tutorial06.java Tutorial6 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ cd Tutorial6 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial6$ gedit Tutorial06.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial6$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' -Xlint Tutorial06.java Tutorial06.java:39: warning: [deprecation] get() in FileManager has been deprecated InputStream in = FileManager.get().open(inputFileName); ^ 1 warning fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial6$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial06 Exception in thread "main" java.lang.IllegalArgumentException: File: vc-db-1.rdf not found at Tutorial06.main(Tutorial06.java:41) fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial6$ cp ../../vc-db-1.rdf . fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial6$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial06 The nicknames of "John Smith" are: Adman Smithy fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial6$
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mkdir Tutorial7 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mv Tutorial07.java Tutorial7 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ cd Tutorial7 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial7$ gedit Tutorial07.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial7$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' -Xlint Tutorial07.java Tutorial07.java:38: warning: [deprecation] get() in FileManager has been deprecated InputStream in = FileManager.get().open(inputFileName); ^ 1 warning fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial7$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial07 Exception in thread "main" java.lang.IllegalArgumentException: File: vc-db-1.rdf not found at Tutorial07.main(Tutorial07.java:40) fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial7$ cp ../../vc-db-1.rdf . fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial7$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial07 The database contains vcards for: Sarah Jones John Smith Matt Jones Becky Smith fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial7$
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mkdir Tutorial8 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mv Tutorial08.java Tutorial8 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ cd Tutorial8 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial8$ gedit Tutorial08.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial8$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' -Xlint Tutorial08.java Tutorial08.java:39: warning: [deprecation] get() in FileManager has been deprecated InputStream in = FileManager.get().open(inputFileName); ^ 1 warning fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial8$ cp ../../vc-db-1.rdf . fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial8$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial08 The database contains vcards for: Becky Smith John Smith fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial8$
Arquivo auxiliar: https://jena.apache.org/tutorials/sparql_data/vc-db-3.rdf
Diretório contendo arquivos auxiliares: https://jena.apache.org/tutorials/sparql_data/
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mkdir Tutorial9 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mv Tutorial09.java Tutorial9 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ cd Tutorial9 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial9$ gedit Tutorial09.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial9$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' -Xlint Tutorial09.java Tutorial09.java:39: warning: [deprecation] get() in FileManager has been deprecated InputStream in1 = FileManager.get().open(inputFileName1); ^ Tutorial09.java:43: warning: [deprecation] get() in FileManager has been deprecated InputStream in2 = FileManager.get().open(inputFileName2); ^ 2 warnings fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial9$ cp ../../vc-db-1.rdf . fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial9$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial09 Exception in thread "main" java.lang.IllegalArgumentException: File: vc-db-3.rdf not found at Tutorial09.main(Tutorial09.java:41) fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial9$ cp ../../vc-db-3.rdf . fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial9$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial09 Exception in thread "main" java.lang.IllegalArgumentException: File: vc-db-4.rdf not found at Tutorial09.main(Tutorial09.java:45) fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial9$ cp ../../vc-db-4.rdf . fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial9$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial09 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#"> <rdf:Description rdf:about="http://somewhere/JohnSmith"> <vCard:EMAIL> <vCard:internet> <rdf:value>[email protected]</rdf:value> </vCard:internet> </vCard:EMAIL> <vCard:FN>John Smith</vCard:FN> <vCard:N rdf:parseType="Resource"> <vCard:Family>Smith</vCard:Family> <vCard:Given>John</vCard:Given> </vCard:N> </rdf:Description> </rdf:RDF> fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial9$ ### Tutorial 10 [Pasta com código-fonte](Arquivos-ExecucaoTutoriaisJena/Tutorial10)
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mkdir Tutorial10 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mv Tutorial10.java Tutorial10 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ cd Tutorial10 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial10$ ls Tutorial10.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial10$ gedit Tutorial10.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial10$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' -Xlint Tutorial10.java Tutorial10.java:40: warning: [deprecation] get() in FileManager has been deprecated InputStream in = FileManager.get().open( inputFileName ); ^ 1 warning fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial10$ cp ../../vc-db-1.rdf . fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial10$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial10 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#"> <rdf:Description rdf:about="http://somewhere/SarahJones"> <vCard:N rdf:parseType="Resource"> <vCard:Given>Sarah</vCard:Given> <vCard:Family>Jones</vCard:Family> </vCard:N> <vCard:FN>Sarah Jones</vCard:FN> </rdf:Description> <rdf:Bag> <rdf:li> <rdf:Description rdf:about="http://somewhere/RebeccaSmith"> <vCard:N rdf:parseType="Resource"> <vCard:Given>Rebecca</vCard:Given> <vCard:Family>Smith</vCard:Family> </vCard:N> <vCard:FN>Becky Smith</vCard:FN> </rdf:Description> </rdf:li> <rdf:li> <rdf:Description rdf:about="http://somewhere/JohnSmith"> <vCard:N rdf:parseType="Resource"> <vCard:Given>John</vCard:Given> <vCard:Family>Smith</vCard:Family> </vCard:N> <vCard:FN>John Smith</vCard:FN> </rdf:Description> </rdf:li> </rdf:Bag> <rdf:Description rdf:about="http://somewhere/MattJones"> <vCard:N rdf:parseType="Resource"> <vCard:Given>Matthew</vCard:Given> <vCard:Family>Jones</vCard:Family> </vCard:N> <vCard:FN>Matt Jones</vCard:FN> </rdf:Description> </rdf:RDF> The bag contains: Becky Smith John Smith fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial10$
abio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mkdir Tutorial11 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ mv Tutorial11.java Tutorial11 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas$ cd Tutorial11 fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial11$ gedit Tutorial11.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial11$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' -Xlint Tutorial11.java fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial11$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' Tutorial11 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> <rdf:Description> <rdfs:label rdf:parseType="Literal"><em>chat</em></rdfs:label> <rdfs:label xml:lang="fr">chat</rdfs:label> <rdfs:label xml:lang="en">chat</rdfs:label> </rdf:Description> </rdf:RDF> _:Bb1a830e6X2D28b0X2D4d92X2D89c2X2D97f082ba1a83 <http://www.w3.org/2000/01/rdf-schema#label> "11"^^<http://www.w3.org/2001/XMLSchema#long> . _:Bb1a830e6X2D28b0X2D4d92X2D89c2X2D97f082ba1a83 <http://www.w3.org/2000/01/rdf-schema#label> "11" . fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/Tutorial11$
- O tutorial 1 mostra como Criar instâncias. Inicia Inicia com um nó contendo o IRI 'da pessoa';
- O tutorial 2 mostra como associar o nó a outros recursos (se a terminologia for RDF), ou indivíduos (se a terminologia for OWL). O conjunto representa uma pessoa. Inicia com um nó contendo o IRI 'da pessoa', conecta este nó, através de predicados (se a terminologia for RDF), ou propriedades de dados (dataProperty, dataPropertyAssertion, se a terminologia for OWL):
vcard:FN
,vcard:N
,vcard:Family
,vcard:Given
aos nós que contém as instâncias: 'John Smith', 'John', 'Smith'. Resta saber:- Resta saber se conectar a outras representações de pessoas (se possível), é diferente;
- Resta saber como armazenar permanentemente o resultado.
- Nota: o conceito de indivíduo em OWL relaciona-se com com o conceito de instância em RDF e OOP.
- Nota: referência para terminologia de OWL: https://www.w3.org/TR/2012/REC-owl2-primer-20121211/
- O tutorial 3 mostra como listar instâncias no console. Não é uma consulta, é um dump de tudo que estiver armazenado.
- O tutorial 4 mostra como armazenar instâncias em um arquivo (codificado em RDF/XML). Isto responde 2.2;
- O tutorial 5 mostra como ler instâncias armazenadas em um arquivo;
- O tutorial 6 mostra como Recuperar instâncias;
- Já tem alguma conexão com consultas, mas a explicação é mais próxima de Prolog que de SPARQL.
- Tem uma questão sobre o predicado/propriedade ser ou não único. Se for único, getProperty. Senão, listProperties, mas como saber se o predicado é único ou não? Neste momento ainda não há informação sobre cardinalidade, que faz parte da especificação OWL.
- O tutorial 7 mostra um formato de consulta Sujeito-Predicado-Objeto (SPO), similar ao que é possível fazer com
rdf/3
de SWI-Prolog. Isto é bastante poderoso, se puder ser encadeado, como em SWI-Prolog pois permite navegar no grafo de conhecimento e apresentar resultados conforme padrões iguais ao subgrafo são encontrados. - O tutorial 8 mostra como filtrar por conteúdo recuperado. Tem a ver com o processamento de expressões regulares que é possível dentro da cláusula
WHERE
em uma query SPARQL. - O tutorial 9 mostra como fundir conjuntos de dados.
- O tutorial 10 mostra como usar as coleções definidas em RDF: Bag, Alt, Seq.
- O tutorial 11 apresenta como Jena codifica tipos de dados e idiomas. Tem relação com XML Schema, elementos como
^^Integer
e@en
, embora não apresente isto explicitamente.
Tutoriais executados.
Eu tinha esperança que os tutoriais apresentassem uma resposta direta ao que eu considero CRUD. Expectativa frustrada. Eles trazem elementos, uns até 'mais avançados', na minha concepção.
Convém considerar a criação de um tutorial apresentando o que considero CRUD usando Jena. Ainda não atingi o objetivo principal.
graph LR
G[Alguma ontologia de teste] -->|éInsumoDe| A[CRUD com Jena em linha de comando]
J[versão de SO e Java] -->|éPréCondiçãoDe| A[CRUD com Jena em linha de comando]
L[esta página] -->|éResultadoDe| A[CRUD com Jena em linha de comando]
B[Instalar Jena] -->|éSubPlanoDe| A[CRUD com Jena em linha de comando]
C[Testar Jena] -->|éSubPlanoDe| A
D[Examinar o que é atingível usando Jena] -->|éSubPlanoDe| A
E[Definir tarefas para atingir o objetivo principal] -->|éSubPlanoDe| A
F[atingir o objetivo principal] -->|éSubPlanoDe| A
F-->|dependeDe|E
E-->|dependeDe|D
D-->|dependeDe|C
C-->|dependeDe|B
gantt
title A Gantt Diagram
dateFormat YYYY-MM-DD
todayMarker off
section CRUD com Jena em linha de comando
Instalar Jena : a1, 2020-12-10, 1d
Testar Jena : a2, after a1 , 1d
Examinar o que é atingível : a3, after a2 , 1d
Definir tarefas para atingir o objetivo principal : a4, after a3, 1d
Atingir o objetivo principal : a5, after a4