@@ -380,10 +380,10 @@ def order_subjects
380380 # List elements which are bnodes should not be targets for top-level serialization
381381 list_elements = @lists . values . map ( &:to_a ) . flatten . select ( &:node? ) . compact
382382
383- # Sort subjects by resources over bnodes, ref_counts and the subject URI itself
383+ # Sort subjects by resources and statements over bnodes, ref_counts and the subject URI itself
384384 recursable = ( @subjects . keys - list_elements ) .
385385 select { |s | !seen . include? ( s ) } .
386- map { |r | [ r . node? ? 1 : 0 , ref_count ( r ) , r ] } .
386+ map { |r | [ r . node? ? 2 : ( r . statement? ? 1 : 0 ) , ref_count ( r ) , r ] } .
387387 sort
388388
389389 subjects + recursable . map { |r | r . last }
@@ -586,7 +586,7 @@ def predicate(resource)
586586 end
587587
588588 # Render an objectList having a common subject and predicate
589- def objectList ( objects )
589+ def objectList ( subject , predicate , objects )
590590 log_debug ( "objectList" ) { objects . inspect }
591591 return if objects . empty?
592592
@@ -597,6 +597,15 @@ def objectList(objects)
597597 @output . write ",\n #{ indent ( 4 ) } "
598598 end
599599 path ( obj , :object )
600+
601+ # If subject, predicate, and object are embedded, write those bits out too.
602+ emb = RDF ::Statement ( subject , predicate , obj )
603+ if !@graph . query ( { subject : emb } ) . empty?
604+ @output . write ' {| '
605+ predicateObjectList ( emb , true )
606+ @output . write ' |}'
607+ subject_done ( emb )
608+ end
600609 end
601610 end
602611
@@ -616,10 +625,11 @@ def predicateObjectList(subject, from_bpl = false)
616625 @output . write ( "\n #{ indent ( 2 ) } " ) if properties . keys . length > 1 && from_bpl
617626 prop_list . each_with_index do |prop , i |
618627 begin
628+ pred = RDF ::URI . intern ( prop )
619629 @output . write ( ";\n #{ indent ( 2 ) } " ) if i > 0
620- predicate ( RDF :: URI . intern ( prop ) )
630+ predicate ( pred )
621631 @output . write ( " " )
622- objectList ( properties [ prop ] )
632+ objectList ( subject , pred , properties [ prop ] )
623633 end
624634 end
625635 properties . keys . length
0 commit comments