Holger Knublauch

Fixed well/bore constraints

Added constraints for licence checking
Removed header (moved to Sources project)
1 # baseURI: http://www.reportinghub.no/ep/spin/ddr-constraints 1 # baseURI: http://www.reportinghub.no/ep/spin/ddr-constraints
2 # imports: http://spinrdf.org/spin 2 # imports: http://spinrdf.org/spin
3 +# imports: http://topbraid.org/sxml
3 # imports: http://www.reportinghub.no/ep/schema/1.0/activity 4 # imports: http://www.reportinghub.no/ep/schema/1.0/activity
4 # imports: http://www.reportinghub.no/ep/schema/1.0/core 5 # imports: http://www.reportinghub.no/ep/schema/1.0/core
5 # imports: http://www.reportinghub.no/ep/schema/1.0/ddr 6 # imports: http://www.reportinghub.no/ep/schema/1.0/ddr
...@@ -9,10 +10,14 @@ ...@@ -9,10 +10,14 @@
9 # imports: http://www.reportinghub.no/ep/schema/1.0/report 10 # imports: http://www.reportinghub.no/ep/schema/1.0/report
10 # imports: http://www.reportinghub.no/ep/schema/1.0/well 11 # imports: http://www.reportinghub.no/ep/schema/1.0/well
11 # imports: http://www.reportinghub.no/np/schema/1.0/npd 12 # imports: http://www.reportinghub.no/np/schema/1.0/npd
13 +# imports: http://www.reportinghub.no/spin/rh
14 +# imports: http://www.topbraid.org/2007/05/composite.owl
12 15
13 @prefix : <http://www.reportinghub.no/ep/spin/ddr-constraints#> . 16 @prefix : <http://www.reportinghub.no/ep/spin/ddr-constraints#> .
17 +@prefix arg: <http://spinrdf.org/arg#> .
14 @prefix ddr: <http://www.reportinghub.no/ep/schema/ddr#> . 18 @prefix ddr: <http://www.reportinghub.no/ep/schema/ddr#> .
15 @prefix fn: <http://www.w3.org/2005/xpath-functions#> . 19 @prefix fn: <http://www.w3.org/2005/xpath-functions#> .
20 +@prefix normalization: <http://www.reportinghub.no/ep/transform/1.1/normalization#> .
16 @prefix owl: <http://www.w3.org/2002/07/owl#> . 21 @prefix owl: <http://www.w3.org/2002/07/owl#> .
17 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 22 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
18 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 23 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
...@@ -20,6 +25,7 @@ ...@@ -20,6 +25,7 @@
20 @prefix sp: <http://spinrdf.org/sp#> . 25 @prefix sp: <http://spinrdf.org/sp#> .
21 @prefix spin: <http://spinrdf.org/spin#> . 26 @prefix spin: <http://spinrdf.org/spin#> .
22 @prefix spl: <http://spinrdf.org/spl#> . 27 @prefix spl: <http://spinrdf.org/spl#> .
28 +@prefix witsml: <http://www.witsml.org/schemas/1series#> .
23 @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 29 @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
24 30
25 ddr:Obj_drillReport 31 ddr:Obj_drillReport
...@@ -39,86 +45,136 @@ ddr:Obj_drillReport ...@@ -39,86 +45,136 @@ ddr:Obj_drillReport
39 sp:subject _:b1 45 sp:subject _:b1
40 ]) ; 46 ]) ;
41 sp:where ([ sp:object _:b3 ; 47 sp:where ([ sp:object _:b3 ;
42 - sp:predicate ddr:nameWell ; 48 + sp:predicate <http://www.topbraid.org/2007/05/composite.owl#child> ;
43 sp:subject spin:_this 49 sp:subject spin:_this
44 - ] [ rdf:type sp:NamedGraph ; 50 + ] [ sp:object witsml:nameWell ;
45 - sp:elements ([ rdf:type sp:NotExists ; 51 + sp:predicate rdf:type ;
46 - sp:elements ([ rdf:type sp:Bind ; 52 + sp:subject _:b3
47 - sp:expression 53 + ] [ sp:object _:b4 ;
48 - [ rdf:type rhspin:wellByName ; 54 + sp:predicate <http://www.topbraid.org/2007/05/composite.owl#child> ;
49 - sp:arg1 _:b3 55 + sp:subject _:b3
50 - ] ; 56 + ] [ sp:object _:b5 ;
51 - sp:variable _:b4 57 + sp:predicate <http://topbraid.org/sxml#text> ;
52 - ] [ sp:object <http://www.reportinghub.no/ep/schema/well#Well> ; 58 + sp:subject _:b4
53 - sp:predicate rdf:type ; 59 + ] [ rdf:type sp:Bind ;
54 - sp:subject _:b4 60 + sp:expression
55 - ]) 61 + [ rdf:type rhspin:wellByName ;
56 - ]) ; 62 + arg:wellName _:b5
57 - sp:graphNameNode <http://www.reportinghub.no/np/data/npd> 63 + ] ;
64 + sp:variable _:b6
65 + ] [ rdf:type sp:Filter ;
66 + sp:expression
67 + [ rdf:type sp:not ;
68 + sp:arg1 [ rdf:type rhspin:npdTripleExists ;
69 + sp:arg1 _:b6 ;
70 + sp:arg2 rdf:type ;
71 + sp:arg3 <http://www.reportinghub.no/ep/schema/well#Well>
72 + ]
73 + ]
58 ] [ rdf:type sp:Bind ; 74 ] [ rdf:type sp:Bind ;
59 sp:expression 75 sp:expression
60 [ rdf:type fn:concat ; 76 [ rdf:type fn:concat ;
61 sp:arg1 "Unregistered well name " ; 77 sp:arg1 "Unregistered well name " ;
62 - sp:arg2 _:b3 78 + sp:arg2 _:b5
63 ] ; 79 ] ;
64 sp:variable _:b2 80 sp:variable _:b2
65 ]) 81 ])
66 ] ; 82 ] ;
67 spin:constraint 83 spin:constraint
84 + [ rdf:type sp:Ask ;
85 + rdfs:comment "DDRs can only be submitted if a user is logged in"^^xsd:string ;
86 + sp:where ([ rdf:type sp:Bind ;
87 + sp:expression
88 + [ rdf:type rhspin:companyName
89 + ] ;
90 + sp:variable _:b7
91 + ] [ rdf:type sp:Filter ;
92 + sp:expression
93 + [ rdf:type sp:not ;
94 + sp:arg1 [ rdf:type sp:bound ;
95 + sp:arg1 _:b7
96 + ]
97 + ]
98 + ])
99 + ] ;
100 + spin:constraint
68 [ rdf:type sp:Construct ; 101 [ rdf:type sp:Construct ;
69 sp:templates ([ sp:object spin:ConstraintViolation ; 102 sp:templates ([ sp:object spin:ConstraintViolation ;
70 sp:predicate rdf:type ; 103 sp:predicate rdf:type ;
71 - sp:subject _:b5 104 + sp:subject _:b8
72 ] [ sp:object spin:_this ; 105 ] [ sp:object spin:_this ;
73 sp:predicate spin:violationRoot ; 106 sp:predicate spin:violationRoot ;
74 - sp:subject _:b5 107 + sp:subject _:b8
75 ] [ sp:object ddr:nameWellbore ; 108 ] [ sp:object ddr:nameWellbore ;
76 sp:predicate spin:violationPath ; 109 sp:predicate spin:violationPath ;
77 - sp:subject _:b5 110 + sp:subject _:b8
78 - ] [ sp:object _:b6 ; 111 + ] [ sp:object _:b9 ;
79 sp:predicate rdfs:label ; 112 sp:predicate rdfs:label ;
80 - sp:subject _:b5 113 + sp:subject _:b8
81 ]) ; 114 ]) ;
82 - sp:where ([ sp:object _:b7 ; 115 + sp:where ([ sp:object _:b10 ;
83 - sp:predicate ddr:nameWellbore ; 116 + sp:predicate <http://www.topbraid.org/2007/05/composite.owl#child> ;
84 sp:subject spin:_this 117 sp:subject spin:_this
118 + ] [ sp:object witsml:nameWellbore ;
119 + sp:predicate rdf:type ;
120 + sp:subject _:b10
121 + ] [ sp:object _:b11 ;
122 + sp:predicate <http://www.topbraid.org/2007/05/composite.owl#child> ;
123 + sp:subject _:b10
124 + ] [ sp:object _:b12 ;
125 + sp:predicate <http://topbraid.org/sxml#text> ;
126 + sp:subject _:b11
85 ] [ rdf:type sp:Bind ; 127 ] [ rdf:type sp:Bind ;
86 sp:expression 128 sp:expression
87 [ rdf:type rhspin:wellBoreByName ; 129 [ rdf:type rhspin:wellBoreByName ;
88 - sp:arg1 _:b7 130 + arg:wellBoreName _:b12
89 ] ; 131 ] ;
90 - sp:variable _:b8 132 + sp:variable _:b13
91 ] [ rdf:type sp:Filter ; 133 ] [ rdf:type sp:Filter ;
92 sp:expression 134 sp:expression
93 [ rdf:type sp:not ; 135 [ rdf:type sp:not ;
94 sp:arg1 [ rdf:type sp:bound ; 136 sp:arg1 [ rdf:type sp:bound ;
95 - sp:arg1 _:b8 137 + sp:arg1 _:b13
96 ] 138 ]
97 ] 139 ]
98 ] [ rdf:type sp:Bind ; 140 ] [ rdf:type sp:Bind ;
99 sp:expression 141 sp:expression
100 [ rdf:type fn:concat ; 142 [ rdf:type fn:concat ;
101 sp:arg1 "Unregistered well bore name " ; 143 sp:arg1 "Unregistered well bore name " ;
102 - sp:arg2 _:b7 144 + sp:arg2 _:b12
103 ] ; 145 ] ;
104 - sp:variable _:b6 146 + sp:variable _:b9
105 ]) 147 ])
106 ] . 148 ] .
107 149
108 <http://www.reportinghub.no/ep/spin/ddr-constraints> 150 <http://www.reportinghub.no/ep/spin/ddr-constraints>
109 rdf:type owl:Ontology ; 151 rdf:type owl:Ontology ;
110 rdfs:comment "Constraints that need to be executed immediately after SXML import, i.e. not on the inferred triples."^^xsd:string ; 152 rdfs:comment "Constraints that need to be executed immediately after SXML import, i.e. not on the inferred triples."^^xsd:string ;
111 - owl:imports <http://www.reportinghub.no/np/schema/1.0/npd> , <http://www.reportinghub.no/ep/schema/1.0/equipment> , <http://www.reportinghub.no/ep/schema/1.0/well> , <http://www.reportinghub.no/ep/schema/1.0/ddr> , <http://www.reportinghub.no/ep/schema/1.0/activity> , <http://www.reportinghub.no/ep/schema/1.0/facility> , <http://www.reportinghub.no/ep/schema/1.0/report> , <http://www.reportinghub.no/ep/schema/1.0/organization> , <http://www.reportinghub.no/ep/schema/1.0/core> , <http://spinrdf.org/spin> ; 153 + owl:imports <http://www.reportinghub.no/np/schema/1.0/npd> , <http://topbraid.org/sxml> , <http://www.reportinghub.no/ep/schema/1.0/equipment> , <http://www.reportinghub.no/ep/schema/1.0/well> , <http://www.reportinghub.no/ep/schema/1.0/ddr> , <http://www.reportinghub.no/spin/rh> , <http://www.reportinghub.no/ep/schema/1.0/activity> , <http://www.reportinghub.no/ep/schema/1.0/facility> , <http://www.reportinghub.no/ep/schema/1.0/report> , <http://www.topbraid.org/2007/05/composite.owl> , <http://www.reportinghub.no/ep/schema/1.0/organization> , <http://www.reportinghub.no/ep/schema/1.0/core> , <http://spinrdf.org/spin> ;
112 owl:versionInfo "0.1.0"^^xsd:string . 154 owl:versionInfo "0.1.0"^^xsd:string .
113 155
156 +_:b7 sp:varName "companyName"^^xsd:string .
157 +
114 _:b2 sp:varName "message"^^xsd:string . 158 _:b2 sp:varName "message"^^xsd:string .
115 159
116 -_:b4 sp:varName "well"^^xsd:string . 160 +_:b6 sp:varName "well"^^xsd:string .
161 +
162 +_:b5 sp:varName "wellName"^^xsd:string .
163 +
164 +_:b4 sp:varName "cc"^^xsd:string .
165 +
166 +_:b3 sp:varName "child"^^xsd:string .
167 +
168 +_:b9 sp:varName "message"^^xsd:string .
117 169
118 -_:b3 sp:varName "nameWell"^^xsd:string . 170 +_:b13
171 + sp:varName "wellBore"^^xsd:string .
119 172
120 -_:b6 sp:varName "message"^^xsd:string . 173 +_:b12
174 + sp:varName "wellBoreName"^^xsd:string .
121 175
122 -_:b8 sp:varName "wellBore"^^xsd:string . 176 +_:b11
177 + sp:varName "cc"^^xsd:string .
123 178
124 -_:b7 sp:varName "nameWellbore"^^xsd:string . 179 +_:b10
180 + sp:varName "child"^^xsd:string .
......
1 +# baseURI: http://www.reportinghub.no/ep/spin/report-constraints
2 +# imports: http://spinrdf.org/spin
3 +# imports: http://www.reportinghub.no/ep/schema/1.0/activity
4 +# imports: http://www.reportinghub.no/ep/schema/1.0/core
5 +# imports: http://www.reportinghub.no/ep/schema/1.0/ddr
6 +# imports: http://www.reportinghub.no/ep/schema/1.0/equipment
7 +# imports: http://www.reportinghub.no/ep/schema/1.0/facility
8 +# imports: http://www.reportinghub.no/ep/schema/1.0/organization
9 +# imports: http://www.reportinghub.no/ep/schema/1.0/report
10 +# imports: http://www.reportinghub.no/ep/schema/1.0/well
11 +# imports: http://www.reportinghub.no/np/schema/1.0/npd
12 +# imports: http://www.reportinghub.no/spin/rh
13 +
14 +@prefix : <http://www.reportinghub.no/ep/spin/report-constraints#> .
15 +@prefix arg: <http://spinrdf.org/arg#> .
16 +@prefix ddr: <http://www.reportinghub.no/ep/schema/ddr#> .
17 +@prefix fn: <http://www.w3.org/2005/xpath-functions#> .
18 +@prefix owl: <http://www.w3.org/2002/07/owl#> .
19 +@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
20 +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
21 +@prefix rhspin: <http://www.reportinghub.no/spin/rh#> .
22 +@prefix sp: <http://spinrdf.org/sp#> .
23 +@prefix spin: <http://spinrdf.org/spin#> .
24 +@prefix spl: <http://spinrdf.org/spl#> .
25 +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
26 +
27 +<http://www.reportinghub.no/ep/schema/report#DailyDrillingReport>
28 + spin:constraint
29 + [ rdf:type sp:Construct ;
30 + sp:templates ([ sp:object spin:ConstraintViolation ;
31 + sp:predicate rdf:type ;
32 + sp:subject _:b1
33 + ] [ sp:object spin:_this ;
34 + sp:predicate spin:violationRoot ;
35 + sp:subject _:b1
36 + ] [ sp:object _:b2 ;
37 + sp:predicate rdfs:label ;
38 + sp:subject _:b1
39 + ]) ;
40 + sp:where ([ rdf:type sp:TriplePath ;
41 + sp:object _:b3 ;
42 + sp:path [ rdf:type sp:SeqPath ;
43 + sp:path1
44 + [ rdf:type sp:SeqPath ;
45 + sp:path1 <http://www.reportinghub.no/ep/schema/activity#reportOn> ;
46 + sp:path2 <http://www.reportinghub.no/ep/schema/activity#onWellBore>
47 + ] ;
48 + sp:path2 <http://www.reportinghub.no/ep/schema/core#temporalPartOf>
49 + ] ;
50 + sp:subject spin:_this
51 + ] [ rdf:type sp:Bind ;
52 + sp:expression
53 + [ rdf:type rhspin:companyName
54 + ] ;
55 + sp:variable _:b4
56 + ] [ rdf:type sp:Bind ;
57 + sp:expression
58 + [ rdf:type rhspin:companyWithName ;
59 + arg:name _:b4
60 + ] ;
61 + sp:variable _:b5
62 + ] [ rdf:type sp:Filter ;
63 + sp:expression
64 + [ rdf:type sp:bound ;
65 + sp:arg1 _:b5
66 + ]
67 + ] [ rdf:type sp:NotExists ;
68 + sp:elements ([ sp:object _:b3 ;
69 + sp:predicate rhspin:companyHasLicenceForWellBore ;
70 + sp:subject _:b5
71 + ])
72 + ] [ rdf:type sp:Bind ;
73 + sp:expression
74 + [ rdf:type fn:concat ;
75 + sp:arg1 "Your company (" ;
76 + sp:arg2 _:b4 ;
77 + sp:arg3 ") does not hold a licence for well bore " ;
78 + sp:arg4 [ rdf:type rhspin:npdName ;
79 + arg:resource _:b3
80 + ]
81 + ] ;
82 + sp:variable _:b2
83 + ])
84 + ] .
85 +
86 +<http://www.reportinghub.no/ep/spin/report-constraints>
87 + rdf:type owl:Ontology ;
88 + rdfs:comment "Constraints that need to be executed after ep-report:Report generation (without SXML triples)."^^xsd:string ;
89 + owl:imports <http://www.reportinghub.no/spin/rh> , <http://spinrdf.org/spin> , <http://www.reportinghub.no/ep/schema/1.0/report> , <http://www.reportinghub.no/ep/schema/1.0/facility> , <http://www.reportinghub.no/np/schema/1.0/npd> , <http://www.reportinghub.no/ep/schema/1.0/organization> , <http://www.reportinghub.no/ep/schema/1.0/core> , <http://www.reportinghub.no/ep/schema/1.0/well> , <http://www.reportinghub.no/ep/schema/1.0/equipment> , <http://www.reportinghub.no/ep/schema/1.0/activity> , <http://www.reportinghub.no/ep/schema/1.0/ddr> ;
90 + owl:versionInfo "0.1.0"^^xsd:string .
91 +
92 +_:b2 sp:varName "message"^^xsd:string .
93 +
94 +_:b3 sp:varName "wellBore"^^xsd:string .
95 +
96 +_:b4 sp:varName "companyName"^^xsd:string .
97 +
98 +_:b5 sp:varName "company"^^xsd:string .
...@@ -700,6 +700,40 @@ rhspin:npdName ...@@ -700,6 +700,40 @@ rhspin:npdName
700 ] ; 700 ] ;
701 spin:returnType xsd:string . 701 spin:returnType xsd:string .
702 702
703 +rhspin:npdTripleExists
704 + rdf:type spin:Function ;
705 + rdfs:comment "Checks whether the NPD graph contains a given triple (?arg1, ?arg2, ?arg3)."^^xsd:string ;
706 + rdfs:label "NPD triple exists"^^xsd:string ;
707 + rdfs:subClassOf spin:Functions ;
708 + spin:body
709 + [ rdf:type sp:Ask ;
710 + sp:where ([ rdf:type sp:NamedGraph ;
711 + sp:elements ([ sp:object spin:_arg3 ;
712 + sp:predicate spin:_arg2 ;
713 + sp:subject spin:_arg1
714 + ]) ;
715 + sp:graphNameNode npdata:npd
716 + ])
717 + ] ;
718 + spin:constraint
719 + [ rdf:type spl:Argument ;
720 + rdfs:comment "The object to match."^^xsd:string ;
721 + spl:predicate sp:arg3
722 + ] ;
723 + spin:constraint
724 + [ rdf:type spl:Argument ;
725 + rdfs:comment "The predicate to match."^^xsd:string ;
726 + spl:predicate sp:arg2 ;
727 + spl:valueType rdf:Property
728 + ] ;
729 + spin:constraint
730 + [ rdf:type spl:Argument ;
731 + rdfs:comment "The subject to find"^^xsd:string ;
732 + spl:predicate sp:arg1 ;
733 + spl:valueType rdfs:Resource
734 + ] ;
735 + spin:returnType xsd:boolean .
736 +
703 rhspin:parentCompanyByName 737 rhspin:parentCompanyByName
704 rdf:type spin:Function ; 738 rdf:type spin:Function ;
705 rdfs:comment "Gets the URI resource of a parent company based on its NPD name."^^xsd:string ; 739 rdfs:comment "Gets the URI resource of a parent company based on its NPD name."^^xsd:string ;
...@@ -797,22 +831,11 @@ rhspin:wellBoreByName ...@@ -797,22 +831,11 @@ rhspin:wellBoreByName
797 [ rdf:type sp:Select ; 831 [ rdf:type sp:Select ;
798 sp:resultVariables (_:b32) ; 832 sp:resultVariables (_:b32) ;
799 sp:where ([ rdf:type sp:NamedGraph ; 833 sp:where ([ rdf:type sp:NamedGraph ;
800 - sp:elements ([ rdf:type sp:Union ; 834 + sp:elements ([ sp:object
801 - sp:elements (([ sp:object _:b33 ; 835 + [ sp:varName "wellBoreName"^^xsd:string
802 - sp:predicate <http://www.reportinghub.no/np/schema/npd#name> ; 836 + ] ;
803 - sp:subject _:b32 837 + sp:predicate <http://www.reportinghub.no/np/schema/npd#name> ;
804 - ]) ([ rdf:type sp:Bind ; 838 + sp:subject _:b32
805 - sp:expression
806 - [ rdf:type spif:replaceAll ;
807 - sp:arg1 _:b33 ;
808 - sp:arg2 "/0" ;
809 - sp:arg3 "/"
810 - ] ;
811 - sp:variable _:b34
812 - ] [ sp:object _:b34 ;
813 - sp:predicate <http://www.reportinghub.no/np/schema/npd#name> ;
814 - sp:subject _:b32
815 - ]))
816 ] [ sp:object <http://www.reportinghub.no/ep/schema/well#WellBore> ; 839 ] [ sp:object <http://www.reportinghub.no/ep/schema/well#WellBore> ;
817 sp:predicate rdf:type ; 840 sp:predicate rdf:type ;
818 sp:subject _:b32 841 sp:subject _:b32
...@@ -854,21 +877,6 @@ rhspin:wellByName ...@@ -854,21 +877,6 @@ rhspin:wellByName
854 ] ; 877 ] ;
855 spin:returnType <http://www.reportinghub.no/ep/schema/well#Well> . 878 spin:returnType <http://www.reportinghub.no/ep/schema/well#Well> .
856 879
857 -_:b16
858 - sp:varName "id"^^xsd:string .
859 -
860 -_:b17
861 - sp:varName "wellBore"^^xsd:string .
862 -
863 -_:b15
864 - sp:varName "startedAt"^^xsd:string .
865 -
866 -_:b34
867 - sp:varName "str"^^xsd:string .
868 -
869 -_:b33
870 - sp:varName "wellBoreName"^^xsd:string .
871 -
872 _:b32 880 _:b32
873 sp:varName "wellBore"^^xsd:string . 881 sp:varName "wellBore"^^xsd:string .
874 882
...@@ -914,6 +922,15 @@ _:b19 ...@@ -914,6 +922,15 @@ _:b19
914 _:b18 922 _:b18
915 sp:varName "value"^^xsd:string . 923 sp:varName "value"^^xsd:string .
916 924
925 +_:b17
926 + sp:varName "wellBore"^^xsd:string .
927 +
928 +_:b16
929 + sp:varName "id"^^xsd:string .
930 +
931 +_:b15
932 + sp:varName "startedAt"^^xsd:string .
933 +
917 _:b14 934 _:b14
918 sp:varName "company"^^xsd:string . 935 sp:varName "company"^^xsd:string .
919 936
......
1 -<ui:group>
2 - <div>&nbsp;</div>
3 - <div class="logoContainer"><a href="http://www.epim.no" target="_new"><img src="lib/rh/images/logoEpim.gif" width="201" height="106" align="right" title="EPIM" /></a>
4 - <div style="padding: 10px">
5 - <h1>ReportingHub</h1>
6 - <div>You are logged in as: <b>{= rhspin:userName() }</b></div>
7 - </div>
8 - </div>
9 -</ui:group>
...\ No newline at end of file ...\ No newline at end of file