Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Minor documentation and test suite work. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | schema |
Files: | files | file ages | folders |
SHA3-256: |
a14c1bb5159ae86a7c3b0636b8abfc7f |
User & Date: | rolf 2020-07-31 10:59:44 |
Context
2020-08-01
| ||
23:33 | Added text constraint command length. check-in: cc382337fc user: rolf tags: schema | |
2020-07-31
| ||
10:59 | Minor documentation and test suite work. check-in: a14c1bb515 user: rolf tags: schema | |
2020-07-30
| ||
14:33 | Integrated further improvements and features to recovering. check-in: 0e98933aa6 user: rolf tags: schema | |
Changes
Changes to doc/schema.xml.
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 ... 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 .... 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 |
<m>objVar</m> argument is given, then the variable with that name is set to a validation error message. If the dom tree is valid and the optional <m>objVar</m> argument is given, then the variable with that name is set to the empty string. </desc> </commanddef> <commanddef> <command><method>reportcmd</method> <m>?cmdName?</m></command> <desc>This method expects the name of a tcl command to be called in case of validation error. This command will be called with two arguments: the schema command, that is rasing the validation error, and a validation error code. For more detailed information see <ref refid="recovering">Recovering</ref>.The possible error codes are: <dl> <dt>MISSING_ELEMENT</dt><dd></dd> <dt>MISSING_TEXT</dt><dd></dd> <dt>UNEXPECTED_ELEMENT</dt><dd></dd> <dt>UNEXPECTED_ROOT_ELEMENT</dt><dd></dd> ................................................................................ meanings are:</p> <dl> <dt>NONE</dt><dd>The schema command currently doesn't recover from a validation event.</dd> <dt>MATCH_ELEMENT_START</dt><dd>Element start event, which includs looking for missing or unknown attributes.</dd> <dt>MATCH_ELEMENT_END</dt><dd>Element end event.</dd> <dt>MATCH_TEXT</dt><dd>Validating text between tags.</dd> <dt>MATCH_ATTRIBUTE_TEXT</dt><dd>Attribute text value contraint check</dd> <dt>MATCH_GLOBAL</dt><dd>Checking global IDs</dd> <dt>MATCH_DOM_KEYCONSTRAINT</dt><dd>Checking domunique constaint</dd> <dt>MATCH_DOM_XPATH_BOOLEAN</dt><dd>Checking domxpathboolean constaint</dd> </dl> If called with one of the possible optional arguments the command returns detail information depending on current action. ................................................................................ </section> <section id="recovering"> <title>Recovering</title> <p>By default the validation engine stops at the first detected validation violation and reports that finding. It does so by result false (and set, if given, the result variable with an error message) in case the schema command itself is used to validate input. If the schema command is used by a SAX parser or the DOM parser it does so by throwing error.</p> <p>If a <m>reportcmd</m> is set this command is called on global level appended with the schema command and an error type as arguments if a validation violation is detected. Then the |
| | | | | | | |
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 ... 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 .... 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 |
<m>objVar</m> argument is given, then the variable with that name is set to a validation error message. If the dom tree is valid and the optional <m>objVar</m> argument is given, then the variable with that name is set to the empty string. </desc> </commanddef> <commanddef> <command><method>reportcmd</method> <m>?cmd?</m></command> <desc>This method expects the name of a tcl command to be called in case of validation error. This command will be called with two arguments appended: the schema command, that is rasing the validation error, and a validation error code. For more detailed information see <ref refid="recovering">Recovering</ref>.The possible error codes are: <dl> <dt>MISSING_ELEMENT</dt><dd></dd> <dt>MISSING_TEXT</dt><dd></dd> <dt>UNEXPECTED_ELEMENT</dt><dd></dd> <dt>UNEXPECTED_ROOT_ELEMENT</dt><dd></dd> ................................................................................ meanings are:</p> <dl> <dt>NONE</dt><dd>The schema command currently doesn't recover from a validation event.</dd> <dt>MATCH_ELEMENT_START</dt><dd>Element start event, which includs looking for missing or unknown attributes.</dd> <dt>MATCH_ELEMENT_END</dt><dd>Element end event.</dd> <dt>MATCH_TEXT</dt><dd>Validating text between tags.</dd> <dt>MATCH_ATTRIBUTE_TEXT</dt><dd>Attribute text value constraint check</dd> <dt>MATCH_GLOBAL</dt><dd>Checking global IDs</dd> <dt>MATCH_DOM_KEYCONSTRAINT</dt><dd>Checking domunique constaint</dd> <dt>MATCH_DOM_XPATH_BOOLEAN</dt><dd>Checking domxpathboolean constaint</dd> </dl> If called with one of the possible optional arguments the command returns detail information depending on current action. ................................................................................ </section> <section id="recovering"> <title>Recovering</title> <p>By default the validation engine stops at the first detected validation violation and report that finding. It does so by return false (and set, if given, the result variable with an error message) in case the schema command itself is used to validate input. If the schema command is used by a SAX parser or the DOM parser it does so by throwing error.</p> <p>If a <m>reportcmd</m> is set this command is called on global level appended with the schema command and an error type as arguments if a validation violation is detected. Then the |
Changes to tests/schema.test.
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
....
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
|
} {
lappend result [s validate $xml]
}
s delete
set result
} {0 0 1 1 1 1 1 1 1 0}
test schema-8.1 {validate method} {
tdom::schema create grammar
grammar defelement doc {
element e1
element e2 *
}
foreach e {e1 e2} {
................................................................................
lappend result {*}$fromReportCmd
incr xmlnr
}
s delete
set result
} {0: 1 {END_EVENT doc} {expecting a} {END_EVENT doc} {expecting b} {END_EVENT doc} {expecting c} {END_EVENT doc} {expecting d} 1: 1 {END_EVENT doc} {expecting b} {END_EVENT doc} {expecting c} {END_EVENT doc} {expecting d} 2: 1 {END_EVENT doc} {expecting c} {END_EVENT doc} {expecting d} 3: 1 {MATCH_ELEMENT_START expecting c} 4: 1 5: 1 {MATCH_ELEMENT_START expecting d}}
proc schema-18 {args} {
lappend ::result {*}$args
}
test schema-18.1 {reportcmd} {
tdom::schema s
s define {
defelement doc {
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
....
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
|
} { lappend result [s validate $xml] } s delete set result } {0 0 1 1 1 1 1 1 1 0} test schema-7.22 {Constraint text content in seq} { tdom::schema s s defelement doc { element a text { minLength 4 } element b } set result [list] foreach xml { <doc/> <doc><a/>1234<b/></doc> <doc><a/>123<b/></doc> <doc><a/>12345<b/></doc> {<doc><a/> <b/></doc>} {<doc> <a/> <b/></doc>} } { lappend result [s validate $xml] } s delete set result } {0 1 0 1 1 1} test schema-8.1 {validate method} { tdom::schema create grammar grammar defelement doc { element e1 element e2 * } foreach e {e1 e2} { ................................................................................ lappend result {*}$fromReportCmd incr xmlnr } s delete set result } {0: 1 {END_EVENT doc} {expecting a} {END_EVENT doc} {expecting b} {END_EVENT doc} {expecting c} {END_EVENT doc} {expecting d} 1: 1 {END_EVENT doc} {expecting b} {END_EVENT doc} {expecting c} {END_EVENT doc} {expecting d} 2: 1 {END_EVENT doc} {expecting c} {END_EVENT doc} {expecting d} 3: 1 {MATCH_ELEMENT_START expecting c} 4: 1 5: 1 {MATCH_ELEMENT_START expecting d}} proc schema-17.28 {userarg scmd errType} { append ::result $userarg $scmd $errType } test schema-17.28 {reportcmd with additional args} { tdom::schema s s defelement doc { element a } s reportcmd "schema-17.28 foo" set result "" s validate <doc><wrong/></doc s delete set result } foosMISSING_ELEMENT proc schema-17.29 {args} { error "triggered" } test schema-17.29 {error in reportcmd} { tdom::schema s s defelement doc { element a } s reportcmd schema-17.29 set result [catch {s validate <doc><wrong/></doc} errMsg] s delete append result $errMsg } {1error "triggered" at line 1 character 13} proc schema-18 {args} { lappend ::result {*}$args } test schema-18.1 {reportcmd} { tdom::schema s s define { defelement doc { |