<
From version < 29.1 >
edited by Robin Huisman
on 2024/07/11 10:13
To version < 36.2 >
edited by Robin Huisman
on 2024/07/31 23:33
>
Change comment: There is no comment for this version

Summary

Details

Page properties
Title
... ... @@ -1,1 +1,1 @@
1 -Lab result file - Obsolete SIKB version 9
1 +Lab result file - SIKB0101 v14
Content
... ... @@ -1,57 +1,63 @@
1 1  = Exporting lab results to TerraIndex for a customer =
2 2  
3 -The file that is used for the examples: [[Example file>>attach:LabResults.xml]]
3 +Returning the labresults to the client, that requested the analysis on samples.
4 4  
5 +(% class="box infomessage" %)
6 +(((
7 +More information about SIKB0101 can be found here: [[https:~~/~~/www.sikb.nl/datastandaarden/sikb0101-bodembeheer>>url:https://www.sikb.nl/datastandaarden/sikb0101-bodembeheer]]
8 +)))
9 +
10 +
11 +
12 +== What is a Lab result file? ==
13 +
14 +A lab result file is an XML file contains all the lab results. The results are mapped tot their analyses samples. A lab result will be matched to the corresponding analyses sample based on the: “Labassignment Guid/SIKB-ID, projectCode, AnalysisSample Guid/SIKB-ID”
15 +
16 +
17 +**Example files**: [[attach:labresultaat_MengmonsterGr.xml||rel="noopener noreferrer" target="_blank"]], [[attach:labresultaat_IndividueelGr.xml||rel="noopener noreferrer" target="_blank"]], [[attach:labresultaat_IndividueelGw.xml||rel="noopener noreferrer" target="_blank"]]
18 +
19 +**XSD**: Ask or SIKB Members can download from: [[https:~~/~~/www.sikb.nl/datastandaarden/richtlijnen/sikb0101>>url:https://www.sikb.nl/datastandaarden/richtlijnen/sikb0101]]
20 +
21 +**Controle XSLT**: [[attach:Labresult_Controle.xsl||rel=" noopener noreferrer" target="_blank"]]
22 +
23 +**Domaintable files**: [[immetingen lookup v14.8.0.xml>>url:https://wiki.terraindex.com/bin/download/Implementation%20documentation/Setting%20up%20Lab%20communication%20by%20REST%20services%20with%20TerraIndex/Lab%20assignment%20file/WebHome/immetingen%20lookup%20v14.8.0.xml?rev=1.2]]   [[imsikb0101 lookup v14.8.0.xml>>url:https://wiki.terraindex.com/bin/download/Implementation%20documentation/Setting%20up%20Lab%20communication%20by%20REST%20services%20with%20TerraIndex/Lab%20assignment%20file/WebHome/imsikb0101%20lookup%20v14.8.0.xml?rev=1.1]]
24 +extracted from: **[[https:~~/~~/codes.sikb.nl>>url:https://codes.sikb.nl/]] **
25 +
26 +
5 5  {{toc/}}
6 6  
7 -{{warning}}
8 -SIKB Version 9 is obsolete, and replaced with version 13 or version 14. Latest version can be found here: [[https:~~/~~/www.sikb.nl/datastandaarden/sikb0101-bodembeheer>>url:https://www.sikb.nl/datastandaarden/sikb0101-bodembeheer]]
9 -{{/warning}}
10 10  
11 -== What is a Lab result file ==
30 +== Model Structure ==
12 12  
13 -A lab result file is an XML file contains all the lab results. The results are mapped tot their analyses samples. A lab result will be matched to the corresponding analyses sample based on the: “idOpdracht, projectCode, idanlmons and anlmons”
14 -\\[[image:IMSIKB0101 - Labresults.png]]
15 -
32 +[[image:IMSIKB0101 - Labresults.png]]
16 16  
17 -== File structure ==
34 +=== Metadata ===
18 18  
19 19  
20 20  (% class="table-hover" %)
21 21  |(% colspan="1" rowspan="1" %)**Attribute name**|(% colspan="1" rowspan="1" %)**Description**|(% colspan="1" rowspan="1" %)**Unit**
22 -|(% colspan="1" rowspan="1" %)**Versie**|(% colspan="1" rowspan="1" %)The SIKB version of the lab assignment. This must be: **9.0.0**|(% colspan="1" rowspan="1" %)string
23 -|(% colspan="1" rowspan="1" %)**Applicatiecode**|(% colspan="1" rowspan="1" %)This is the application code of your LIMS system that you will get from TerraIndex. Be careful this is not the same code as your laboratory number|(% colspan="1" rowspan="1" %)Integer
24 -|(% colspan="1" rowspan="1" %)**Datum**|(% colspan="1" rowspan="1" %)The date on which the lab result file was made|(% colspan="1" rowspan="1" %)(((
39 +|(% colspan="1" rowspan="1" %)**version**|(% colspan="1" rowspan="1" %)The SIKB version of the lab results file. This must be: **14.8.0 or 14.9.0**|(% colspan="1" rowspan="1" %)string
40 +|(% colspan="1" rowspan="1" %)**application**|(% colspan="1" rowspan="1" %)This is the application code of your LIMS system that you will get from TerraIndex. Be careful this is not the same code as your laboratory number. Your applicationcode can be requested of found here: [[https:~~/~~/codes.sikb.nl/tablet/domain-table-details/50be26c9-5e66-46c9-9373-9d402762876f>>https://codes.sikb.nl/tablet/domain-table-details/50be26c9-5e66-46c9-9373-9d402762876f]] |(% colspan="1" rowspan="1" %)Integer
41 +|(% colspan="1" rowspan="1" %)**reportDate**|(% colspan="1" rowspan="1" %)The date on which the lab result file was made|(% colspan="1" rowspan="1" %)(((
25 25  date
26 26  
27 27  yyyy-mm-dd
28 28  )))
29 -|(% colspan="1" rowspan="1" %)**Klantcode**|(% colspan="1" rowspan="1" %)This should be the customer code in the “//klantcode//” in the lab assignment|(% colspan="1" rowspan="1" %)string
30 -|(% colspan="1" rowspan="1" %)**Laboratorium**|(% colspan="1" rowspan="1" %)The number you get from TerraIndex. This needs to be the same as the laboratorium number in the lab delivery file|(% colspan="1" rowspan="1" %)integer
31 -|(% colspan="1" rowspan="1" %)**Taal**|(% colspan="1" rowspan="1" %)(((
32 -The language of the lab results this depends on the XSD used.
46 +|(% colspan="1" rowspan="1" %)**supplier**|(% colspan="1" rowspan="1" %)The number you get from TerraIndex. This needs to be the same as the laboratorium number in the lab delivery file. Your supplier code can be requested of found here: [[https:~~/~~/codes.sikb.nl/tablet/domain-table-details/dc2ad4df-f958-4146-aee8-31f8c2f1c74b>>https://codes.sikb.nl/tablet/domain-table-details/dc2ad4df-f958-4146-aee8-31f8c2f1c74b]]|(% colspan="1" rowspan="1" %)string
47 +|(% colspan="1" rowspan="1" %)**dataflow**|(% colspan="1" rowspan="1" %)Should be '1' in this case, what stands voor 'AnalysisResults'. Other option can be found here: [[https:~~/~~/codes.sikb.nl/tablet/domain-table-details/79365ded-f56a-4f10-ba45-16bac69752d9>>https://codes.sikb.nl/tablet/domain-table-details/79365ded-f56a-4f10-ba45-16bac69752d9]]|(% colspan="1" rowspan="1" %)integer
33 33  
34 -dut = dutch
49 +===
50 +Labassignment ===
35 35  
36 -eng = English
37 -)))|(% colspan="1" rowspan="1" %)string
38 -|(% colspan="1" rowspan="1" %)**Projectgegevens**|(% colspan="1" rowspan="1" %)This section contains all the result information|(% colspan="1" rowspan="1" %)-
52 +The labassignmentpart is the same as in the labassignment: [[Lab assignment file - SIKB0101 v14>>https://wiki.terraindex.com/bin/view/Implementation%20documentation/Setting%20up%20Lab%20communication%20by%20REST%20services%20with%20TerraIndex/Lab%20assignment%20file/#]]
39 39  
40 -= Questions from Luca to Robin =
54 +With 3 differences:
41 41  
42 -1. Do I need to add any other classes to the filestructure description apart from the ones below (those related to the IMMetingen::Result Class) ?
43 -1. uit de mail van Robin : "Je kunt de Labassignment pagina als basis gebruiken, en de extra klasses vanuit de Voorbeeld bestand LabResult aan toevoegen."
44 -11. De link naar een "LabResult" voorbeeld bestand wijst naar een directory. Daar staat wel een directory met naam "Example XML 14.8.01". maar die folder bevat niet 1 maar 4 verschillende "labresult_*" XMLs. Welke moet ik hebben? allemaal? en hoe moet ik afleiden welke klasses "extra" zijn? welke tool zou je aanbevelen om xml te lezen. ik heb er nog nooit mee gewerkt.
45 -1. Do i need to add screenshots of the xml classes as in the labassignment and labdelivery pages? if so, what software did you use?
46 -1. In Validation: ValidationScore. What are STOWA Protocols? is it Stichting Toegepast Onderzoek Waterbeheer?
47 -1. What to do with the domain tables refered to in the descriptions? Does it make sense to reference them? Should i translate the names of the domain tables or is that static? are they translated already? who manages these? is it SIKB stuff?
48 -1. in the section MeasureUncertainty > link to pdf file in description is invalid. What should it be?
49 -1. SIKB 14 Parameter result combinations> first sentence makes no sense to me. Please review so i can translate.
50 -1. What should i do with the sections from "Structure projectgegevens" to "What to exchange to store the right results?"? Is this a result of a copy paste and can they be discarded? If not, what classes do they refer to and where can i find the descriptions to be translated?
56 +* Status on the labassignment itself
57 +* Status on the labassignment.sample link
58 +* The labassignment Report number can be send in: LabAssignmentCertificate
51 51  
52 52  
53 -(% class="wikigeneratedid" %)
54 -~==== Added by luca: all Classes related to "IMMetingen::Results"
55 55  
56 56  ==== MeasureResult ====
57 57  
... ... @@ -101,37 +101,8 @@
101 101  
102 102  ==== ====
103 103  
104 -==== Validation ====
110 +==== ====
105 105  
106 -
107 -This DataClass contains optional attributes and indicates which validation steps the measureResult (measurement value) has undergone.
108 -
109 -
110 -|**Attribute Name**|**Description**
111 -|(((
112 -**automatedControl** GenericName
113 -)))|(((
114 -The first-line control is often an automated check of whether the measurement value is correct. It uses a domain table: ValidationSteps.
115 -
116 -Various steps can be distinguished. For example, a check on hard/soft limits, ion balance, bandwidth, and dissolved not exceeding total analysis (chemistry) are part of the first-line control. The control can be approved or disapproved (see quality judgment). Different possible values are described in the domain table ValidationSteps. Example: pH of 78 and water temperature of 123 degrees Celsius are hard limits (not possible); pH=10.0 is a soft limit because the value is extremely high (but not impossible).
117 -
118 -Domain table: ValidationSteps
119 -)))
120 -|(((
121 -**expertControl** GenericName
122 -)))|(((
123 -The second-line control (ExpertControl) is often a specialist check of whether the measurement value is correct. It also uses a domain table: ValidationSteps. Here, different steps can be distinguished as well. This analysis usually does not follow immediately after arrival but is performed periodically. Controls on correlation between measurement stations, history, correlations between parameters, and specialist expertise belong to the second-line control. The control can be approved or disapproved (see quality judgment). Different possible values are described in the domain table ValidationSteps.
124 -
125 -Domain table: ValidationSteps
126 -)))
127 -|(((
128 -**validationScore** GenericName
129 -)))|(((
130 -Score of the validation steps followed, according to the __**STOWA protocols**__. The attribute uses the domain table ValidationScore. The score value ranges from 0 to 5
131 -
132 -Domain table: ValidationScore
133 -)))
134 -
135 135  ==== ====
136 136  
137 137  ==== AnalyticResult ====
... ... @@ -162,58 +162,13 @@
162 162  
163 163  ==== ====
164 164  
165 -==== MeasureUncertainty ====
142 +==== ====
166 166  
167 -
168 -Measurement uncertainty in the result. This is the expanded measuring uncertainty as described in the document: [[http:~~/~~/www.nordicinnovation.net/nordtestfiler/tec537.pdf>>http://www.nordicinnovation.net/nordtestfiler/tec537.pdf]]
169 -
170 -
171 -|=**Attribute Name**|=**Description**
172 -|(((
173 -**distributionType** GenericName
174 -)))|(((
175 -The type of statistical distribution associated with the observation.
176 -
177 -Domain table: ProbabilityDistribution
178 -)))
179 -|(((
180 -**statisticalParameter** Measure
181 -)))|(((
182 -Parameters that determine the shape and size of the statistical distribution.
183 -
184 -Domain table: StatisticalParameter
185 -)))
186 -
187 187  ==== ====
188 188  
189 -==== DeterminationLimits ====
146 +====
147 + ====
190 190  
191 -
192 -|=**Attribute Name**|=**Description**
193 -|(((
194 -**detectionLimit** Measure
195 -)))|(((
196 -The smallest value of the measured content or the observed value of the parameter in a sample, which can still be determined with a certain reliability by the laboratory. Conventionally, this is the amount that corresponds to three times the standard deviation at that level (thus, relative standard deviation is 33%).
197 -
198 -
199 -The standard deviation is established under (intra-lab) reproducibility. Also known in English as 'LOD' (Limit of Detection). See also: [[Wikipedia on Detection Limit>>url:https://en.wikipedia.org/wiki/Detection_limit]]
200 -)))
201 -|(((
202 -**reportingLimit** Measure
203 -)))|The smallest value of the measured content or the observed value of the parameter in a sample, agreed upon with the client by the executing laboratory, which is reported to the client. The reporting limit is at least the detection limit and is sometimes specified in an accreditation scheme like AS3000.
204 -|(((
205 -**limitSymbolReferenceCode **GenericName
206 -)))|(((
207 -The threshold value that the limitSymbol of AnalyticResult refers to.
208 -
209 -Domain table: LimitSymbolReference
210 -)))
211 -|(((
212 -**quantitationLimit** Measure
213 -)))|The smallest value of the measured content or the observed value of the parameter in a sample, which can still be determined with a certain reliability by the laboratory. Conventionally, this is the amount that corresponds to ten times the standard deviation at that level (thus, relative standard deviation is 10%). Also known in English as 'LOQ' (Limit of Quantitation). At this value, the rate of 'false negatives' is less than 1%.
214 -
215 -=== ===
216 -
217 217  === Structure projectgegevens ===
218 218  
219 219  (% style="text-align:center" %)
... ... @@ -283,10 +283,12 @@
283 283  
284 284  = =
285 285  
286 -= What to exchange to store the right results? =
218 += What to exchange to bind the right results to the right sample? =
287 287  
288 -The data stream ‘Lab Result’ is the feedback of analysis results on the requested lab assignment at a laboratory.
220 +The data stream ‘Lab Result’ is the feedback of analysis results on the requested lab assignment at a laboratory. At import we need to bind it onto the correct sample.
289 289  
222 +This requires importand field to match the samples in the xml to the samples in our database.
223 +
290 290  **Important fields:**
291 291  
292 292  |=Entity|=Fixed value|=Remark
... ... @@ -305,7 +305,7 @@
305 305  * For Asbestos and Asphalt, new samples are also created at the Lab, which are therefore fed back with a reference to the sample from which they are derived.
306 306  * There is still a desire to feedback from a lab whether an analysis sample has been modified at the lab in terms of sub-samples. For example, if a jar has broken and been replaced with another jar. This has not yet been included in current practices.
307 307  
308 -**Importing the data can be done based on the following steps:**
242 +**Importing the data will be done based on the following steps:**
309 309  
310 310  * Search Project with Project.lokaalID (as placed in the Lab assignment XML).
311 311  * Search Project with Project.ProjectCode (as placed in the Lab assignment XML) if searching on Project.LokaalID yields no results.
... ... @@ -319,6 +319,7 @@
319 319  * If an Analysis Sample is found, the Analysis Results are always updated or added.
320 320  * If Project is found, but the analysis sample is not; then this analysis sample is imported as a new analysis sample with all results.
321 321  * (If it concerns water samples, a new fictional/temporary measuring point and filter could be created.)
256 +*
322 322  
323 323  = SIKB 14 Parameter result combinations =
324 324  
... ... @@ -327,6 +327,12 @@
327 327  \\[[image:1713183008796-215.png]]
328 328  *small remark, condition will be used as: [0..1]
329 329  
265 +Domaintables bound to these fields:
266 +
267 +* Quantity -[[ Parameter, but only group/groep: Grootheid (Quantity)>>https://codes.sikb.nl/tablet/domain-table-details/0eafa483-2875-4c94-890d-66258a6b4d88]]
268 +* Parameter -[[ Parameter, but mainly group/groep: Chemische Stof (Chemical substance)>>https://codes.sikb.nl/tablet/domain-table-details/0eafa483-2875-4c94-890d-66258a6b4d88]]
269 +* Condition - Condition, but not group/groeps that refer to Chemical substance.
270 +
330 330  The combinations are defined for different compartiments like soil/ground, groundwater, wastewater.
331 331  Below are some examples, and some attachments included to support all combinations.
332 332  
... ... @@ -333,23 +333,31 @@
333 333  **2 Examples for Soil:**
334 334  
335 335  |__**Parameter Name**__|__**Parameter ID**__|__**Quantity ID**__|__**Quantity name**__|__**Condition ID**__|__**Condition Name**__
336 -|lood|1116|2725|Massafractie|1|t.o.v. drooggewicht
337 -|minerale olie|1200|2725|Massafractie|93|koolwaterstoffractie C10-C40 / drooggewicht
277 +|lood
278 +(lead)|1116|2725|Massafractie
279 +(Massfraction)|1|t.o.v. drooggewicht
280 +(relative to dry weight)
281 +|minerale olie
282 +(minerale oil)|1200|2725|Massafractie
283 +(Massfraction)|93|koolwaterstoffractie C10-C40 / drooggewicht
284 +(hydrocarbon fraction C10-C40 / dry weight)
338 338  
339 339  **2 Examples for Groundwater:**
340 340  
341 341  |__**Parameter Name**__|__**Parameter ID**__|__**Quantity ID**__|__**Quantity name**__|__**Condition ID**__|__**Condition Name**__|
342 342  |cyanide-complex|2595|2720|(massa)Concentratie|9|opgeloste fractie (bijv. na filtratie)
343 -|som 29 dioxines (Bbk, 1-10-2010, als TEQ)|2160|2720|(massa)Concentratie|10|uitgedrukt in Toxiciteit equivalenten
290 +|som 29 dioxines (TEQ)|2160|2720|(massa)Concentratie|10|uitgedrukt in Toxiciteit equivalenten
344 344  
345 345  **2 Examples for Wastewater:**
346 346  
347 347  |__**Parameter Name**__|__**Parameter ID**__|__**Quantity ID**__|__**Quantity name**__|__**Condition ID**__|__**Condition Name**__|
348 348  |cyanide-complex|2595|2720|(massa)Concentratie|8|Niet van toepassing
349 -|som 29 dioxines (Bbk, 1-10-2010, als TEQ)|2160|2720|(massa)Concentratie|10|uitgedrukt in Toxiciteit equivalenten
296 +|som 29 dioxines (TEQ)|2160|2720|(massa)Concentratie|10|uitgedrukt in Toxiciteit equivalenten
350 350  
351 351  __**Full combinations sheet:  **__[[attach:Full List of AnalysisResult combinations 04-2024.xlsx||rel="noopener noreferrer" target="_blank"]]
352 352  
300 +We can help you with the right combinations and mappings to your own codes.
353 353  
354 354  
303 +
355 355  
labresultaat_IndividueelGr.xml
Content
... ... @@ -1,5 +1,5 @@
1 1  <?xml version="1.0" encoding="utf-8"?>
2 -<imsikb0101:FeatureCollectionIMSIKB0101 gml:id="LABRESULTAAT" xmlns:imsikb0101="http://www.sikb.nl/imsikb0101" xmlns:immetingen="http://www.sikb.nl/immetingen" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gsr="http://www.isotc211.org/2005/gsr" xmlns:gss="http://www.isotc211.org/2005/gss" xmlns:gts="http://www.isotc211.org/2005/gts" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:om="http://www.opengis.net/om/2.0" xmlns:sam="http://www.opengis.net/sampling/2.0" xmlns:sams="http://www.opengis.net/samplingSpatial/2.0" xmlns:spec="http://www.opengis.net/samplingSpecimen/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sikb.nl/imsikb0101 file:///C:/dev/SIKB0101_Protocol/XSDs%2014.8.0/imsikb0101_v14.8.0.xsd">
2 +<imsikb0101:FeatureCollectionIMSIKB0101 gml:id="LABRESULTAAT" xmlns:imsikb0101="http://www.sikb.nl/imsikb0101" xmlns:immetingen="http://www.sikb.nl/immetingen" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gsr="http://www.isotc211.org/2005/gsr" xmlns:gss="http://www.isotc211.org/2005/gss" xmlns:gts="http://www.isotc211.org/2005/gts" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:om="http://www.opengis.net/om/2.0" xmlns:sam="http://www.opengis.net/sampling/2.0" xmlns:sams="http://www.opengis.net/samplingSpatial/2.0" xmlns:spec="http://www.opengis.net/samplingSpecimen/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sikb.nl/imsikb0101 file:///C:/dev/SIKB0101_Protocol/XSDs%2014.9.0/imsikb0101_v14.9.0.xsd">
3 3   <imsikb0101:metaData>
4 4   <imsikb0101:application>urn:imsikb0101:Applicaties:id:1</imsikb0101:application>
5 5   <imsikb0101:date>2013-09-07</imsikb0101:date>
... ... @@ -8,7 +8,7 @@
8 8   <imsikb0101:reportDate>2013-07-07</imsikb0101:reportDate>
9 9   <imsikb0101:sender>urn:imsikb0101:Bronhouders:id:54</imsikb0101:sender>
10 10   <imsikb0101:supplier>urn:imsikb0101:Leveranciers:id:1</imsikb0101:supplier>
11 - <imsikb0101:version>14.8.0</imsikb0101:version>
11 + <imsikb0101:version>14.9.0</imsikb0101:version>
12 12   <imsikb0101:dataflow>urn:imsikb0101:DatastroomType:id:1</imsikb0101:dataflow>
13 13   </imsikb0101:metaData>
14 14   <!-- LabAssignment -->
... ... @@ -175,7 +175,7 @@
175 175   </immetingen:identification>
176 176   <immetingen:physicalProperty>
177 177   <immetingen:PhysicalProperty>
178 - <immetingen:quantity>urn:immetingen:parameter:id:2720</immetingen:quantity>
178 + <immetingen:quantity>urn:immetingen:parameter:id:2725</immetingen:quantity>
179 179   <immetingen:parameter>urn:immetingen:parameter:id:216</immetingen:parameter>
180 180   <immetingen:condition>urn:immetingen:hoedanigheid:id:1</immetingen:condition>
181 181   </immetingen:PhysicalProperty>
labresultaat_IndividueelGw.xml
Size
... ... @@ -1,1 +1,1 @@
1 -15.3 KB
1 +15.4 KB
Content
... ... @@ -1,5 +1,5 @@
1 1  <?xml version="1.0" encoding="utf-8"?>
2 -<imsikb0101:FeatureCollectionIMSIKB0101 gml:id="LABRESULTAAT" xmlns:imsikb0101="http://www.sikb.nl/imsikb0101" xmlns:immetingen="http://www.sikb.nl/immetingen" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gsr="http://www.isotc211.org/2005/gsr" xmlns:gss="http://www.isotc211.org/2005/gss" xmlns:gts="http://www.isotc211.org/2005/gts" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:om="http://www.opengis.net/om/2.0" xmlns:sam="http://www.opengis.net/sampling/2.0" xmlns:sams="http://www.opengis.net/samplingSpatial/2.0" xmlns:spec="http://www.opengis.net/samplingSpecimen/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sikb.nl/imsikb0101 file:///C:/dev/SIKB0101_Protocol/XSDs%2014.8.0/imsikb0101_v14.8.0.xsd">
2 +<imsikb0101:FeatureCollectionIMSIKB0101 gml:id="LABRESULTAAT" xmlns:imsikb0101="http://www.sikb.nl/imsikb0101" xmlns:immetingen="http://www.sikb.nl/immetingen" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gsr="http://www.isotc211.org/2005/gsr" xmlns:gss="http://www.isotc211.org/2005/gss" xmlns:gts="http://www.isotc211.org/2005/gts" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:om="http://www.opengis.net/om/2.0" xmlns:sam="http://www.opengis.net/sampling/2.0" xmlns:sams="http://www.opengis.net/samplingSpatial/2.0" xmlns:spec="http://www.opengis.net/samplingSpecimen/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sikb.nl/imsikb0101 file:///C:/dev/SIKB0101_Protocol/XSDs%2014.9.0/imsikb0101_v14.9.0.xsd">
3 3   <imsikb0101:metaData>
4 4   <imsikb0101:application>urn:imsikb0101:Applicaties:id:1</imsikb0101:application>
5 5   <imsikb0101:date>2013-09-07</imsikb0101:date>
... ... @@ -8,7 +8,7 @@
8 8   <imsikb0101:reportDate>2013-07-07</imsikb0101:reportDate>
9 9   <imsikb0101:sender>urn:imsikb0101:Bronhouders:id:54</imsikb0101:sender>
10 10   <imsikb0101:supplier>urn:imsikb0101:Leveranciers:id:1</imsikb0101:supplier>
11 - <imsikb0101:version>14.8.0</imsikb0101:version>
11 + <imsikb0101:version>14.9.0</imsikb0101:version>
12 12   <imsikb0101:dataflow>urn:imsikb0101:DatastroomType:id:1</imsikb0101:dataflow>
13 13   </imsikb0101:metaData>
14 14   <!-- LabAssignment -->
... ... @@ -152,13 +152,14 @@
152 152   <om:resultTime xlink:href="#_1645261c-381e-4af2-a7d5-78fc4e73aa78"/>
153 153   <om:procedure xlink:href="#_e911262c-d247-4aad-8fea-ae095f62b495"/>
154 154   <om:observedProperty/>
155 - <om:featureOfInterest xlink:href="#_b1adf8f7-e0cd-4810-a93e-60580f34b3fa"/>
155 + <om:featureOfInterest xlink:href="#_b1adf8f7-e0cd-4810-a93e-60580f34b3fa"/>
156 156   <om:result xsi:type="immetingen:AnalyticResultType">
157 + <immetingen:remarks>Opmerking bij het analyseresultaat</immetingen:remarks>
157 157   <immetingen:numericValue uom="urn:immetingen:Eenheid:id:59">633.2</immetingen:numericValue>
158 158   <!-- mg/l -->
159 159   <immetingen:qualityIndicatorType>urn:immetingen:Kwaliteitsoordeel:id:4</immetingen:qualityIndicatorType>
160 160   <immetingen:limitSymbol><![CDATA[<]]></immetingen:limitSymbol>
161 - <immetingen:alphanumericValue>633,2 mg/l</immetingen:alphanumericValue>
162 + <immetingen:alphanumericValue>633,2 mg/l</immetingen:alphanumericValue>
162 162   </om:result>
163 163   <immetingen:identification>
164 164   <immetingen:NEN3610ID>
... ... @@ -179,7 +179,7 @@
179 179   <immetingen:dateExpected>2013-10-28</immetingen:dateExpected>
180 180   <immetingen:versionNumber>115</immetingen:versionNumber>
181 181   </immetingen:AnalysisStatus>
182 - </immetingen:statusOfAnalysis>
183 + </immetingen:statusOfAnalysis>
183 183   </immetingen:Analysis>
184 184   </imsikb0101:featureMember>
185 185   <!-- /Sample 1 Analysis-->
... ... @@ -207,7 +207,7 @@
207 207   <!-- /Sample 1 Analysis-->
208 208   <!-- Sample 2 veldmonster -->
209 209   <imsikb0101:featureMember>
210 - <imsikb0101:Sample gml:id="_4593fd8e-813a-4660-88ad-9e6ea38ca415">
211 + <imsikb0101:Sample gml:id="_55fcfbe8-0e4c-4ddf-8a76-45975332ccfb">
211 211   <sam:sampledFeature/>
212 212   <!-- AnalyseMonster -->
213 213   <sam:relatedSamplingFeature>
... ... @@ -238,7 +238,7 @@
238 238   <immetingen:identification>
239 239   <immetingen:NEN3610ID>
240 240   <immetingen:namespace>SIKB</immetingen:namespace>
241 - <immetingen:lokaalID>4593fd8e-813a-4660-88ad-9e6ea38ca415</immetingen:lokaalID>
242 + <immetingen:lokaalID>55fcfbe8-0e4c-4ddf-8a76-45975332ccfb</immetingen:lokaalID>
242 242   </immetingen:NEN3610ID>
243 243   </immetingen:identification>
244 244   <immetingen:name>WA1-1</immetingen:name>
Labresult_Controle.xsl
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.RobinHuisman
Size
... ... @@ -1,0 +1,1 @@
1 +23.4 KB
Content
... ... @@ -1,0 +1,405 @@
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<!--XSLT Labresult_Controle.xsl versie 4.1 - SIKB0101 versie 14.8.0-->
3 +<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsi="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes" xmlns:imsikb0101="http://www.sikb.nl/imsikb0101" xmlns:immetingen="http://www.sikb.nl/immetingen" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gsr="http://www.isotc211.org/2005/gsr" xmlns:gss="http://www.isotc211.org/2005/gss" xmlns:gts="http://www.isotc211.org/2005/gts" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:om="http://www.opengis.net/om/2.0" xmlns:sam="http://www.opengis.net/sampling/2.0" xmlns:sams="http://www.opengis.net/samplingSpatial/2.0" xmlns:spec="http://www.opengis.net/samplingSpecimen/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 +xmlns:sikb="http://xslcontrole.sikb"
5 + xsi:schemaLocation="http://www.sikb.nl/imsikb0101 imsikb0101_v14.8.0.xsd">
6 + <xsl:output method="xml" indent="yes" />
7 + <xsl:template match="/">
8 + <ArrayOfLogRecord>
9 +
10 + <!-- file dataflow check -->
11 + <xsl:if test="count(//imsikb0101:metaData/imsikb0101:dataflow) &lt; 1">
12 + <xsl:copy-of select="sikb:createRecord('WARNING','imsikb0101:metaData/imsikb0101:dataflow','Er zou een metadata/dataflow ingevuld moeten zijn.')"/>
13 + </xsl:if>
14 + <xsl:if test="lower-case(//imsikb0101:metaData/imsikb0101:dataflow) != lower-case('urn:imsikb0101:DatastroomType:id:1')">
15 + <xsl:copy-of select="sikb:createRecord('WARNING','imsikb0101:metaData/imsikb0101:dataflow','Het veld metadata/dataflow zou ingevuld moeten zijn met: urn:imsikb0101:DatastroomType:id:1. Als dit geen Labresultaat-xml is, kies dan voor een andere controle xslt.')"/>
16 + </xsl:if>
17 +
18 + <xsl:if test="count(//imsikb0101:LabAssignment) != 1">
19 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:LabAssignment','Er moet precies 1 labopdracht aanwezig zijn.')"/>
20 + </xsl:if>
21 + <xsl:variable name="plGUID" select="replace(//imsikb0101:LabAssignment/imsikb0101:belongsToProject/@xlink:href,'#','')" />
22 + <xsl:if test="$plGUID = ''">
23 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:LabAssignment/belongsToProject','Er moet Project gekoppeld zijn.')"/>
24 + </xsl:if>
25 + <xsl:if test="count(//imsikb0101:Project[@gml:id = $plGUID]) != 1">
26 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Project', string-join(('Er moet een Project meegeleverd zijn; gml:id =', $plGUID), ' ') )"/>
27 + </xsl:if>
28 +
29 + <xsl:if test="count(//imsikb0101:LabAssignment//imsikb0101:LabAssignmentCertificate) != 1">
30 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:LabAssignmentCertificate','Er moet een LabAssignmentCertificate in LabAssignment aanwezig zijn.')"/>
31 + </xsl:if>
32 +
33 + <xsl:if test="count(//imsikb0101:LabAssignment//imsikb0101:SampleAnalysisRequest) = 0">
34 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:SampleAnalysisRequest','Er moet een SampleAnalysisRequest in LabAssignment aanwezig zijn.')"/>
35 + </xsl:if>
36 +
37 + <xsl:for-each select="//imsikb0101:LabAssignment//imsikb0101:SampleAnalysisRequest">
38 + <xsl:if test="count(.//imsikb0101:sample) != 1">
39 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Sample','Er moet een Sample in SampleAnalysisRequest aanwezig zijn.')"/>
40 + </xsl:if>
41 + </xsl:for-each>
42 +
43 + <xsl:for-each select="//imsikb0101:Sample">
44 + <xsl:variable name="samGUID" select="@gml:id" />
45 + <xsl:variable name="specimenType" select="spec:specimenType/@xlink:href" />
46 +
47 + <xsl:if test="$specimenType = ''">
48 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Sample', string-join(('Er moet een specimenType in Sample aanwezig zijn; Sample gml:id =', $samGUID), ' ') )"/>
49 + </xsl:if>
50 + <xsl:if test="contains($specimenType,':10') or contains($specimenType,':7') or contains($specimenType,':8') or contains($specimenType,':9') ">
51 + <!-- AnalysisSamples/Materiaalmonsters/Zeefmonsters/Uitloogmonster schould contain Analysis-->
52 + <xsl:if test="count(descendant::immetingen:Analysis) &gt; 0">
53 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Analysis', string-join(('Er mag geen Analysis relationeel gekoppeld zijn in Sample; Sample gml:id =', $samGUID), ' ') )"/>
54 + </xsl:if>
55 + <xsl:if test="count(descendant::sam:relatedObservation[string-length(@xlink:href) > 1]) &lt; 1">
56 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Analysis', string-join(('Er moet een link naar Analysis in Sample aanwezig zijn; Sample gml:id =', $samGUID), ' ') )"/>
57 + </xsl:if>
58 +
59 + </xsl:if>
60 + </xsl:for-each>
61 +
62 + <xsl:for-each select="//immetingen:Analysis">
63 + <xsl:variable name="arGUID" select="@gml:id" />
64 +
65 + <xsl:variable select="string(om:result/@*)" name="arType"/>
66 + <xsl:if test="not(contains($arType,'immetingen:AnalyticResultType'))">
67 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:AnalyticResult', string-join(('Er moet een AnalyticResult in Analysis aanwezig zijn; Analysis gml:id =', $arGUID), ' ') )"/>
68 + </xsl:if>
69 +
70 + <!-- Check AnalysisProcess -->
71 + <xsl:variable select="replace(om:procedure/@xlink:href,'#','')" name="prLiGUID"/>
72 + <xsl:variable select="om:procedure/*/@gml:id" name="prInGUID"/>
73 +
74 + <xsl:if test="concat($prInGUID,'', $prLiGUID) != ''">
75 + <xsl:if test="count(//immetingen:AnalysisProcess[@gml:id = concat($prInGUID,'', $prLiGUID)]) != 1">
76 + <xsl:copy-of select="sikb:createRecord('ERROR','immetingen:AnalysisProcess', string-join(('Analysis verwijst niet naar procedure van type: AnalysisProcess; Analysis gml:id =', $arGUID), ' ') )"/>
77 + </xsl:if>
78 + </xsl:if>
79 +
80 + </xsl:for-each>
81 +
82 +
83 + <xsl:apply-templates select="//imsikb0101:metaData" />
84 + <xsl:apply-templates select="//imsikb0101:SourceSystem" />
85 + <xsl:apply-templates select="//imsikb0101:LabAssignment" />
86 + <xsl:apply-templates select="//imsikb0101:LabAssignmentRequest" />
87 + <xsl:apply-templates select="//imsikb0101:LabAssignmentCertificate" />
88 + <xsl:apply-templates select="//imsikb0101:AsbestosComposition" />
89 + <xsl:apply-templates select="//immetingen:AnalyticResult" />
90 + <xsl:apply-templates select="//immetingen:Package" />
91 + <xsl:apply-templates select="//imsikb0101:featureMember" />
92 + <!--
93 + <xsl:apply-templates select="//imsikb0101:Address" />
94 + <xsl:apply-templates select="//imsikb0101:Person" />
95 + <xsl:apply-templates select="//imsikb0101:Organization" />
96 + -->
97 +
98 + <!-- single fields check -->
99 + <xsl:apply-templates select="//imsikb0101:remarks" />
100 +
101 + <!-- saxon levert nog een error in de RegExp : Waarom ???-->
102 + <xsl:apply-templates select="//om:resultTime" />
103 +
104 +
105 + </ArrayOfLogRecord>
106 + </xsl:template>
107 + <!-- lengte /verplichting van metadata velden -->
108 + <xsl:template match="imsikb0101:metaData">
109 + <xsl:if test="count(imsikb0101:application) != 1">
110 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:metaData','application bij metaData moet aanwezig zijn.')" />
111 + </xsl:if>
112 + <xsl:if test="count(imsikb0101:date) != 1">
113 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:metaData','date bij metaData moet aanwezig zijn.')" />
114 + </xsl:if>
115 + <xsl:if test="count(imsikb0101:supplier) != 1">
116 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:metaData','supplier bij metaData moet aanwezig zijn.')" />
117 + </xsl:if>
118 + <xsl:if test="count(imsikb0101:organisation) != 1">
119 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:metaData','organisation bij metaData moet aanwezig zijn.')" />
120 + </xsl:if>
121 + <xsl:if test="count(imsikb0101:version) != 1">
122 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:metaData','version bij metaData moet aanwezig zijn.')" />
123 + </xsl:if>
124 + <xsl:if test="count(imsikb0101:organisation) &gt;0">
125 + <xsl:if test="string-length(imsikb0101:organisation) &gt; 60">
126 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:metaData','Lengte van organisation bij metaData is meer dan 60 karakters.')" />
127 + </xsl:if>
128 + </xsl:if>
129 + <xsl:if test="count(imsikb0101:version) &gt;0">
130 + <xsl:if test="string-length(imsikb0101:version) &gt; 8">
131 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:metaData','Lengte van version bij metaData is meer dan 8 karakters.')" />
132 + </xsl:if>
133 + </xsl:if>
134 + </xsl:template>
135 + <!-- lengte (/verplichting) van overige velden -->
136 + <xsl:template match="imsikb0101:SourceSystem">
137 + <xsl:if test="count(imsikb0101:applicationID) > 0">
138 + <xsl:if test="string-length(imsikb0101:applicationID) &gt; 20">
139 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:SourceSystem',string-join(('Lengte van applicationID bij SourceSystem is meer dan 20 karakters.'),' '))" />
140 + </xsl:if>
141 + </xsl:if>
142 + </xsl:template>
143 + <xsl:template match="imsikb0101:LabAssignment">
144 + <xsl:if test="count(imsikb0101:customerCode) != 1">
145 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:LabAssignment','customerCode bij LabAssignment moet aanwezig zijn.')" />
146 + </xsl:if>
147 + <xsl:if test="count(imsikb0101:customerCode) &gt; 0">
148 + <xsl:if test="string-length(imsikb0101:customerCode) &gt; 20">
149 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:LabAssignment','Lengte van customerCode bij LabAssignment is meer dan 20 karakters.')" />
150 + </xsl:if>
151 + </xsl:if>
152 +
153 + <!-- Check ProjectLeader is Person -->
154 + <xsl:variable select="replace(imsikb0101:projectLeader/@xlink:href,'#','')" name="prLiGUID"/>
155 + <xsl:variable select="imsikb0101:projectLeader/*/@gml:id" name="prInGUID"/>
156 +
157 + <xsl:if test="concat($prInGUID,'', $prLiGUID) != ''">
158 + <xsl:if test="count(//immetingen:Person[@gml:id = concat($prInGUID,'', $prLiGUID)]) != 1">
159 + <xsl:copy-of select="sikb:createRecord('ERROR','immetingen:Person', 'projectLeader van de labopdracht verwijst niet naar subject van type: imsikb0101:Person.' )"/>
160 + </xsl:if>
161 + </xsl:if>
162 +
163 + </xsl:template>
164 + <xsl:template match="imsikb0101:LabAssignmentRequest">
165 + <xsl:if test="count(imsikb0101:orderNumber) &gt;0">
166 + <xsl:if test="string-length(imsikb0101:orderNumber) &gt; 25">
167 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:LabAssignmentRequest',string-join(('Lengte van orderNumber bij LabAssignmentRequest is meer dan 25 karakters.'),' '))" />
168 + </xsl:if>
169 + </xsl:if>
170 + </xsl:template>
171 + <xsl:template match="imsikb0101:LabAssignmentCertificate">
172 + <xsl:if test="count(imsikb0101:labCertificatePdfLink) &gt;0">
173 + <xsl:if test="string-length(imsikb0101:labCertificatePdfLink) &gt; 2000">
174 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:LabAssignmentCertificate',string-join(('Lengte van labCertificatePdfLink bij LabAssignmentCertificate is meer dan 2000 karakters.'),' '))" />
175 + </xsl:if>
176 + </xsl:if>
177 + <xsl:if test="string-length(imsikb0101:labCertificateNumber) &lt;1">
178 + <xsl:copy-of select="sikb:createRecord('WARNING','imsikb0101:LabAssignmentCertificate',string-join(('Het invullen van het labCertificateNumber is wenselijk voor een goede uitwisseling.'),' '))" />
179 + </xsl:if>
180 + </xsl:template>
181 + <xsl:template match="imsikb0101:AsbestosComposition">
182 + <xsl:if test="count(imsikb0101:searchPartDescription) &gt;0">
183 + <xsl:if test="string-length(imsikb0101:searchPartDescription) &gt; 20">
184 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:AsbestosComposition',string-join(('Lengte van searchPartDescription bij AsbestosComposition is meer dan 20 karakters.'),' '))" />
185 + </xsl:if>
186 + </xsl:if>
187 + </xsl:template>
188 + <xsl:template match="immetingen:AnalyticResult">
189 + <xsl:if test="count(immetingen:alphanunericValue) &gt;0">
190 + <xsl:if test="string-length(immetingen:alphanunericValue) &gt; 20">
191 + <xsl:copy-of select="sikb:createRecord('ERROR','immetingen:AnalyticResult',string-join(('Lengte van alphanunericValue bij AnalyticResult is meer dan 20 karakters.'),' '))" />
192 + </xsl:if>
193 + </xsl:if>
194 +
195 + </xsl:template>
196 + <xsl:template match="immetingen:Package">
197 + <xsl:if test="count(immetingen:barcode) > 0">
198 + <xsl:if test="string-length(immetingen:barcode) &gt; 15">
199 + <xsl:copy-of select="sikb:createRecord('ERROR','immetingen:Package',string-join(('Lengte van barcode bij Package is meer dan 15 karakters.'),' '))" />
200 + </xsl:if>
201 + </xsl:if>
202 + <xsl:if test="count(immetingen:name) > 0">
203 + <xsl:if test="string-length(immetingen:name) &gt; 20">
204 + <xsl:copy-of select="sikb:createRecord('ERROR','immetingen:Package',string-join(('Lengte van name bij Package is meer dan 20 karakters.'),' '))" />
205 + </xsl:if>
206 + </xsl:if>
207 + </xsl:template>
208 + <!--
209 + <xsl:template match="imsikb0101:Address">
210 + <xsl:variable select="@gml:id" name="prGUID" />
211 + <xsl:if test="count(imsikb0101:districtCode) &gt;0">
212 + <xsl:if test="string-length(imsikb0101:districtCode) &gt; 4">
213 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Address',string-join(('Lengte van districtCode bij Address',$prGUID,'is meer dan 4 karakters.'),' '))" />
214 + </xsl:if>
215 + </xsl:if>
216 + <xsl:if test="count(imsikb0101:letter) &gt;0">
217 + <xsl:if test="string-length(imsikb0101:letter) &gt; 1">
218 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Address',string-join(('Lengte van letter bij Address',$prGUID,'is meer dan 1 karakters.'),' '))" />
219 + </xsl:if>
220 + </xsl:if>
221 + <xsl:if test="count(imsikb0101:letterAddition) &gt;0">
222 + <xsl:if test="string-length(imsikb0101:letterAddition) &gt; 4">
223 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Address',string-join(('Lengte van letterAddition bij Address',$prGUID,'is meer dan 4 karakters.'),' '))" />
224 + </xsl:if>
225 + </xsl:if>
226 + <xsl:if test="count(imsikb0101:city) &gt;0">
227 + <xsl:if test="string-length(imsikb0101:city) &gt; 80">
228 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Address',string-join(('Lengte van city bij Address',$prGUID,'is meer dan 80 karakters.'),' '))" />
229 + </xsl:if>
230 + </xsl:if>
231 + <xsl:if test="count(imsikb0101:zipcode) &gt;0">
232 + <xsl:if test="string-length(imsikb0101:zipcode) &gt; 6">
233 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Address',string-join(('Lengte van zipcode bij Address',$prGUID,'is meer dan 6 karakters.'),' '))" />
234 + </xsl:if>
235 + </xsl:if>
236 + <xsl:if test="count(imsikb0101:street) &gt;0">
237 + <xsl:if test="string-length(imsikb0101:street) &gt; 80">
238 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Address',string-join(('Lengte van street bij Address',$prGUID,'is meer dan 80 karakters.'),' '))" />
239 + </xsl:if>
240 + </xsl:if>
241 + </xsl:template>
242 + <xsl:template match="imsikb0101:Person">
243 + <xsl:variable select="@gml:id" name="prGUID" />
244 + <xsl:if test="count(imsikb0101:email) &gt;0">
245 + <xsl:if test="string-length(imsikb0101:email) &gt; 100">
246 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Person',string-join(('Lengte van email bij Person',$prGUID,'is meer dan 100 karakters.'),' '))" />
247 + </xsl:if>
248 + </xsl:if>
249 + <xsl:if test="count(imsikb0101:fax) &gt;0">
250 + <xsl:if test="string-length(imsikb0101:fax) &gt; 20">
251 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Person',string-join(('Lengte van fax bij Person',$prGUID,'is meer dan 20 karakters.'),' '))" />
252 + </xsl:if>
253 + </xsl:if>
254 + <xsl:if test="count(imsikb0101:telephoneNumber) &gt;0">
255 + <xsl:if test="string-length(imsikb0101:telephoneNumber) &gt; 20">
256 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Person',string-join(('Lengte van telephoneNumber bij Person',$prGUID,'is meer dan 20 karakters.'),' '))" />
257 + </xsl:if>
258 + </xsl:if>
259 + <xsl:if test="count(imsikb0101:mobileNumber) &gt;0">
260 + <xsl:if test="string-length(imsikb0101:mobileNumber) &gt; 20">
261 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Person',string-join(('Lengte van mobileNumber bij Person',$prGUID,'is meer dan 20 karakters.'),' '))" />
262 + </xsl:if>
263 + </xsl:if>
264 + <xsl:if test="count(imsikb0101:civilserviceNumber) &gt;0">
265 + <xsl:if test="string-length(imsikb0101:civilserviceNumber) &gt; 9">
266 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Person',string-join(('Lengte van civilserviceNumber bij Person',$prGUID,'is meer dan 9 karakters.'),' '))" />
267 + </xsl:if>
268 + </xsl:if>
269 + <xsl:if test="count(imsikb0101:lastName) &gt;0">
270 + <xsl:if test="string-length(imsikb0101:lastName) &gt; 60">
271 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Person',string-join(('Lengte van lastName bij Person',$prGUID,'is meer dan 60 karakters.'),' '))" />
272 + </xsl:if>
273 + </xsl:if>
274 + <xsl:if test="count(imsikb0101:firstName) &gt;0">
275 + <xsl:if test="string-length(imsikb0101:firstName) &gt; 80">
276 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Person',string-join(('Lengte van firstName bij Person',$prGUID,'is meer dan 80 karakters.'),' '))" />
277 + </xsl:if>
278 + </xsl:if>
279 + </xsl:template>
280 + <xsl:template match="imsikb0101:Organization">
281 + <xsl:variable select="@gml:id" name="prGUID" />
282 + <xsl:if test="count(imsikb0101:name) &gt;0">
283 + <xsl:if test="string-length(imsikb0101:name) &gt; 100">
284 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Organization',string-join(('Lengte van name bij Organization',$prGUID,'is meer dan 100 karakters.'),' '))" />
285 + </xsl:if>
286 + </xsl:if>
287 + <xsl:if test="count(imsikb0101:email) &gt;0">
288 + <xsl:if test="string-length(imsikb0101:email) &gt; 100">
289 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Organization',string-join(('Lengte van email bij Organization',$prGUID,'is meer dan 100 karakters.'),' '))" />
290 + </xsl:if>
291 + </xsl:if>
292 + <xsl:if test="count(imsikb0101:fax) &gt;0">
293 + <xsl:if test="string-length(imsikb0101:fax) &gt; 20">
294 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Organization',string-join(('Lengte van fax bij Organization',$prGUID,'is meer dan 20 karakters.'),' '))" />
295 + </xsl:if>
296 + </xsl:if>
297 + <xsl:if test="count(imsikb0101:telephoneNumber) &gt;0">
298 + <xsl:if test="string-length(imsikb0101:telephoneNumber) &gt; 20">
299 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Organization',string-join(('Lengte van telephoneNumber bij Organization',$prGUID,'is meer dan 20 karakters.'),' '))" />
300 + </xsl:if>
301 + </xsl:if>
302 + <xsl:if test="count(imsikb0101:mobileNumber) &gt;0">
303 + <xsl:if test="string-length(imsikb0101:mobileNumber) &gt; 20">
304 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:Organization',string-join(('Lengte van mobileNumber bij Organization',$prGUID,'is meer dan 20 karakters.'),' '))" />
305 + </xsl:if>
306 + </xsl:if>
307 + </xsl:template>
308 + -->
309 + <xsl:template match="imsikb0101:remarks">
310 + <xsl:if test="string-length() &gt; 4000">
311 + <xsl:copy-of select="sikb:createRecord('ERROR','imsikb0101:remarks','Lengte van remarks is meer dan 4000.')" />
312 + </xsl:if>
313 + </xsl:template>
314 +
315 +<!-- xmlns:xs="http://www.w3.org/2001/XMLSchema" -->
316 +<!-- timePosition fix test (PAR)
317 + <xsl:template match="om:resultTime">
318 + <xsl:if test="count(//gml:timePosition) != 1">
319 + <xsl:copy-of select="sikb:createRecord('ERROR','on:resultTime','Er moet een gml:timePosition in om:resultTime aanwezig zijn.')"/>
320 + </xsl:if>
321 + <xsl:if test="count(//gml:timePosition) != 0">
322 + <xsl:variable select="//gml:timePosition" name="lvDateTime"/>
323 + <xsl:if test="not(lvDateTime castable as xs:date)">
324 + <xsl:copy-of select="sikb:createRecord('ERROR','gml:timePosition','gml:timePosition is niet geldig.')" />
325 + </xsl:if>
326 + </xsl:if>
327 + </xsl:template>
328 +-->
329 +
330 +<!-- werk niet met deze regexp?
331 + <xsl:template match="om:resultTime">
332 + <xsl:if test="count(//gml:timePosition) != 1">
333 + <xsl:copy-of select="sikb:createRecord('ERROR','on:resultTime','Er moet een gml:timePosition in om:resultTime aanwezig zijn.')"/>
334 + </xsl:if>
335 + <xsl:if test="count(//gml:timePosition) != 0">
336 + <xsl:variable select="//gml:timePosition" name="lvDateTime"/>
337 + <xsl:variable name="DTEXP" select ='"^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$"'/>
338 + <xsl:choose>
339 + <xsl:when test="$lvDateTime = ''">
340 + <xsl:copy-of select="sikb:createRecord('ERROR','gml:timePosition','gml:timePosition is niet gevuld.')" />
341 + </xsl:when>
342 + <xsl:when test="matches($lvDateTime, $DTEXP, 'm') ">
343 + </xsl:when>
344 + <xsl:otherwise>
345 + <xsl:copy-of select="sikb:createRecord('ERROR','gml:timePosition','gml:timePosition is niet geldig.')" />
346 + </xsl:otherwise>
347 + </xsl:choose>
348 + </xsl:if>
349 + </xsl:template>
350 + -->
351 +
352 + <xsl:template match="om:resultTime/gml:TimeInstant">
353 + <xsl:if test="count(gml:timePosition) > 0">
354 + <xsl:variable select="gml:timePosition" name="lvDateTime"/>
355 + <xsl:if test="not($lvDateTime castable as xs:dateTime)">
356 + <xsl:copy-of select="sikb:createRecord('ERROR','gml:timePosition', string-join(('gml:timePosition is niet geldig.', $lvDateTime), ' '))" />
357 + </xsl:if>
358 + </xsl:if>
359 + </xsl:template>
360 +
361 + <xsl:template match="imsikb0101:featureMember">
362 + <xsl:variable name="GmlId" select="substring-after(./*/@gml:id,'_')"/>
363 + <xsl:variable name="IdentificationImmetingen" select="./*/immetingen:identification/immetingen:NEN3610ID/immetingen:lokaalID"/>
364 + <xsl:variable name="IdentificationImSikb" select="./*/imsikb0101:identification/immetingen:NEN3610ID/immetingen:lokaalID"/>
365 + <xsl:variable name="ElementName" select="name(./*)"/>
366 + <xsl:choose>
367 +
368 + <xsl:when test="$IdentificationImmetingen != ''">
369 + <xsl:if test="$IdentificationImmetingen != $GmlId">
370 + <xsl:copy-of select="sikb:createRecord('ERROR',$ElementName,string-join(($ElementName,'met gml:id (',$GmlId,') heeft een afwijkend lokaalId (',$IdentificationImmetingen,').' ),' '))" />
371 + </xsl:if>
372 + </xsl:when>
373 +
374 + <xsl:otherwise>
375 + <xsl:if test="$IdentificationImSikb != $GmlId">
376 + <xsl:copy-of select="sikb:createRecord('ERROR',$ElementName,string-join(($ElementName,'met gml:id (',$GmlId,') heeft een afwijkend lokaalId (',$IdentificationImSikb,').' ),' '))" />
377 + </xsl:if>
378 + </xsl:otherwise>
379 +
380 + </xsl:choose>
381 +</xsl:template>
382 +
383 +
384 +
385 +
386 + <!-- verplichte velden -->
387 +
388 + <!-- functies -->
389 + <xsl:function name="sikb:createRecord">
390 + <xsl:param name="type" />
391 + <xsl:param name="title" />
392 + <xsl:param name="message" />
393 + <xsl:element name="LogRecord">
394 + <xsl:element name="Type">
395 + <xsl:copy-of select="$type" />
396 + </xsl:element>
397 + <xsl:element name="Title">
398 + <xsl:copy-of select="$title" />
399 + </xsl:element>
400 + <xsl:element name="Message">
401 + <xsl:copy-of select="$message" />
402 + </xsl:element>
403 + </xsl:element>
404 + </xsl:function>
405 +</xsl:stylesheet>
TerraIndex
asd