Package com.saxonica.ee.validate

## Class RefSelectorWatch

- java.lang.Object
- - com.saxonica.ee.stream.watch.AbstractWatch
  - - com.saxonica.ee.stream.watch.PatternWatch
    - - com.saxonica.ee.validate.SelectorWatch
      - - com.saxonica.ee.validate.RefSelectorWatch

- All Implemented Interfaces:
    `Watch`

      public class RefSelectorWatch
      extends SelectorWatch

  This class watches the selector for a keyref constraint

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `RefSelectorWatch​(ConstraintChecker checker, KeyRef constraint)` | Create a watch for values that might satisfy a keyref constraint

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `close()` | The close() method is called immediately before the Watch is destroyed, that is, when the element whose declaration scopes the constraint implemented by this Watch goes out of scope.
    `void` | `notifyActualKey​(AtomicSequence[] keyValue, Location locationId)` | Notify a value selected by this KeyRef

    - ### Methods inherited from class com.saxonica.ee.validate.SelectorWatch

      `checkRow, endSelectedParentNode, reportValidationError, startSelectedParentNode`

    - ### Methods inherited from class com.saxonica.ee.stream.watch.PatternWatch

      `getAnchorNode, getSelection, matchesNode, matchesNodesOfKind, open, processItem, setAnchorNode, setSelection`

    - ### Methods inherited from class com.saxonica.ee.stream.watch.AbstractWatch

      `getNamespaceResolver, getPipelineConfiguration, setNamespaceResolver, setPipelineConfiguration`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### RefSelectorWatch

          public RefSelectorWatch​(ConstraintChecker checker,
                                  KeyRef constraint)

      Create a watch for values that might satisfy a keyref constraint
      Parameters:
        `checker` - the ConstraintChecker that initiated this watch
        `constraint` - the constraint being checked

  - ### Method Detail

    - #### notifyActualKey

          public void notifyActualKey​(AtomicSequence[] keyValue,
                                      Location locationId)
                               throws XPathException

      Notify a value selected by this KeyRef
      Parameters:
        `keyValue` - an array holding the components (fields) making up the keyref value
        `locationId` - the location of the node containing the keyref values
      Throws:
        `ValidationException` - if the value is invalid for example a duplicate
        `XPathException`

    - #### close

          public void close()
                     throws XPathException

      The close() method is called immediately before the Watch is destroyed, that is, when the element whose declaration scopes the constraint implemented by this Watch goes out of scope. This implementation searches the list of all key values encountered looking (a) for key references that reference no corresponding key value (b) for key references that reference more than one corresponding key value (which can happen if the keyref and the key are defined at different levels of hierarchy.
      Specified by:
        `close` in interface `Watch`
      Overrides:
        `close` in class `SelectorWatch`
      Throws:
        `XPathException` - May be raised if a dynamic error occurs