You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Martynas Jusevičius <ma...@graphity.org> on 2016/09/03 22:11:30 UTC

JENA-1030 fix incomplete

Hey,

I think https://issues.apache.org/jira/browse/JENA-1030 fix does not
work for List<Rule>.

I tried roundtripping
Rule.parseRules(GenericRuleReasoner.getRules().toString()) and what I
get is:

org.apache.jena.reasoner.rulesys.Rule$ParserException: Malformed rule
At '[ rdfs9: ( ?x rdfs:subClassOf ?y ) ( ?a rdf:type ?x ) -> ( ?a
rdf:type ?y ) ] ] '

Not sure exactly what the cause is, but I have a RulePrinter that
roundtrips successfully:
https://github.com/AtomGraph/Processor/blob/master/src/main/java/com/atomgraph/processor/util/RulePrinter.java


Martynas
atomgraph.com

Re: JENA-1030 fix incomplete

Posted by Martynas Jusevičius <ma...@graphity.org>.
You're right, sorry. Shouldn't send emails too late.

On Sun, 4 Sep 2016 at 11:42, Andy Seaborne <an...@apache.org> wrote:

>
>
> On 03/09/16 23:11, Martynas Jusevičius wrote:
> > Hey,
> >
> > I think https://issues.apache.org/jira/browse/JENA-1030 fix does not
> > work for List<Rule>.
> >
> > I tried roundtripping
> > Rule.parseRules(GenericRuleReasoner.getRules().toString()) and what I
> > get is:
>
> A java parse error?
>
> >
> > org.apache.jena.reasoner.rulesys.Rule$ParserException: Malformed rule
> > At '[ rdfs9: ( ?x rdfs:subClassOf ?y ) ( ?a rdf:type ?x ) -> ( ?a
> > rdf:type ?y ) ] ] '
> >
>
> ?? JENA-1030 was about bare URIs and I don't see a bare URI here.
>
> The problem is "[]" added by Java's List<>.toString() returned by
> getRules().toString().
>
> That is nothing to do with Jena rule syntax.
>
> Strip the out list-introduced [] and it will work.
>
> Test case:
>
>       public static void main(String ...args) {
>          String s = "[one:  (?a rdf:type ?y) <- (?a rdf:type ?y) ]" ;
>          rule(s) ;
>          String s2 = Arrays.asList(s).toString() ;
>          rule(s2) ;
>          System.out.println("DONE") ;
>          System.exit(0);
>      }
>
>      private static void rule(String string) {
>          System.out.println("Input: "+string) ;
>          try {
>              List<Rule> rules2 = Rule.parseRules(string) ;
>              System.out.println("Output: "+rules2) ;
>          } catch (Exception ex) {
>              System.out.println(ex.getMessage());
>          }
>          System.out.println() ;
>      }
>
>
> > Not sure exactly what the cause is, but I have a RulePrinter that
> > roundtrips successfully:
> >
> https://github.com/AtomGraph/Processor/blob/master/src/main/java/com/atomgraph/processor/util/RulePrinter.java
> >
>
> A shorter one perhaps:
>
>      List<Rule> rules = ...
>      String s = rules.stream()
>                      .map((r)->r.toString())
>                      .collect(Collectors.joining("\n"));
>
>         Andy
>
> >
> > Martynas
> > atomgraph.com
> >
>

Re: JENA-1030 fix incomplete

Posted by Andy Seaborne <an...@apache.org>.

On 03/09/16 23:11, Martynas Jusevi\u010dius wrote:
> Hey,
>
> I think https://issues.apache.org/jira/browse/JENA-1030 fix does not
> work for List<Rule>.
>
> I tried roundtripping
> Rule.parseRules(GenericRuleReasoner.getRules().toString()) and what I
> get is:

A java parse error?

>
> org.apache.jena.reasoner.rulesys.Rule$ParserException: Malformed rule
> At '[ rdfs9: ( ?x rdfs:subClassOf ?y ) ( ?a rdf:type ?x ) -> ( ?a
> rdf:type ?y ) ] ] '
>

?? JENA-1030 was about bare URIs and I don't see a bare URI here.

The problem is "[]" added by Java's List<>.toString() returned by 
getRules().toString().

That is nothing to do with Jena rule syntax.

Strip the out list-introduced [] and it will work.

Test case:

      public static void main(String ...args) {
         String s = "[one:  (?a rdf:type ?y) <- (?a rdf:type ?y) ]" ;
         rule(s) ;
         String s2 = Arrays.asList(s).toString() ;
         rule(s2) ;
         System.out.println("DONE") ;
         System.exit(0);
     }

     private static void rule(String string) {
         System.out.println("Input: "+string) ;
         try {
             List<Rule> rules2 = Rule.parseRules(string) ;
             System.out.println("Output: "+rules2) ;
         } catch (Exception ex) {
             System.out.println(ex.getMessage());
         }
         System.out.println() ;
     }


> Not sure exactly what the cause is, but I have a RulePrinter that
> roundtrips successfully:
> https://github.com/AtomGraph/Processor/blob/master/src/main/java/com/atomgraph/processor/util/RulePrinter.java
>

A shorter one perhaps:

     List<Rule> rules = ...
     String s = rules.stream()
                     .map((r)->r.toString())
                     .collect(Collectors.joining("\n"));

	Andy

>
> Martynas
> atomgraph.com
>