Skip to content

Latest commit

 

History

History
217 lines (182 loc) · 13.5 KB

README.md

File metadata and controls

217 lines (182 loc) · 13.5 KB

Ler Turtle para dentro de um Model

2021-03-16

Feito das 8:30 até as 9:20,

Documentado das 9:20 até as 9:40,

Revisão da documentaçao das 9:40 até 9:50

Uso simples

  • Converter Turtle para RDF:XML;
  • Criar um modelo a partir de uma especificação, para popular e processar (por exemplo fazendo consultas) e salvar resultados.

Método

  1. Procurar a documentação de Jena para ler Turtle e decidir o que fazer.
  2. Copiar o Tutorial 5, que lê um RDF, executar as is para garantir que o código de partida compila, executa e apresenta o resultado esperado (ié funcionar).
  3. Procurar um arquivo em Turtle sintaticamente correto (usei um que criei para avaliar a usabilidade de ontology-visualization)
  4. Ajustar (iterativamente, incrementalmente) o código até funcionar ou dar uma desistência BEM justificada.

Resultados

Documentação de Jena

https://jena.apache.org/documentation/io/rdf-input.html#model-usage

Memória de Testes

Início do passo 2 do método.

fabio@fabio-13Z940-G-BK71P1:~$ cd Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel/
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ ls
Tutorial05.java  vc-db-1.rdf
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ mv Tutorial05.java LeTTL.java
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ cp ~/Documentos/git/ontology-visualization/exemplo51.ttl .
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ gedit LeTTL.java &
[1] 4050
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ javac -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' LeTTL.java
Note: LeTTL.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ javac -cp -Xlint:deprecation '.:/home/fabio/apache-jena-3.17.0/lib/*' LeTTL.java
error: invalid flag: .:/home/fabio/apache-jena-3.17.0/lib/*
Usage: javac <options> <source files>
use --help for a list of possible options
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ javac-Xlint:deprecation -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' LeTTL.java
javac-Xlint:deprecation: comando não encontrado
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ javac -Xlint:deprecation -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' LeTTL.java
LeTTL.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/LerTTLEmUmModel$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' LeTTL
<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>

Fim do passo 2 da seção método.

Início do passo 3 do método.

Compilar e executar depois de ajustar para ler o turtle de exemplo51.ttl

fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' LeTTL
Exception in thread "main" java.lang.IllegalArgumentException: File: example51.ttl not found
	at LeTTL.main(LeTTL.java:51)
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ javac -Xlint:deprecation -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' LeTTL.java
LeTTL.java:49: 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/LerTTLEmUmModel$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' LeTTL
08:58:07.403 [main] ERROR org.apache.jena.riot - [line: 1, col: 1 ] O conteúdo não é permitido no prólogo.
Exception in thread "main" org.apache.jena.riot.RiotException: [line: 1, col: 1 ] O conteúdo não é permitido no prólogo.
	at org.apache.jena.riot.system.ErrorHandlerFactory$ErrorHandlerStd.fatal(ErrorHandlerFactory.java:153)
	at org.apache.jena.riot.lang.ReaderRIOTRDFXML$ErrorHandlerBridge.fatalError(ReaderRIOTRDFXML.java:313)
	at org.apache.jena.rdfxml.xmlinput.impl.ARPSaxErrorHandler.fatalError(ARPSaxErrorHandler.java:47)
	at org.apache.jena.rdfxml.xmlinput.impl.XMLHandler.warning(XMLHandler.java:199)
	at org.apache.jena.rdfxml.xmlinput.impl.XMLHandler.fatalError(XMLHandler.java:229)
	at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:181)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1471)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:978)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
	at org.apache.jena.rdfxml.xmlinput.impl.RDFXMLParser.parse(RDFXMLParser.java:101)
	at org.apache.jena.rdfxml.xmlinput.ARP.load(ARP.java:118)
	at org.apache.jena.riot.lang.ReaderRIOTRDFXML.parse(ReaderRIOTRDFXML.java:188)
	at org.apache.jena.riot.lang.ReaderRIOTRDFXML.read(ReaderRIOTRDFXML.java:86)
	at org.apache.jena.riot.RDFParser.read(RDFParser.java:353)
	at org.apache.jena.riot.RDFParser.parseNotUri(RDFParser.java:343)
	at org.apache.jena.riot.RDFParser.parse(RDFParser.java:292)
	at org.apache.jena.riot.RDFParserBuilder.parse(RDFParserBuilder.java:540)
	at org.apache.jena.riot.RDFDataMgr.parseFromInputStream(RDFDataMgr.java:901)
	at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:299)
	at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:285)
	at org.apache.jena.riot.adapters.RDFReaderRIOT.read(RDFReaderRIOT.java:69)
	at org.apache.jena.rdf.model.impl.ModelCom.read(ModelCom.java:253)
	at LeTTL.main(LeTTL.java:55)
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ 

Pelas mensagens de erro, tenho a impressão que o código está usando métodos para ler RDF:XML. Percebo, por comparação com o snippet em https://jena.apache.org/documentation/io/rdf-input.html#model-usage, que eu não deveria usar o objeto FileManager, lembro também que é o método dessa classe que levanta o aviso de deprecação. Código-fonte usado .

Vou trocar pelo snippet

fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ javac -Xlint:deprecation -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' LeTTL.java
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' LeTTL
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:prov="http://www.w3.org/ns/prov#"
    xmlns="http://example.com/"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#">
  <prov:Activity rdf:about="http://example.com/illustrating">
    <prov:qualifiedAssociation>
      <prov:Association>
        <rdfs:comment xml:lang="en">Steve helped Derek conform with the publisher's style guide.</rdfs:comment>
        <prov:hadPlan>
          <prov:Entity rdf:about="http://example.com/style-guide">
            <rdf:type rdf:resource="http://www.w3.org/ns/prov#Plan"/>
          </prov:Entity>
        </prov:hadPlan>
        <prov:hadRole>
          <prov:Role rdf:about="http://example.com/stylist"/>
        </prov:hadRole>
        <prov:agent>
          <prov:Entity rdf:about="http://example.com/steve">
            <rdf:type rdf:resource="http://www.w3.org/ns/prov#Agent"/>
            <rdf:type rdf:resource="http://www.w3.org/ns/prov#Person"/>
          </prov:Entity>
        </prov:agent>
      </prov:Association>
    </prov:qualifiedAssociation>
    <prov:qualifiedAssociation>
      <prov:Association>
        <prov:hadRole rdf:resource="http://example.com/illustrationist"/>
        <prov:agent>
          <prov:Entity rdf:about="http://example.com/derek">
            <rdf:type rdf:resource="http://www.w3.org/ns/prov#Agent"/>
            <rdf:type rdf:resource="http://www.w3.org/ns/prov#Person"/>
          </prov:Entity>
        </prov:agent>
      </prov:Association>
    </prov:qualifiedAssociation>
    <prov:wasAssociatedWith rdf:resource="http://example.com/steve"/>
    <prov:wasAssociatedWith rdf:resource="http://example.com/derek"/>
  </prov:Activity>
  <prov:Role rdf:about="http://example.com/illustratonist"/>
</rdf:RDF>
fabio@fabio-13Z940-G-BK71P1:~/Documentos/ZZfiles/sobreJena/programas/LerTTLEmUmModel$ 

Conclusão (sumário de resultados)

O código-fonte desenvolvido está no arquivo, uma versão intermediária, para documentação, foi criada e citada na memória de teste.

O código foi compilado e executado. O resultado é o esperado (ié Funcionou).

Comando para compilação:

javac -Xlint:deprecation -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' LeTTL.java

Comando para execução:

java -cp '.:/home/fabio/apache-jena-3.17.0/lib/*' LeTTL

Discussão.

Preferi comentar o código que substuí, ao invés de removê-lo.

A API de Jena, neste ponto, está mais simples que a apresentada no tutorial (e o tutorial, embora funcione, provavelmente é antigo e poderia ser simplificado).