Экземпляр RegistryObject может быть связан с нулем или большим количеством экземпляров RegistryObject. Информационная модель определяет интерфейс Ассоциации, экземпляр которого может использоваться, чтобы связать любые два экземпляра RegistryObject.
Пример Ассоциации
Один пример такой ассоциации между двумя экземплярами ClassificationScheme, где один ClassificationScheme заменяет другой ClassificationScheme как показано в рисунке 1. Это может иметь место, когда новая версия ClassificationScheme представляется. В рисунке 1 мы видим, как Ассоциация определяется между новой версией ClassificationScheme NAICS и более старой версией ClassificationScheme NAICS.
Рисунок 1. Пример Ассоциации RegistryObject
Исходные и целевые Объекты
Экземпляр Ассоциации представляет ассоциацию между источником RegistryObject и целевым RegistryObject. Они упоминаются как sourceObject и targetObject для экземпляра Ассоциации. Это важно, какой объект является sourceObject и который является targetObject, поскольку это определяет направленную семантику Ассоциации. В примере в рисунке 1 важно заставить более новую версию ClassificationScheme NAICS быть sourceObject и более старой версией NAICS быть targetObject, потому что associationType подразумевает, что sourceObject заменяет targetObject (а не наоборот).
Типы ассоциации
У каждой Ассоциации должен быть атрибут associationType, который идентифицирует тип той ассоциации. Атрибут associationType является ссылкой на Понятие перечисления как определено предопределенным associationType ClassificationScheme в спецификации JAXR. Наш пример использует предопределенное associationType Понятие под названием, Заменяет.
Внутренние Ассоциации
Случай обычного использования для интерфейса Ассоциации - то, когда Пользователь "u" создает Ассоциацию "a" между двумя RegistryObjects "o1" и "o2", где ассоциация "a" и RegistryObjects "o1" и "o2" является объектами, которые создавались тем же самым Пользователем "u". Это - самый простой вариант использования, где ассоциация между двумя объектами, которые принадлежат тому же самому Пользователю, который определяет Ассоциацию. Такие ассоциации упоминаются как внутренние ассоциации. Рисунок 2 расширяет предыдущий пример в рисунке 1 для внутреннего случая ассоциации.
Рисунок 2. Пример Внутренней Ассоциации
Заочная Ассоциация
Информационная модель также позволяет более сложный вариант использования, где Пользователь "u1" создает Ассоциацию "a" между двумя RegistryObjects "o1" и "o2", где ассоциация "a" принадлежит Пользователю "u1", но RegistryObjects "o1" и "o2" принадлежат Пользователю "u2" и Пользователю "u3" соответственно. В этом варианте использования определяется Ассоциация, где или или оба объекта, которые связываются, принадлежат Пользователю, отличающемуся от Пользователя, определяющего Ассоциацию. Такие ассоциации упоминаются как заочные ассоциации. Интерфейс Ассоциации обеспечивает метод удобства, названный isExtramural, который возвращает true, если экземпляром Ассоциации является заочная Ассоциация. Рисунок 3 расширяет предыдущий пример в рисунке 1 для заочного случая ассоциации. Отметьте, что для заочной ассоциации возможно иметь двух отличных Пользователей, а не трех отличных Пользователей как показано в рисунке 3. В таком случае одному из этих двух пользователей принадлежат два из трех включенных объектов (Ассоциация, sourceObject и targetObject).
Рисунок 3. Пример Заочной Ассоциации
Подтверждение Ассоциации
Ассоциация, возможно, должна быть подтверждена сторонами, объекты которых включаются в ту Ассоциацию. Этот раздел описывает семантику подтверждения ассоциации включенными сторонами.
Подтверждение Внутренних Ассоциаций
Внутренние ассоциации могут быть просмотрены как объявления истины и не требуют, чтобы никакие явные шаги подтвердили что Ассоциация, как являющаяся истиной. Другими словами внутренние ассоциации неявно рассматриваются быть подтвержденными.
Подтверждение Заочных Ассоциаций
Заочные ассоциации могут быть просмотрены как одностороннее утверждение, которое не может быть просмотрено как истина, пока она не была подтверждена другими (заочными) сторонами (Пользователи "u2" и "u3" в примере). confirmAssociation метод в интерфейсе BusinessLifeCycleManager могут вызвать заочные стороны, которым принадлежат sourceObject или targetObject.
Видимость Неподтвержденных Ассоциаций
Заочные ассоциации требуют, чтобы каждая заочная сторона подтвердила утверждение, сделанное заочной Ассоциацией прежде, чем Ассоциация будет видима к 3-ьим сторонам, которые не включаются в Ассоциацию. Это гарантирует, что неподтвержденные Ассоциации не видимы 3-ьим клиентам реестра стороны.
Возможные государства Подтверждения
Примите наиболее общий случай, где есть три отличных Пользовательских экземпляра как показано в рисунке 23 для заочной Ассоциации. Заочная Ассоциация должна быть подтверждена и другими (заочными) сторонами (Пользователи "u2" и "u3" в примере), чтобы быть полностью подтвержденной. Методы isConfirmedBySourceOwner и isConfiremedByTargetOwner в интерфейсе Ассоциации обеспечивают доступ к состоянию подтверждения и для sourceObject и для targetObject. Третий метод удобства, названный isConfirmed, обеспечивает способ определить, подтверждается ли Ассоциация полностью или нет. Таким образом, есть следующие четыре возможности, связанные с состоянием подтверждения заочной Ассоциации:
Ассоциация не подтверждается ни владельцем sourceObject, и при этом это не подтверждается владельцем targetObject.
Ассоциация подтверждается владельцем sourceObject, но это не подтверждается владельцем targetObject.
Ассоциация не подтверждается владельцем sourceObject, но это подтверждается владельцем targetObject.
Ассоциация подтверждается владельцем sourceObject, и это подтверждается владельцем targetObject. Это - единственное состояние, где Ассоциация полностью подтверждается.
Определяет, является ли Ассоциация заочной или нет.
Заочная Ассоциация должна быть подтверждена Пользователем (ями), которым принадлежат источник и/или объект targert, если они отличаются от Пользователя, который создает эту заочную ассоциацию. И sourceObject и targetObject владельцы должны подтвердить заочную Ассоциацию для этого, чтобы быть видимыми к третьим сторонам.
Уровень возможности: 0
Возвраты:
true если sourceObject и/или targetObject принадлежат Пользователю, который отличается от Пользователя, который создал Ассоциацию; false иначе
Броски:
JAXRException - Если провайдер JAXR встречается с внутренней ошибкой
Определяет, была ли Ассоциация подтверждена полностью.
Ассоциация должна только быть видимой к третьим сторонам (не связанный с Ассоциацией), если isConfirmed возвращает true.
Уровень возможности: 0
Возвраты:
true если isConfirmedBySourceOwner и isConfirmedByTargetOwner методы оба возвращают true; false иначе. Поскольку внутренние Ассоциации всегда возвращают true
Броски:
JAXRException - Если провайдер JAXR встречается с внутренней ошибкой