specificResource.json (36654B)
1 { 2 "$schema": "http://json-schema.org/draft-04/schema#", 3 "id" : "specificResource.json", 4 "title": "Definitions: Specific Resources.", 5 "description": "Schemas in #/definitions detect or validate keys/objects used in describing Specific Resources (Section 4).", 6 "definitions": { 7 8 "sourceDetected": 9 { 10 "title": "Detection: source", 11 "description": "True when object has exactly 1 source key value and that value is of format uri or an External Web Resource (Section 4) - NB, the Specific Resource is closer in hierarchy to the External Web Resource than a Choice or Set; the items of a Choice or Set may be Specific Resources, but the source of a Specific Resource may not be a Choice or Set.", 12 "type": "object", 13 "properties": 14 { 15 "source": 16 { 17 "type": ["string", "object" ], 18 "oneOf": [ 19 { "$ref": "id.json#/definitions/stringUri" }, 20 { "$ref": "bodyTarget.json#/definitions/externalWebResourceDetected"} 21 ] 22 } 23 }, 24 "required": ["source"] 25 }, 26 27 "specificeResourceDetected": 28 { 29 "title": "Detection: Specific Resource", 30 "description": "True when object has exactly 1 source value and at least one of purpose, selector, state, styleClass, renderedVia, scope (Section 4)", 31 "type": "object", 32 "$ref": "#/definitions/sourceDetected", 33 "anyOf": [ 34 { "$ref": "otherProperties.json#/definitions/purposeRecognizedIfPresent", "required": ["purpose"] }, 35 { "$ref": "#/definitions/selectorDetected" }, 36 { "$ref": "#/definitions/stateDetected" }, 37 { "$ref": "#/definitions/styleClassDetected" }, 38 { "$ref": "#/definitions/renderedViaDetected" }, 39 { "$ref": "#/definitions/scopeDetected" } 40 ] 41 }, 42 43 "itemSpecificResourceDetected": 44 { 45 "title": "Detection: Specific Resource as item member of a Choice or Set", 46 "description": "True when object has items array containing an object with exactly 1 source value and at least one of purpose, selector, state, styleClass, renderedVia, scope (Section 4)", 47 "type": "object", 48 "properties": 49 { 50 "items": 51 { 52 "type": "array", 53 "minItems": 1, 54 "not": 55 { 56 "items": 57 { "not": { "$ref": "#/definitions/specificeResourceDetected" } } 58 } 59 } 60 }, 61 "required": ["items"] 62 }, 63 64 "selectorDefined": 65 { 66 "title": "Definition: selector", 67 "description": "True when object tested has no selector, or has selector identified by uri, or has selector(s) with value matching one or more of the selectors described in the model (Section 4.2)", 68 "type": "object", 69 "properties": 70 { 71 "selector": 72 { 73 "oneOf": [ 74 { "$ref": "id.json#/definitions/stringUri" }, 75 { "type": "object", 76 "anyOf": [ 77 {"$ref": "id.json#/definitions/idValueFound"}, 78 {"$ref": "#/definitions/fragmentSelectorDetected"}, 79 {"$ref": "#/definitions/cssSelectorDetected"}, 80 {"$ref": "#/definitions/xpathSelectorDetected"}, 81 {"$ref": "#/definitions/textQuoteSelectorDetected"}, 82 {"$ref": "#/definitions/textPositionSelectorDetected"}, 83 {"$ref": "#/definitions/dataPositionSelectorDetected"}, 84 {"$ref": "#/definitions/rangeSelectorDetected"}, 85 {"$ref": "#/definitions/svgSelectorDetected"} 86 ] 87 }, 88 { 89 "type": "array", 90 "minItems": 1, 91 "items": 92 { "oneOf": [ 93 { "$ref": "id.json#/definitions/stringUri" }, 94 { "type": "object", 95 "anyOf": [ 96 {"$ref": "id.json#/definitions/idValueFound"}, 97 {"$ref": "#/definitions/fragmentSelectorDetected"}, 98 {"$ref": "#/definitions/cssSelectorDetected"}, 99 {"$ref": "#/definitions/xpathSelectorDetected"}, 100 {"$ref": "#/definitions/textQuoteSelectorDetected"}, 101 {"$ref": "#/definitions/textPositionSelectorDetected"}, 102 {"$ref": "#/definitions/dataPositionSelectorDetected"}, 103 {"$ref": "#/definitions/rangeSelectorDetected"}, 104 {"$ref": "#/definitions/svgSelectorDetected"} 105 ] 106 } 107 ] 108 } 109 } 110 ] 111 } 112 } 113 }, 114 115 "itemSelectorValidIfPresent": 116 { 117 "description": "True if ALL items in the items array of object tested have no selector, or have a selector that is uri, or have a selector that has recognized value(s)", 118 "type": "object", 119 "properties": 120 { 121 "items": 122 { "type": "array", 123 "minItems": 1, 124 "items": 125 { 126 "oneOf": 127 [ 128 { "$ref": "id.json#/definitions/stringUri" }, 129 { "$ref": "#/definitions/selectorDefined" } 130 ] 131 } 132 } 133 } 134 }, 135 136 "selectorDetected": 137 { 138 "title": "Detection: selector type", 139 "description": "True when object tested has selector(s) that is(are) recognized as being one or more of the selectors described in the model (Section 4.2)", 140 "type": "object", 141 "$ref": "#/definitions/selectorDefined", 142 "required": ["selector"] 143 }, 144 145 "fragmentSelectorTypeDetected": 146 { 147 "type": "object", 148 "properties": 149 { 150 "type": { "type": "string", "enum": ["FragmentSelector"] } 151 }, 152 "required": ["type"] 153 }, 154 155 "fragmentSelectorDetected": 156 { 157 "title": "Detection: fragment selector", 158 "description": "True when object is a fragment selelctor (Section 4.2.1)", 159 "allOf": 160 [ 161 { "$ref": "#/definitions/fragmentSelectorTypeDetected"}, 162 { 163 "type": "object", 164 "properties": 165 { 166 "value": { "type": "string" }, 167 "conformsTo": { "type": "string", "format": "uri"} 168 }, 169 "required": ["value"] 170 } 171 ] 172 }, 173 174 "conformsToPropertyFound": 175 { 176 "title": "Detection: fragment selector with conformsTo key", 177 "description": "True when object is a fragment selelctor with a conformsTo key (Section 4.2.1)", 178 "type": "object", 179 "allOf": 180 [ 181 { "$ref": "#/definitions/fragmentSelectorDetected"}, 182 { "required": ["conformsTo"] } 183 ] 184 }, 185 186 "fragmentSelectorTypeValidIfPresent": 187 { 188 "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", 189 "oneOf": 190 [ 191 { "not": { "$ref": "#/definitions/fragmentSelectorTypeDetected" } }, 192 { "$ref": "#/definitions/fragmentSelectorDetected" } 193 ] 194 }, 195 196 "cssSelectorTypeDetected": 197 { 198 "type": "object", 199 "properties": 200 { 201 "type": { "type": "string", "enum": ["CssSelector"] } 202 }, 203 "required": ["type"] 204 }, 205 206 "cssSelectorDetected": 207 { 208 "title": "Detection: CssSelector selector", 209 "description": "True when object is a CssSelector selelctor (Section 4.2.2)", 210 "allOf": 211 [ 212 { "$ref": "#/definitions/cssSelectorTypeDetected" }, 213 { 214 "type": "object", 215 "properties": 216 { 217 "value": { "type": "string" } 218 }, 219 "required": ["value"] 220 } 221 ] 222 }, 223 224 "cssSelectorTypeValidIfPresent": 225 { 226 "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", 227 "oneOf": 228 [ 229 { "not": { "$ref": "#/definitions/cssSelectorTypeDetected" } }, 230 { "$ref": "#/definitions/cssSelectorDetected" } 231 ] 232 }, 233 234 "xpathSelectorTypeDetected": 235 { 236 "type": "object", 237 "properties": 238 { 239 "type": { "type": "string", "enum": ["XPathSelector"] } 240 }, 241 "required": ["type"] 242 }, 243 244 "xpathSelectorDetected": 245 { 246 "title": "Detection: XPath selector", 247 "description": "True when object is a XPath selelctor (Section 4.2.3)", 248 "allOf": 249 [ 250 { "$ref": "#/definitions/xpathSelectorTypeDetected" }, 251 { 252 "type": "object", 253 "properties": 254 { 255 "value": { "type": "string" } 256 }, 257 "required": ["value"] 258 } 259 ] 260 261 }, 262 263 "xpathSelectorTypeValidIfPresent": 264 { 265 "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", 266 "oneOf": 267 [ 268 { "not": { "$ref": "#/definitions/xpathSelectorTypeDetected" } }, 269 { "$ref": "#/definitions/xpathSelectorDetected" } 270 ] 271 }, 272 273 "textQuoteSelectorTypeDetected": 274 { 275 "type": "object", 276 "properties": 277 { 278 "type": { "type": "string", "enum": ["TextQuoteSelector"] } 279 }, 280 "required": ["type"] 281 }, 282 283 "textQuoteSelectorDetected": 284 { 285 "title": "Detection: text quote selector", 286 "description": "True when object is a text quote selelctor (Section 4.2.4)", 287 "allOf": 288 [ 289 { "$ref": "#/definitions/textQuoteSelectorTypeDetected" }, 290 { 291 "type": "object", 292 "properties": 293 { 294 "exact": { "type": "string" }, 295 "prefix": { "type": "string" }, 296 "suffix": { "type": "string" } 297 }, 298 "required": ["exact"] 299 } 300 ] 301 }, 302 303 "prefixPropertyFound": 304 { 305 "title": "Detection: text quote selector with prefix key", 306 "description": "True when object is a text quote selelctor with a prefix key (Section 4.2.4)", 307 "type": "object", 308 "allOf": 309 [ 310 { "$ref": "#/definitions/textQuoteSelectorDetected"}, 311 { "required": ["prefix"] } 312 ] 313 }, 314 315 "suffixPropertyFound": 316 { 317 "title": "Detection: text quote selector with suffix key", 318 "description": "True when object is a text quote selelctor with a suffix key (Section 4.2.4)", 319 "type": "object", 320 "allOf": 321 [ 322 { "$ref": "#/definitions/textQuoteSelectorDetected"}, 323 { "required": ["suffix"] } 324 ] 325 }, 326 327 "textQuoteSelectorTypeValidIfPresent": 328 { 329 "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", 330 "oneOf": 331 [ 332 { "not": { "$ref": "#/definitions/textQuoteSelectorTypeDetected" } }, 333 { "$ref": "#/definitions/textQuoteSelectorDetected" } 334 ] 335 }, 336 337 "textPositionSelectorTypeDetected": 338 { 339 "type": "object", 340 "properties": 341 { 342 "type": { "type": "string", "enum": ["TextPositionSelector"] } 343 }, 344 "required": ["type"] 345 }, 346 347 "textPositionSelectorDetected": 348 { 349 "title": "Definition: text position selector", 350 "description": "True when object is a text position selelctor (Section 4.2.5)", 351 "allOf": 352 [ 353 { "$ref": "#/definitions/textPositionSelectorTypeDetected" }, 354 { 355 "type": "object", 356 "properties": 357 { 358 "start": { "type": "integer", "minimum": 0 }, 359 "end": { "type": "integer","minimum": 0 } 360 }, 361 "required": ["start", "end"] 362 } 363 ] 364 }, 365 366 "textPositionSelectorTypeValidIfPresent": 367 { 368 "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", 369 "oneOf": 370 [ 371 { "not": { "$ref": "#/definitions/textPositionSelectorTypeDetected" } }, 372 { "$ref": "#/definitions/textPositionSelectorDetected" } 373 ] 374 }, 375 376 "dataPositionSelectorTypeDetected": 377 { 378 "type": "object", 379 "properties": 380 { 381 "type": { "type": "string", "enum": ["DataPositionSelector"] } 382 }, 383 "required": ["type"] 384 }, 385 386 "dataPositionSelectorDetected": 387 { 388 "title": "Definition: data position selector", 389 "description": "True when object is a data position selelctor (Section 4.2.5)", 390 "allOf": 391 [ 392 { "$ref": "#/definitions/dataPositionSelectorTypeDetected" }, 393 { 394 "type": "object", 395 "properties": 396 { 397 "start": { "type": "integer", "minimum": 0 }, 398 "end": { "type": "integer","minimum": 0 } 399 }, 400 "required": ["start", "end"] 401 } 402 ] 403 }, 404 405 "dataPositionSelectorTypeValidIfPresent": 406 { 407 "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", 408 "oneOf": 409 [ 410 { "not": { "$ref": "#/definitions/dataPositionSelectorTypeDetected" } }, 411 { "$ref": "#/definitions/dataPositionSelectorDetected" } 412 ] 413 }, 414 415 "svgSelectorTypeDetected": 416 { 417 "type": "object", 418 "properties": 419 { 420 "type": { "type": "string", "enum": ["SvgSelector"] } 421 }, 422 "required": ["type"] 423 }, 424 425 "svgSelectorDetected": 426 { 427 "title": "Detection: svg selector", 428 "description": "True when object is a svg selelctor (Section 4.2.7)", 429 "allOf": 430 [ 431 { "$ref": "#/definitions/svgSelectorTypeDetected" }, 432 { 433 "type": "object", 434 "properties": 435 { 436 "value": { "type": "string" }, 437 "id": { "$ref": "id.json#/definitions/arraySingleStringUri" } 438 }, 439 "oneOf": [ 440 {"required": ["value"] }, 441 {"required": ["id"] } 442 ] 443 } 444 ] 445 }, 446 447 "svgSelectorTypeValidIfPresent": 448 { 449 "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", 450 "oneOf": 451 [ 452 { "not": { "$ref": "#/definitions/svgSelectorTypeDetected" } }, 453 { "$ref": "#/definitions/svgSelectorDetected" } 454 ] 455 }, 456 457 "rangeSelectorTypeDetected": 458 { 459 "type": "object", 460 "properties": 461 { 462 "type": { "type": "string", "enum": ["RangeSelector"] } 463 }, 464 "required": ["type"] 465 }, 466 467 "rangeSelectorDetected": 468 { 469 "title": "Detection: range selector", 470 "description": "True when object is a range selelctor (Section 4.2.9)", 471 "allOf": 472 [ 473 { "$ref": "#/definitions/rangeSelectorTypeDetected" }, 474 { 475 "type": "object", 476 "patternProperties": 477 { 478 "^(startSelector|endSelector)$": 479 { "type": "object", 480 "oneOf": [ 481 {"$ref": "#/definitions/fragmentSelectorDetected"}, 482 {"$ref": "#/definitions/cssSelectorDetected"}, 483 {"$ref": "#/definitions/xpathSelectorDetected"}, 484 {"$ref": "#/definitions/textQuoteSelectorDetected"}, 485 {"$ref": "#/definitions/textPositionSelectorDetected"}, 486 {"$ref": "#/definitions/dataPositionSelectorDetected"}, 487 {"$ref": "#/definitions/svgSelectorDetected"} 488 ] 489 } 490 }, 491 "required": ["startSelector", "endSelector"] 492 } 493 ] 494 }, 495 496 "rangeSelectorTypeValidIfPresent": 497 { 498 "description": "True if Selector Type not detected (i.e., not present), or if both Type and Selector detected (i.e., Selector constraints met); note, Selector cannot be detected if Selector Type not detected.", 499 "oneOf": 500 [ 501 { "not": { "$ref": "#/definitions/rangeSelectorTypeDetected" } }, 502 { "$ref": "#/definitions/rangeSelectorDetected" } 503 ] 504 }, 505 506 "stateDefined" : 507 { 508 "title": "Definition: state", 509 "description": "True when object tested has state with value matching one or more of the state classes described in the model (Section 4.3)", 510 "type": "object", 511 "properties": 512 { 513 "state": 514 { 515 "oneOf": [ 516 { "$ref": "id.json#/definitions/stringUri" }, 517 { "type": "object", 518 "anyOf": [ 519 {"$ref": "id.json#/definitions/idValueFound"}, 520 {"$ref": "#/definitions/timeStateDetected"}, 521 {"$ref": "#/definitions/requestHeaderStateDetected"} 522 ] 523 }, 524 { 525 "type": "array", 526 "minItems": 1, 527 "items": 528 { "oneOf": [ 529 { "$ref": "id.json#/definitions/stringUri" }, 530 { "type": "object", 531 "anyOf": [ 532 {"$ref": "id.json#/definitions/idValueFound"}, 533 {"$ref": "#/definitions/timeStateDetected"}, 534 {"$ref": "#/definitions/requestHeaderStateDetected"} 535 ] 536 } 537 ] 538 } 539 } 540 ] 541 } 542 } 543 }, 544 545 "itemStateValidIfPresent": 546 { 547 "description": "True if ALL items in the items array of object tested have no state, or have a state that is uri, or have a state that has recognized value(s)", 548 "type": "object", 549 "properties": 550 { 551 "items": 552 { "type": "array", 553 "minItems": 1, 554 "items": 555 { 556 "oneOf": 557 [ 558 { "$ref": "id.json#/definitions/stringUri" }, 559 { "$ref": "#/definitions/stateDefined" } 560 ] 561 } 562 } 563 } 564 }, 565 566 "stateDetected": 567 { 568 "title": "Detection: state type", 569 "description": "True when object tested has state(s) that is(are) recognized as being one or more of the states described in the model (Section 4.3)", 570 "type": "object", 571 "$ref": "#/definitions/stateDefined", 572 "required": ["state"] 573 }, 574 575 "timeStateTypeDetected": 576 { 577 "type": "object", 578 "properties": 579 { 580 "type": { "type": "string", "enum": ["TimeState"] } 581 }, 582 "required": ["type"] 583 }, 584 585 "timeStateDetected": 586 { 587 "title": "Detection: time state", 588 "description": "True when object is a time state (Section 4.3.1)", 589 "allOf": 590 [ 591 { "$ref": "#/definitions/timeStateTypeDetected" }, 592 { 593 "type": "object", 594 "properties": 595 { 596 "sourceDate": 597 { "oneOf": [ 598 { "type": "string", 599 "format": "date-time"}, 600 { "type": "array", 601 "minItems": 1, 602 "items": 603 {"type": "string", "format": "date-time"} 604 } 605 ] 606 }, 607 "sourceDateStart": { "type": "string", "format": "date-time"}, 608 "sourceDateEnd": { "type": "string", "format": "date-time"}, 609 "cached": { "type": "string", "format": "uri"} 610 }, 611 "oneOf": 612 [ 613 { "required": ["sourceDate"] }, 614 { "required": ["sourceDateStart", "sourceDateEnd"] } 615 ], 616 "not": 617 { "required": [ "sourceDate", "sourceDateStart", "sourceDateEnd" ] } 618 } 619 ] 620 }, 621 622 "cachedPropertyFound": 623 { 624 "title": "Detection: time state with cached key", 625 "description": "True when object is a time state with a cached key (Section 4.3.1)", 626 "type": "object", 627 "allOf": 628 [ 629 { "$ref": "#/definitions/timeStateDetected"}, 630 { "required": ["cached"] } 631 ] 632 }, 633 634 "timeStateTypeValidIfPresent": 635 { 636 "description": "True if State Type not detected (i.e., not present), or if both Type and State detected (i.e., State constraints met); note, State cannot be detected if State Type not detected.", 637 "oneOf": 638 [ 639 { "not": { "$ref": "#/definitions/timeStateTypeDetected" } }, 640 { "$ref": "#/definitions/timeStateDetected" } 641 ] 642 }, 643 644 "requestHeaderStateTypeDetected": 645 { 646 "type": "object", 647 "properties": 648 { 649 "type": { "type": "string", "enum": ["HttpRequestState"] } 650 }, 651 "required": ["type"] 652 }, 653 654 "requestHeaderStateDetected": 655 { 656 "title": "Detection: request header state", 657 "description": "True when object is a request header state (Section 4.3.2)", 658 "allOf": 659 [ 660 { "$ref": "#/definitions/requestHeaderStateTypeDetected" }, 661 { 662 "type": "object", 663 "properties": 664 { 665 "value": { "type": "string"} 666 }, 667 "required": ["value"] 668 } 669 ] 670 }, 671 672 "requestHeaderStateTypeValidIfPresent": 673 { 674 "description": "True if State Type not detected (i.e., not present), or if both Type and State detected (i.e., State constraints met); note, State cannot be detected if State Type not detected.", 675 "oneOf": 676 [ 677 { "not": { "$ref": "#/definitions/requestHeaderStateTypeDetected" } }, 678 { "$ref": "#/definitions/requestHeaderStateDetected" } 679 ] 680 }, 681 682 "refinedByDefined": 683 { 684 "title": "Definition: refinedBy", 685 "description": "True when object tested has no refinedBy, or has refinedBy identified by uri, or has refinedBy(s) with value matching one or more of the refinedBys described in the model (Section 4.2)", 686 "type": "object", 687 "properties": 688 { 689 "refinedBy": 690 { 691 "oneOf": [ 692 { "$ref": "id.json#/definitions/stringUri" }, 693 { "type": "object", 694 "anyOf": [ 695 {"$ref": "id.json#/definitions/idValueFound"}, 696 {"$ref": "#/definitions/fragmentSelectorDetected"}, 697 {"$ref": "#/definitions/cssSelectorDetected"}, 698 {"$ref": "#/definitions/xpathSelectorDetected"}, 699 {"$ref": "#/definitions/textQuoteSelectorDetected"}, 700 {"$ref": "#/definitions/textPositionSelectorDetected"}, 701 {"$ref": "#/definitions/dataPositionSelectorDetected"}, 702 {"$ref": "#/definitions/rangeSelectorDetected"}, 703 {"$ref": "#/definitions/svgSelectorDetected"}, 704 {"$ref": "#/definitions/timeStateDetected"}, 705 {"$ref": "#/definitions/requestHeaderStateDetected"} 706 ] 707 }, 708 { 709 "type": "array", 710 "minItems": 1, 711 "items": 712 { "oneOf": [ 713 { "$ref": "id.json#/definitions/stringUri" }, 714 { "type": "object", 715 "anyOf": [ 716 {"$ref": "id.json#/definitions/idValueFound"}, 717 {"$ref": "#/definitions/fragmentSelectorDetected"}, 718 {"$ref": "#/definitions/cssSelectorDetected"}, 719 {"$ref": "#/definitions/xpathSelectorDetected"}, 720 {"$ref": "#/definitions/textQuoteSelectorDetected"}, 721 {"$ref": "#/definitions/textPositionSelectorDetected"}, 722 {"$ref": "#/definitions/dataPositionSelectorDetected"}, 723 {"$ref": "#/definitions/rangeSelectorDetected"}, 724 {"$ref": "#/definitions/svgSelectorDetected"}, 725 {"$ref": "#/definitions/timeStateDetected"}, 726 {"$ref": "#/definitions/requestHeaderStateDetected"} 727 ] 728 } 729 ] 730 } 731 } 732 ] 733 } 734 } 735 }, 736 737 "checkForRefinedBy": 738 { 739 "description": "True if no state or selector, if no refinedBy, or if correct refinedBy", 740 "type": "object", 741 "patternProperties": 742 { 743 "^(state|selector)$": 744 {"oneOf": 745 [ 746 { "$ref": "id.json#/definitions/stringUri" }, 747 { "type": "object", 748 "$ref": "#/definitions/refinedByDefined" }, 749 { "type": "array", 750 "minItems": 1, 751 "items": 752 {"oneOf": 753 [ 754 { "$ref": "id.json#/definitions/stringUri" }, 755 { "type": "object", 756 "$ref": "#/definitions/refinedByDefined" } 757 ] 758 } 759 } 760 ] 761 } 762 } 763 }, 764 765 "itemRefinedByValidIfPresent": 766 { 767 "description": "True if items in the items array of object tested have no refinedBy, or have a refinedBy that is uri, or have a refinedBy that has recognized value(s)", 768 "type": "object", 769 "properties": 770 { 771 "items": 772 { "type": "array", 773 "minItems": 1, 774 "items": 775 { 776 "oneOf": 777 [ 778 { "$ref": "id.json#/definitions/stringUri" }, 779 { "$ref": "#/definitions/checkForRefinedBy" } 780 ] 781 } 782 } 783 } 784 }, 785 786 "refinedByDetected": 787 { 788 "title": "Detection: refinedBy ", 789 "description": "True when object tested has selector or state that has refinedBy(s) that is(are) recognized as being one or more of the refinedBys described in the model (Section 4.2)", 790 "type": "object", 791 "anyOf": 792 [ 793 { "properties": 794 { "state" : { "$ref ": "#/definitions/refinedByWithinStateSelector" } }, 795 "required": ["state"] 796 }, 797 { "properties": 798 { "selector" : { "$ref ": "#/definitions/refinedByWithinStateSelector" } }, 799 "required": ["selector"] 800 } 801 ] 802 }, 803 804 "refinedByWithinStateSelector": 805 { 806 "oneOf": 807 [ 808 { "type": "object", 809 "$ref": "#/definitions/refinedByDefined", 810 "required": ["refinedBy"] 811 }, 812 { "type": "array", 813 "minItems": 1, 814 "not": 815 { 816 "items": 817 {"not": 818 { "type": "object", 819 "$ref": "#/definitions/refinedByDefined", 820 "required": ["refinedBy"] 821 } 822 } 823 } 824 } 825 ] 826 }, 827 828 "styleClassDefinition": 829 { "$schema": "http://json-schema.org/draft-04/schema#", 830 "title": "Definition: styleClass property value", 831 "description": "True when the object has no styleClass property or has a styleClass property that appears with source and that is a string value or array of string values (Section 4.4)", 832 "properties": 833 { 834 "styleClass": 835 { 836 "oneOf": 837 [ 838 { "type": "string" }, 839 { "type": "array", 840 "minItems": 1, 841 "items": { "type": "string" } } 842 ] 843 } 844 }, 845 "dependencies": 846 { 847 "styleClass": ["source"] 848 } 849 }, 850 851 "styleClassDetected": 852 { "$schema": "http://json-schema.org/draft-04/schema#", 853 "title": "Collate: styleClass key with qualifying body/target classes", 854 "description": "Supports implementation check of styleClass (if/when) used on Specific Resources (Sections 4.4)", 855 "type": "object", 856 "allOf": [ 857 { "$ref": "#/definitions/styleClassDefinition" }, 858 { "required": ["styleClass"] } 859 ] 860 }, 861 862 "itemStyleClassPropertyDetected": 863 { 864 "$schema": "http://json-schema.org/draft-04/schema#", 865 "title": "Collate: items having styleClass key with qualifying body/target classes", 866 "description": "Supports implementation check of items having styleClass (if/when) used on Specific Resources (Sections 4.4)", 867 "type": "object", 868 "properties": 869 { 870 "items": 871 { 872 "type": "array", 873 "minItems": 1, 874 "not": 875 { 876 "items": 877 { "not": { "$ref": "#/definitions/styleClassDetected" } } 878 } 879 } 880 }, 881 "required": ["items"] 882 }, 883 884 "renderedViaDefinition": 885 { "$schema": "http://json-schema.org/draft-04/schema#", 886 "title": "Definition: renderedVia property value", 887 "description": "True when the body/target has no renderedVia property or has a valid renderedVia property (Section 4.5)", 888 "type": "object", 889 "properties": { 890 "renderedVia": 891 { 892 "oneOf": 893 [ 894 { "$ref": "id.json#/definitions/arraySingleStringUri"}, 895 { "$ref": "id.json#/definitions/idValueFound"}, 896 { "type": "array", 897 "minItems": 1, 898 "items": 899 { 900 "oneOf": 901 [ 902 { "$ref": "id.json#/definitions/arraySingleStringUri"}, 903 { "$ref": "id.json#/definitions/idValueFound"} 904 ] 905 } 906 } 907 ] 908 } 909 } 910 }, 911 912 "renderedViaDetected": 913 { "$schema": "http://json-schema.org/draft-04/schema#", 914 "title": "Collate: renderedVia key with qualifying body/target classes", 915 "description": "Supports implementation check of renderedVia (if/when) used on Specific Resources (Sections 4.4)", 916 "allOf": [ 917 { "$ref": "#/definitions/sourceDetected" }, 918 { "required": ["renderedVia"] }, 919 { "$ref": "#/definitions/renderedViaDefinition" } 920 ] 921 }, 922 923 "itemRenderedViaPropertyDetected": 924 { 925 "$schema": "http://json-schema.org/draft-04/schema#", 926 "title": "Collate: items having renderedVia key with qualifying body/target classes", 927 "description": "Supports implementation check of items having renderedVia (if/when) used on Specific Resources (Sections 4.4)", 928 "type": "object", 929 "properties": 930 { 931 "items": 932 { 933 "type": "array", 934 "minItems": 1, 935 "not": 936 { 937 "items": 938 { "not": { "$ref": "#/definitions/renderedViaDetected" } } 939 } 940 } 941 }, 942 "required": ["items"] 943 }, 944 945 "scopeDefinition": 946 { "$schema": "http://json-schema.org/draft-04/schema#", 947 "title": "Definition: scope property value", 948 "description": "True when the body/target has no scope property or has a valid scope property (Section 4.6)", 949 "type": "object", 950 "properties": { 951 "scope": 952 { 953 "oneOf": 954 [ 955 { "$ref": "id.json#/definitions/stringUri"}, 956 { "type": "array", 957 "minItems": 1, 958 "items": { "$ref": "id.json#/definitions/stringUri"} 959 } 960 ] 961 } 962 } 963 }, 964 965 "scopeDetected": 966 { "$schema": "http://json-schema.org/draft-04/schema#", 967 "title": "Collate: scope key with qualifying body/target classes", 968 "description": "Supports implementation check of scope (if/when) used on Specific Resource Body (Sections 4.6)", 969 "allOf": [ 970 {"required": ["scope"]}, 971 {"$ref": "#/definitions/scopeDefinition"} 972 ] 973 }, 974 975 "sourceWithCreated": 976 { 977 "description": "True if no source, or source is uri, or source is object that does not have created key, or if source is object that has only 1 created key of date-time format", 978 "type": "object", 979 "properties": 980 { 981 "source": 982 { 983 "oneOf": 984 [ 985 { "$ref": "id.json#/definitions/arraySingleStringUri" }, 986 { "$ref": "otherProperties.json#/definitions/createdValidIfPresent" } 987 ] 988 } 989 } 990 }, 991 992 "sourceWithModified": 993 { 994 "description": "True if no source, or source is uri, or source is object that does not have modified key, or if source is object that has only 1 modified key of date-time format", 995 "type": "object", 996 "properties": 997 { 998 "source": 999 { 1000 "oneOf": 1001 [ 1002 { "$ref": "id.json#/definitions/arraySingleStringUri" }, 1003 { "$ref": "otherProperties.json#/definitions/modifiedValidIfPresent" } 1004 ] 1005 } 1006 } 1007 }, 1008 1009 "sourceWithRights": 1010 { 1011 "description": "True if no source, or source is uri, or source is object that does not have rights key, or if source is object that has rights key with all values of uri format", 1012 "type": "object", 1013 "properties": 1014 { 1015 "source": 1016 { 1017 "oneOf": 1018 [ 1019 { "$ref": "id.json#/definitions/arraySingleStringUri" }, 1020 { "$ref": "otherProperties.json#/definitions/rightsValidIfPresent" } 1021 ] 1022 } 1023 } 1024 }, 1025 1026 "sourceWithCanonical": 1027 { 1028 "description": "True if no source, or source is uri, or source is object that does not have canonical key, or if source is object that has only 1 canonical key of uri format", 1029 "type": "object", 1030 "properties": 1031 { 1032 "source": 1033 { 1034 "oneOf": 1035 [ 1036 { "$ref": "id.json#/definitions/arraySingleStringUri" }, 1037 { "$ref": "otherProperties.json#/definitions/canonicalValidIfPresent" } 1038 ] 1039 } 1040 } 1041 }, 1042 1043 "sourceWithVia": 1044 { 1045 "description": "True if no source, or source is uri, or source is object that does not have via key, or if source is object that has via key with all values of uri format", 1046 "type": "object", 1047 "properties": 1048 { 1049 "source": 1050 { 1051 "oneOf": 1052 [ 1053 { "$ref": "id.json#/definitions/arraySingleStringUri" }, 1054 { "$ref": "otherProperties.json#/definitions/viaValidIfPresent" } 1055 ] 1056 } 1057 } 1058 }, 1059 1060 "sourceWithTextDirection": 1061 { 1062 "description": "True if no source, or source is uri, or source is object that does not have textDirection key, or if source is object that has only 1 textDirectoin key, one of ltr, rtl, auto", 1063 "type": "object", 1064 "properties": 1065 { 1066 "source": 1067 { 1068 "oneOf": 1069 [ 1070 { "$ref": "id.json#/definitions/arraySingleStringUri" }, 1071 { "$ref": "bodyTarget.json#/definitions/textDirectionValidIfPresent" } 1072 ] 1073 } 1074 } 1075 }, 1076 1077 "specificResourceWithItems" : 1078 { 1079 "description": "True if both source and items keys are present.", 1080 "allOf": 1081 [ 1082 { "$ref": "#/definitions/sourceDetected"}, 1083 { "required": [ "items" ] } 1084 ] 1085 }, 1086 1087 "itemSRWithItems": 1088 { 1089 "type": "object", 1090 "properties": 1091 { 1092 "items": { 1093 "type": "array", 1094 "minItems": 1, 1095 "not": 1096 { "items": {"not": { "$ref": "#/definitions/specificResourceWithItems" } } } 1097 } 1098 }, 1099 "required": ["items"] 1100 }, 1101 1102 "specificResourceWithValue" : 1103 { 1104 "description": "True if both source and value keys are present.", 1105 "allOf": 1106 [ 1107 { "$ref": "#/definitions/sourceDetected"}, 1108 { "required": [ "value" ] } 1109 ] 1110 }, 1111 1112 "itemSRWithValue": 1113 { 1114 "type": "object", 1115 "properties": 1116 { 1117 "items": { 1118 "type": "array", 1119 "minItems": 1, 1120 "not": 1121 { "items": {"not": { "$ref": "#/definitions/specificResourceWithValue" } } } 1122 } 1123 }, 1124 "required": ["items"] 1125 } 1126 1127 } 1128 }