Holger Knublauch

Tree now uses SPIN templates

...@@ -515,36 +515,42 @@ app:ClassFormBody ...@@ -515,36 +515,42 @@ app:ClassFormBody
515 ] 515 ]
516 ] . 516 ] .
517 517
518 -app:ClassTreeDataProvider 518 +app:ClassTreeChildren
519 - rdf:type app:QueryTreeDataProvider ; 519 + rdf:type spin:SelectTemplate ;
520 - rdfs:comment "A data provider for a class tree starting at rdfs:Resource."^^xsd:string ; 520 + rdfs:comment "A template that delivers all (named) subclasses of a given parent class, using rdfs:subClassOf."^^xsd:string ;
521 - rdfs:label "Class tree data provider"^^xsd:string ; 521 + rdfs:label "Class tree children"^^xsd:string ;
522 - arg:childrenQuery 522 + rdfs:subClassOf app:TreeChildrenTemplates ;
523 + spin:body
523 [ rdf:type sp:Select ; 524 [ rdf:type sp:Select ;
524 sp:orderBy ([ sp:varName "label"^^xsd:string 525 sp:orderBy ([ sp:varName "label"^^xsd:string
525 ]) ; 526 ]) ;
526 - sp:resultVariables ([ sp:varName "child"^^xsd:string 527 + sp:resultVariables ([ sp:varName "node"^^xsd:string
527 ] [ sp:varName "label"^^xsd:string 528 ] [ sp:varName "label"^^xsd:string
528 ] [ sp:varName "leaf"^^xsd:string 529 ] [ sp:varName "leaf"^^xsd:string
529 ] [ sp:varName "icon"^^xsd:string 530 ] [ sp:varName "icon"^^xsd:string
530 - ] [ sp:varName "type"^^xsd:string
531 ]) ; 531 ]) ;
532 sp:where ([ sp:object 532 sp:where ([ sp:object
533 [ sp:varName "parent"^^xsd:string 533 [ sp:varName "parent"^^xsd:string
534 ] ; 534 ] ;
535 sp:predicate rdfs:subClassOf ; 535 sp:predicate rdfs:subClassOf ;
536 sp:subject 536 sp:subject
537 - [ sp:varName "child"^^xsd:string 537 + [ sp:varName "node"^^xsd:string
538 + ]
539 + ] [ rdf:type sp:Filter ;
540 + sp:expression
541 + [ rdf:type sp:isIRI ;
542 + sp:arg1 [ sp:varName "node"^^xsd:string
543 + ]
538 ] 544 ]
539 ] [ rdf:type sp:Bind ; 545 ] [ rdf:type sp:Bind ;
540 sp:expression 546 sp:expression
541 [ rdf:type sp:notExists ; 547 [ rdf:type sp:notExists ;
542 sp:elements ([ sp:object 548 sp:elements ([ sp:object
543 - [ sp:varName "child"^^xsd:string 549 + [ sp:varName "node"^^xsd:string
544 ] ; 550 ] ;
545 sp:predicate rdfs:subClassOf ; 551 sp:predicate rdfs:subClassOf ;
546 sp:subject 552 sp:subject
547 - [ sp:varName "grandChild"^^xsd:string 553 + [ sp:varName "child"^^xsd:string
548 ] 554 ]
549 ]) 555 ])
550 ] ; 556 ] ;
...@@ -554,7 +560,7 @@ app:ClassTreeDataProvider ...@@ -554,7 +560,7 @@ app:ClassTreeDataProvider
554 ] [ rdf:type sp:Bind ; 560 ] [ rdf:type sp:Bind ;
555 sp:expression 561 sp:expression
556 [ rdf:type ui:label ; 562 [ rdf:type ui:label ;
557 - sp:arg1 [ sp:varName "child"^^xsd:string 563 + sp:arg1 [ sp:varName "node"^^xsd:string
558 ] 564 ]
559 ] ; 565 ] ;
560 sp:variable 566 sp:variable
...@@ -565,39 +571,60 @@ app:ClassTreeDataProvider ...@@ -565,39 +571,60 @@ app:ClassTreeDataProvider
565 sp:variable 571 sp:variable
566 [ sp:varName "icon"^^xsd:string 572 [ sp:varName "icon"^^xsd:string
567 ] 573 ]
568 - ] [ rdf:type sp:Bind ;
569 - sp:expression
570 - [ rdf:type spl:object ;
571 - sp:arg1 [ sp:varName "child"^^xsd:string
572 - ] ;
573 - sp:arg2 rdf:type
574 - ] ;
575 - sp:variable
576 - [ sp:varName "type"^^xsd:string
577 - ]
578 ]) 574 ])
579 - ] ; 575 + ] .
580 - arg:id [ sp:varName "id"^^xsd:string 576 +
581 - ] ; 577 +app:ClassTreeDataProvider
582 - arg:rootsQuery 578 + rdf:type app:TreeDataProvider ;
579 + rdfs:comment "A data provider for a class tree starting at rdfs:Resource."^^xsd:string ;
580 + rdfs:label "Class tree data provider"^^xsd:string ;
581 + arg:treeChildrenTemplate
582 + app:ClassTreeChildren ;
583 + arg:treeRootsTemplate
584 + app:ClassTreeRoots .
585 +
586 +app:ClassTreeRoots
587 + rdf:type spin:SelectTemplate ;
588 + rdfs:label "Class tree roots"^^xsd:string ;
589 + rdfs:subClassOf app:TreeRootsTemplates ;
590 + spin:body
583 [ rdf:type sp:Select ; 591 [ rdf:type sp:Select ;
584 - sp:resultVariables ([ sp:varName "child"^^xsd:string 592 + sp:resultVariables ([ sp:varName "node"^^xsd:string
585 ] [ sp:varName "label"^^xsd:string 593 ] [ sp:varName "label"^^xsd:string
586 ] [ sp:varName "leaf"^^xsd:string 594 ] [ sp:varName "leaf"^^xsd:string
587 ] [ sp:varName "icon"^^xsd:string 595 ] [ sp:varName "icon"^^xsd:string
588 ]) ; 596 ]) ;
589 sp:where ([ rdf:type sp:Bind ; 597 sp:where ([ rdf:type sp:Bind ;
590 - sp:expression rdfs:Resource ; 598 + sp:expression
599 + [ rdf:type sp:coalesce ;
600 + sp:arg1 [ sp:varName "root"^^xsd:string
601 + ] ;
602 + sp:arg2 rdfs:Resource
603 + ] ;
591 sp:variable 604 sp:variable
592 - [ sp:varName "child"^^xsd:string 605 + [ sp:varName "node"^^xsd:string
593 ] 606 ]
594 ] [ rdf:type sp:Bind ; 607 ] [ rdf:type sp:Bind ;
595 - sp:expression "Resource" ; 608 + sp:expression
609 + [ rdf:type ui:label ;
610 + sp:arg1 [ sp:varName "node"^^xsd:string
611 + ]
612 + ] ;
596 sp:variable 613 sp:variable
597 [ sp:varName "label"^^xsd:string 614 [ sp:varName "label"^^xsd:string
598 ] 615 ]
599 ] [ rdf:type sp:Bind ; 616 ] [ rdf:type sp:Bind ;
600 - sp:expression "false"^^xsd:boolean ; 617 + sp:expression
618 + [ rdf:type sp:notExists ;
619 + sp:elements ([ sp:object
620 + [ sp:varName "node"^^xsd:string
621 + ] ;
622 + sp:predicate rdfs:subClassOf ;
623 + sp:subject
624 + [ sp:varName "child"^^xsd:string
625 + ]
626 + ])
627 + ] ;
601 sp:variable 628 sp:variable
602 [ sp:varName "leaf"^^xsd:string 629 [ sp:varName "leaf"^^xsd:string
603 ] 630 ]
...@@ -3619,86 +3646,6 @@ app:PropertyLabel ...@@ -3619,86 +3646,6 @@ app:PropertyLabel
3619 ] 3646 ]
3620 ] . 3647 ] .
3621 3648
3622 -app:QueryTreeDataProvider
3623 - rdf:type ui:NodeClass ;
3624 - rdfs:comment "A TreeDataProvider backed by two SELECT queries - one to get the roots, and one to get the children of a given node."^^xsd:string ;
3625 - rdfs:label "Query tree data provider"^^xsd:string ;
3626 - rdfs:subClassOf app:TreeDataProvider ;
3627 - spin:constraint
3628 - [ rdf:type spl:Argument ;
3629 - rdfs:comment "The query to get the children."^^xsd:string ;
3630 - spl:predicate arg:childrenQuery ;
3631 - spl:valueType sp:Select
3632 - ] ;
3633 - spin:constraint
3634 - [ rdf:type spl:Argument ;
3635 - rdfs:comment "The query to get the roots of the tree."^^xsd:string ;
3636 - spl:predicate arg:rootsQuery ;
3637 - spl:valueType sp:Select
3638 - ] ;
3639 - ui:prototype
3640 - [ rdf:type ui:group ;
3641 - ui:child
3642 - [ rdf:type ui:if ;
3643 - ui:child
3644 - [ rdf:type app:QueryTreeDataProviderHelper ;
3645 - ui:childIndex 0 ;
3646 - ui:resultSet
3647 - [ sp:varName "rootsQuery"^^xsd:string
3648 - ]
3649 - ] ;
3650 - ui:childIndex 0 ;
3651 - ui:condition
3652 - [ rdf:type sp:or ;
3653 - sp:arg1 [ rdf:type sp:eq ;
3654 - sp:arg1 [ sp:varName "id"^^xsd:string
3655 - ] ;
3656 - sp:arg2 "1"
3657 - ] ;
3658 - sp:arg2 [ rdf:type sp:not ;
3659 - sp:arg1 [ rdf:type sp:bound ;
3660 - sp:arg1 [ sp:varName "id"^^xsd:string
3661 - ]
3662 - ]
3663 - ]
3664 - ]
3665 - ] ;
3666 - ui:child
3667 - [ rdf:type ui:else ;
3668 - ui:child
3669 - [ rdf:type ui:group ;
3670 - let:parent
3671 - [ rdf:type ui:decodeNode ;
3672 - sp:arg1 [ rdf:type app:removeUniqueId ;
3673 - sp:arg1 [ sp:varName "id"^^xsd:string
3674 - ]
3675 - ]
3676 - ] ;
3677 - ui:child
3678 - [ rdf:type app:QueryTreeDataProviderHelper ;
3679 - ui:childIndex 0 ;
3680 - ui:resultSet
3681 - [ sp:varName "childrenQuery"^^xsd:string
3682 - ]
3683 - ] ;
3684 - ui:childIndex 0
3685 - ] ;
3686 - ui:childIndex 1
3687 - ]
3688 - ] .
3689 -
3690 -app:QueryTreeDataProviderHelper
3691 - rdf:type ui:NodeClass ;
3692 - rdfs:label "Query tree data provider helper"^^xsd:string ;
3693 - rdfs:subClassOf app:TreeElements ;
3694 - spin:constraint
3695 - [ rdf:type spl:Argument ;
3696 - rdfs:comment "The query to execute."^^xsd:string ;
3697 - spl:predicate ui:resultSet ;
3698 - spl:valueType sp:Select
3699 - ] ;
3700 - ui:prototype <http://appschema.org/imports/queryTreeDataProviderHelper.uispin.html> .
3701 -
3702 app:ResourceEnumDropDownEditor 3649 app:ResourceEnumDropDownEditor
3703 rdf:type app:ObjectEditorClass ; 3650 rdf:type app:ObjectEditorClass ;
3704 rdfs:label "Resource enum drop down editor"^^xsd:string ; 3651 rdfs:label "Resource enum drop down editor"^^xsd:string ;
...@@ -5509,11 +5456,30 @@ app:Tree ...@@ -5509,11 +5456,30 @@ app:Tree
5509 spl:predicate arg:onSelect ; 5456 spl:predicate arg:onSelect ;
5510 spl:valueType xsd:string 5457 spl:valueType xsd:string
5511 ] ; 5458 ] ;
5459 + spin:constraint
5460 + [ rdf:type spl:Argument ;
5461 + rdfs:comment "A root node that can overload the default root of the data provider. For example, app:ClassTreeDataProvider starts at rdfs:Resource by default - set arg:root to owl:Thing to start there instead."^^xsd:string ;
5462 + spl:optional "true"^^xsd:boolean ;
5463 + spl:predicate arg:root ;
5464 + spl:valueType rdfs:Resource
5465 + ] ;
5512 ui:prototype <http://appschema.org/imports/tree.uispin.html> . 5466 ui:prototype <http://appschema.org/imports/tree.uispin.html> .
5513 5467
5468 +app:TreeChildrenTemplates
5469 + rdf:type spin:SelectTemplate ;
5470 + rdfs:label "Tree children templates"^^xsd:string ;
5471 + rdfs:subClassOf app:TreeTemplates ;
5472 + spin:abstract "true"^^xsd:boolean ;
5473 + spin:constraint
5474 + [ rdf:type spl:Argument ;
5475 + rdfs:comment "The parent node to get the children of."^^xsd:string ;
5476 + spl:predicate arg:parent ;
5477 + spl:valueType rdfs:Resource
5478 + ] .
5479 +
5514 app:TreeDataProvider 5480 app:TreeDataProvider
5515 rdf:type ui:NodeClass ; 5481 rdf:type ui:NodeClass ;
5516 - rdfs:comment "Base class for various kinds of data providers implementing Ajax call-backs to app:Tree components."^^xsd:string ; 5482 + rdfs:comment "A TreeDataProvider is backed by two SELECT queries - one to get the roots, and one to get the children of a given node."^^xsd:string ;
5517 rdfs:label "Tree data provider"^^xsd:string ; 5483 rdfs:label "Tree data provider"^^xsd:string ;
5518 rdfs:subClassOf app:TreeElements ; 5484 rdfs:subClassOf app:TreeElements ;
5519 spin:constraint 5485 spin:constraint
...@@ -5522,13 +5488,135 @@ app:TreeDataProvider ...@@ -5522,13 +5488,135 @@ app:TreeDataProvider
5522 spl:predicate arg:id ; 5488 spl:predicate arg:id ;
5523 spl:valueType xsd:string 5489 spl:valueType xsd:string
5524 ] ; 5490 ] ;
5525 - ui:abstract "true"^^xsd:boolean . 5491 + spin:constraint
5492 + [ rdf:type spl:Argument ;
5493 + rdfs:comment "The root resource. If none is specified, then the system will use compute the root(s) from the roots template."^^xsd:string ;
5494 + spl:optional "true"^^xsd:boolean ;
5495 + spl:predicate arg:root ;
5496 + spl:valueType rdfs:Resource
5497 + ] ;
5498 + spin:constraint
5499 + [ rdf:type spl:Argument ;
5500 + rdfs:comment "The subclass of app:TreeChildrenTemplates that delivers the children of a given parent node."^^xsd:string ;
5501 + spl:predicate arg:treeChildrenTemplate ;
5502 + spl:valueType spin:Template
5503 + ] ;
5504 + spin:constraint
5505 + [ rdf:type spl:Argument ;
5506 + rdfs:comment "A subclass of app:TreeRootsTemplates that delivers the roots of the tree. Will be bypassed if the tree itself defined an arg:rootResource."^^xsd:string ;
5507 + spl:optional "true"^^xsd:boolean ;
5508 + spl:predicate arg:treeRootsTemplate ;
5509 + spl:valueType spin:Template
5510 + ] ;
5511 + ui:prototype
5512 + [ rdf:type ui:group ;
5513 + ui:child
5514 + [ rdf:type ui:if ;
5515 + ui:child
5516 + [ rdf:type ui:call ;
5517 + arg:root
5518 + [ sp:varName "root"^^xsd:string
5519 + ] ;
5520 + ui:child
5521 + [ rdf:type app:TreeDataProviderHelper ;
5522 + ui:childIndex 0 ;
5523 + ui:resultSet
5524 + [ sp:varName "rs"^^xsd:string
5525 + ]
5526 + ] ;
5527 + ui:childIndex 0 ;
5528 + ui:template
5529 + [ sp:varName "treeRootsTemplate"^^xsd:string
5530 + ]
5531 + ] ;
5532 + ui:childIndex 0 ;
5533 + ui:condition
5534 + [ rdf:type sp:or ;
5535 + sp:arg1 [ rdf:type sp:eq ;
5536 + sp:arg1 [ sp:varName "id"^^xsd:string
5537 + ] ;
5538 + sp:arg2 "1"
5539 + ] ;
5540 + sp:arg2 [ rdf:type sp:not ;
5541 + sp:arg1 [ rdf:type sp:bound ;
5542 + sp:arg1 [ sp:varName "id"^^xsd:string
5543 + ]
5544 + ]
5545 + ]
5546 + ]
5547 + ] ;
5548 + ui:child
5549 + [ rdf:type ui:else ;
5550 + ui:child
5551 + [ rdf:type ui:call ;
5552 + arg:parent
5553 + [ rdf:type ui:decodeNode ;
5554 + sp:arg1 [ rdf:type app:removeUniqueId ;
5555 + sp:arg1 [ sp:varName "id"^^xsd:string
5556 + ]
5557 + ]
5558 + ] ;
5559 + ui:child
5560 + [ rdf:type app:TreeDataProviderHelper ;
5561 + ui:childIndex 0 ;
5562 + ui:resultSet
5563 + [ sp:varName "rs"^^xsd:string
5564 + ]
5565 + ] ;
5566 + ui:childIndex 0 ;
5567 + ui:template
5568 + [ sp:varName "treeChildrenTemplate"^^xsd:string
5569 + ]
5570 + ] ;
5571 + ui:childIndex 1
5572 + ]
5573 + ] .
5574 +
5575 +app:TreeDataProviderHelper
5576 + rdf:type ui:NodeClass ;
5577 + rdfs:label "Tree data provider helper"^^xsd:string ;
5578 + rdfs:subClassOf app:TreeElements ;
5579 + spin:constraint
5580 + [ rdf:type spl:Argument ;
5581 + rdfs:comment "The query to execute."^^xsd:string ;
5582 + spl:predicate ui:resultSet ;
5583 + spl:valueType sp:Select
5584 + ] ;
5585 + ui:prototype <http://appschema.org/imports/treeDataProviderHelper.uispin.html> .
5526 5586
5527 app:TreeElements 5587 app:TreeElements
5528 rdf:type ui:NodeClass ; 5588 rdf:type ui:NodeClass ;
5529 rdfs:label "Tree elements"^^xsd:string ; 5589 rdfs:label "Tree elements"^^xsd:string ;
5530 rdfs:subClassOf app:Elements . 5590 rdfs:subClassOf app:Elements .
5531 5591
5592 +app:TreeRootsTemplates
5593 + rdf:type spin:SelectTemplate ;
5594 + rdfs:comment "Abstract superclass for queries that can deliver the roots of a tree."^^xsd:string ;
5595 + rdfs:label "Tree roots templates"^^xsd:string ;
5596 + rdfs:subClassOf app:TreeTemplates ;
5597 + spin:constraint
5598 + [ rdf:type spl:Argument ;
5599 + rdfs:comment "The node to return as single root - this is bound by the tree if the tree has a dedicated arg:root. Otherwise the node is created by the WHERE clause."^^xsd:string ;
5600 + spl:optional "true"^^xsd:boolean ;
5601 + spl:predicate arg:root ;
5602 + spl:valueType rdfs:Resource
5603 + ] .
5604 +
5605 +app:TreeTemplates
5606 + rdf:type spin:SelectTemplate ;
5607 + rdfs:comment """Base class for SELECT templates that are used to populate trees. There are two kinds of queries:
5608 +a) to find all root nodes
5609 +b) to find the children of a given parent node.
5610 +
5611 +All SELECT queries in subclass of this must return the following result variables:
5612 +SELECT ?node ?label ?leaf ?icon
5613 +- ?node: the resource behind the node, e.g. an owl:Class or skos:Concept
5614 +- ?label (optional): the label for the resource - if not used, the system will call ui:label(?node)
5615 +- ?leaf: true means no children, i.e. the node cannot be expanded
5616 +- ?icon (optional): CSS class for the icon"""^^xsd:string ;
5617 + rdfs:label "Tree templates"^^xsd:string ;
5618 + rdfs:subClassOf spin:SelectTemplates .
5619 +
5532 app:URIResourceEditor 5620 app:URIResourceEditor
5533 rdf:type app:ObjectEditorClass ; 5621 rdf:type app:ObjectEditorClass ;
5534 rdfs:comment "The default Editor for resources, consisting of a combo-box with auto-complete."^^xsd:string ; 5622 rdfs:comment "The default Editor for resources, consisting of a combo-box with auto-complete."^^xsd:string ;
...@@ -7052,6 +7140,11 @@ app:weight ...@@ -7052,6 +7140,11 @@ app:weight
7052 rdfs:range xsd:integer ; 7140 rdfs:range xsd:integer ;
7053 rdfs:subPropertyOf app:systemProperty . 7141 rdfs:subPropertyOf app:systemProperty .
7054 7142
7143 +arg:child
7144 + rdf:type rdf:Property ;
7145 + rdfs:label "child"^^xsd:string ;
7146 + rdfs:subPropertyOf sp:arg .
7147 +
7055 arg:childrenQuery 7148 arg:childrenQuery
7056 rdf:type rdf:Property ; 7149 rdf:type rdf:Property ;
7057 rdfs:label "children query"^^xsd:string ; 7150 rdfs:label "children query"^^xsd:string ;
...@@ -7162,6 +7255,11 @@ arg:params ...@@ -7162,6 +7255,11 @@ arg:params
7162 rdfs:label "params"^^xsd:string ; 7255 rdfs:label "params"^^xsd:string ;
7163 rdfs:subPropertyOf sp:arg . 7256 rdfs:subPropertyOf sp:arg .
7164 7257
7258 +arg:parent
7259 + rdf:type rdf:Property ;
7260 + rdfs:label "parent"^^xsd:string ;
7261 + rdfs:subPropertyOf sp:arg .
7262 +
7165 arg:predicates 7263 arg:predicates
7166 rdf:type rdf:Property ; 7264 rdf:type rdf:Property ;
7167 rdfs:label "predicates"^^xsd:string ; 7265 rdfs:label "predicates"^^xsd:string ;
...@@ -7192,6 +7290,11 @@ arg:resultsId ...@@ -7192,6 +7290,11 @@ arg:resultsId
7192 rdfs:label "results id"^^xsd:string ; 7290 rdfs:label "results id"^^xsd:string ;
7193 rdfs:subPropertyOf sp:arg . 7291 rdfs:subPropertyOf sp:arg .
7194 7292
7293 +arg:root
7294 + rdf:type rdf:Property ;
7295 + rdfs:label "root"^^xsd:string ;
7296 + rdfs:subPropertyOf sp:arg .
7297 +
7195 arg:rootsQuery 7298 arg:rootsQuery
7196 rdf:type rdf:Property ; 7299 rdf:type rdf:Property ;
7197 rdfs:label "roots query"^^xsd:string ; 7300 rdfs:label "roots query"^^xsd:string ;
...@@ -7252,6 +7355,16 @@ arg:topHeight ...@@ -7252,6 +7355,16 @@ arg:topHeight
7252 rdfs:label "top height"^^xsd:string ; 7355 rdfs:label "top height"^^xsd:string ;
7253 rdfs:subPropertyOf sp:arg . 7356 rdfs:subPropertyOf sp:arg .
7254 7357
7358 +arg:treeChildrenTemplate
7359 + rdf:type rdf:Property ;
7360 + rdfs:label "tree children template"^^xsd:string ;
7361 + rdfs:subPropertyOf sp:arg .
7362 +
7363 +arg:treeRootsTemplate
7364 + rdf:type rdf:Property ;
7365 + rdfs:label "tree roots template"^^xsd:string ;
7366 + rdfs:subPropertyOf sp:arg .
7367 +
7255 arg:type 7368 arg:type
7256 rdf:type rdf:Property ; 7369 rdf:type rdf:Property ;
7257 rdfs:label "type"^^xsd:string ; 7370 rdfs:label "type"^^xsd:string ;
......
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
2 ui:format="json" 2 ui:format="json"
3 ui:sendQueryGraph="true" 3 ui:sendQueryGraph="true"
4 ui:snippet="true" 4 ui:snippet="true"
5 - ui:view="{= ?dataProvider }"> 5 + ui:view="{= ?dataProvider }"
6 + arg:root="{= ?root }">
6 7
7 <!-- The div that will be turned into a jsTree below --> 8 <!-- The div that will be turned into a jsTree below -->
8 <div id="{= ?id }" /> 9 <div id="{= ?id }" />
......
1 <ui:group xmlns:ui="http://uispin.org/ui#"> 1 <ui:group xmlns:ui="http://uispin.org/ui#">
2 [ 2 [
3 - <ui:if ui:condition="{= spr:rowCount(?resultSet) &gt; 0 }"> 3 + <ui:forEach ui:indexVar="index" ui:resultSet="{= ?resultSet }" ui:separator=",">
4 - <ui:forEach ui:indexVar="index" ui:resultSet="{= ?resultSet }">
5 - <ui:if ui:condition="{= ?index &gt; 0 }">,</ui:if>
6 { 4 {
7 "data" : { 5 "data" : {
8 - "title" : "{= IF(bound(?label), ?label, ui:label(?child)) }" 6 + "title" : "{= COALESCE(?label, ui:label(?node)) }"
9 <ui:if ui:condition="{= bound(?icon) }">, 7 <ui:if ui:condition="{= bound(?icon) }">,
10 "icon" : "{= ?icon }" 8 "icon" : "{= ?icon }"
11 </ui:if> 9 </ui:if>
12 }, 10 },
13 "attr" : { 11 "attr" : {
14 - "id": "{= ui:encodeNode(?child) }::{= ui:uniqueId() }", 12 + "id": "{= ui:encodeNode(?node) }::{= ui:uniqueId() }",
15 - "resource" : "{= IRI(?child) }" 13 + "resource" : "{= IRI(?node) }"
16 }, 14 },
17 <ui:if ui:condition="{= ?leaf }"> 15 <ui:if ui:condition="{= ?leaf }">
18 "children" : [] 16 "children" : []
...@@ -20,7 +18,7 @@ ...@@ -20,7 +18,7 @@
20 <ui:else> 18 <ui:else>
21 "state" : "closed" 19 "state" : "closed"
22 </ui:else> 20 </ui:else>
23 - }</ui:forEach> 21 + }
24 - </ui:if> 22 + </ui:forEach>
25 ] 23 ]
26 </ui:group> 24 </ui:group>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -48,9 +48,10 @@ log:LogBrowser ...@@ -48,9 +48,10 @@ log:LogBrowser
48 html:class "ui-layout-content"^^xsd:string ; 48 html:class "ui-layout-content"^^xsd:string ;
49 ui:child 49 ui:child
50 [ rdf:type app:Tree ; 50 [ rdf:type app:Tree ;
51 - arg:dataProvider log:LogEventClassTreeDataProvider ; 51 + arg:dataProvider app:ClassTreeDataProvider ;
52 arg:id "classTree"^^xsd:string ; 52 arg:id "classTree"^^xsd:string ;
53 arg:onSelect "appLoadWithResource('form', 'resourceType', resource)"^^xsd:string ; 53 arg:onSelect "appLoadWithResource('form', 'resourceType', resource)"^^xsd:string ;
54 + arg:root "log:LogEvent"^^xsd:string ;
54 ui:childIndex 0 55 ui:childIndex 0
55 ] ; 56 ] ;
56 ui:childIndex 1 57 ui:childIndex 1
......