# DD — Diagram Interchange (DI.cmof)

**Arquivo fonte:** [`DI.cmof`](../../DI.cmof) · **Pacote CMOF:** `DI` · **URI:** `http://www.omg.org/spec/DD/20100524/DI-XMI`

Metamodelo genérico de Diagram Interchange (DI) usado pelo BPMN DI. Define a árvore de elementos de diagrama, formas, arestas, planos, estilos e rótulos, com tipos geométricos de `DC.cmof`.

| Metadado | Valor |
| --- | --- |
| Pacote | `DI` |
| URI | `http://www.omg.org/spec/DD/20100524/DI-XMI` |
| Prefixo XMI | `di` |
| Importa | `DC.cmof#_0` |

## Resumo

| Elemento | Quantidade |
| --- | --- |
| Classes | 10 |
| Associações | 10 |
| Enumerações | 0 |
| Tipos de dados | 0 |
| Tipos primitivos | 0 |
| Restrições | 1 |

**Classes sem `superClass` declarada no CMOF:** `Diagram`, `DiagramElement`, `Style`.

## Referências externas

Tipos definidos em outros modelos CMOF e usados por este pacote:

| Tipo | Uso | Ocorrências |
| --- | --- | --- |
| [DC.Bounds](dc.md#datatype-Bounds) | atributo | 2 |
| [DC.Point](dc.md#datatype-Point) | atributo | 1 |
| [DC.Real](dc.md#primitive-Real) | atributo | 1 |
| [DC.String](dc.md#primitive-String) | atributo | 2 |
| `Element` (MOF) | atributo | 1 |

## Classes

Índice alfabético. A coluna **Atributos** conta apenas atributos simples; **Papéis** conta as extremidades de associação navegáveis a partir da classe.

| Classe | Abstrata | Herda de | Atributos | Papéis | Subclasses |
| --- | --- | --- | --- | --- | --- |
| [Diagram](#class-Diagram) | sim | — | 3 | 2 | 0 |
| [DiagramElement](#class-DiagramElement) | sim | — | 0 | 5 | 2 |
| [Edge](#class-Edge) | sim | [DiagramElement](#class-DiagramElement) | 1 | 2 | 1 |
| [Label](#class-Label) | sim | [Node](#class-Node) | 1 | 0 | 0 |
| [LabeledEdge](#class-LabeledEdge) | sim | [Edge](#class-Edge) | 0 | 1 | 0 |
| [LabeledShape](#class-LabeledShape) | sim | [Shape](#class-Shape) | 0 | 1 | 0 |
| [Node](#class-Node) | sim | [DiagramElement](#class-DiagramElement) | 0 | 0 | 3 |
| [Plane](#class-Plane) | sim | [Node](#class-Node) | 0 | 1 | 0 |
| [Shape](#class-Shape) | sim | [Node](#class-Node) | 1 | 0 | 1 |
| [Style](#class-Style) | sim | — | 0 | 0 | 0 |

## Hierarquia de herança

- **Diagram** *(abstrata)*
- **DiagramElement** *(abstrata)*
  - **Edge** *(abstrata)*
    - **LabeledEdge** *(abstrata)*
  - **Node** *(abstrata)*
    - **Label** *(abstrata)*
    - **Plane** *(abstrata)*
    - **Shape** *(abstrata)*
      - **LabeledShape** *(abstrata)*
- **Style** *(abstrata)*

<a id="class-Diagram"></a>
### Diagram

**Classe abstrata** · **Herda de:** — · **Subclasses diretas:** —

**Atributos próprios**

| Nome | Tipo | Mult. | Padrão | Propriedades |
| --- | --- | --- | --- | --- |
| `name` | [DC.String](dc.md#primitive-String) | 0..1 | — | — |
| `documentation` | [DC.String](dc.md#primitive-String) | 0..1 | — | — |
| `resolution` | [DC.Real](dc.md#primitive-Real) | 0..1 | — | — |

**Papéis de associação (saída)**

| Papel | Destino | Mult. | Oposto | Mult. oposta | Propriedades |
| --- | --- | --- | --- | --- | --- |
| `rootElement` | [DiagramElement](#class-DiagramElement) | 1 | `owningDiagram` | 0..1 | composto, derivado, somente leitura |
| `ownedStyle` | [Style](#class-Style) | 0..* | `owningDiagram` | 1 | composto, derivado, somente leitura |

**Papéis de associação (entrada)**

| Origem | Papel na origem | Papel inverso | Mult. inversa |
| --- | --- | --- | --- |
| [DiagramElement](#class-DiagramElement) | `owningDiagram` | `rootElement` | 1 |


<a id="class-DiagramElement"></a>
### DiagramElement

**Classe abstrata** · **Herda de:** — · **Subclasses diretas:** [Edge](#class-Edge), [Node](#class-Node)

**Papéis de associação (saída)**

| Papel | Destino | Mult. | Oposto | Mult. oposta | Propriedades |
| --- | --- | --- | --- | --- | --- |
| `ownedElement` | [DiagramElement](#class-DiagramElement) | 0..* | `owningElement` | 0..1 | composto, derivado, somente leitura |
| `owningElement` | [DiagramElement](#class-DiagramElement) | 0..1 | `ownedElement` | 0..* | derivado, somente leitura |
| `modelElement` | `Element` (MOF) | 0..1 | `diagramElement` | 0..* | derivado, somente leitura |
| `owningDiagram` | [Diagram](#class-Diagram) | 0..1 | `rootElement` | 1 | derivado, somente leitura |
| `style` | [Style](#class-Style) | 0..1 | `diagramElement` | 0..* | derivado, somente leitura |

**Papéis de associação (entrada)**

| Origem | Papel na origem | Papel inverso | Mult. inversa |
| --- | --- | --- | --- |
| [Edge](#class-Edge) | `target` | `targetEdge` | 0..* |
| [Edge](#class-Edge) | `source` | `sourceEdge` | 0..* |
| [DiagramElement](#class-DiagramElement) | `ownedElement` | `owningElement` | 0..1 |
| [DiagramElement](#class-DiagramElement) | `owningElement` | `ownedElement` | 0..* |
| [Diagram](#class-Diagram) | `rootElement` | `owningDiagram` | 0..1 |
| [Plane](#class-Plane) | `planeElement` | `plane` | 0..1 |


<a id="class-Edge"></a>
### Edge

**Classe abstrata** · **Herda de:** [DiagramElement](#class-DiagramElement) · **Subclasses diretas:** [LabeledEdge](#class-LabeledEdge)

**Atributos próprios**

| Nome | Tipo | Mult. | Padrão | Propriedades |
| --- | --- | --- | --- | --- |
| `waypoint` | [DC.Point](dc.md#datatype-Point) | 2..* | — | ordenado, não único |

**Papéis de associação (saída)**

| Papel | Destino | Mult. | Oposto | Mult. oposta | Propriedades |
| --- | --- | --- | --- | --- | --- |
| `target` | [DiagramElement](#class-DiagramElement) | 0..1 | `targetEdge` | 0..* | derivado, somente leitura |
| `source` | [DiagramElement](#class-DiagramElement) | 0..1 | `sourceEdge` | 0..* | derivado, somente leitura |


<a id="class-Label"></a>
### Label

**Classe abstrata** · **Herda de:** [Node](#class-Node) · **Subclasses diretas:** —

**Atributos próprios**

| Nome | Tipo | Mult. | Padrão | Propriedades |
| --- | --- | --- | --- | --- |
| `bounds` | [DC.Bounds](dc.md#datatype-Bounds) | 0..1 | — | — |

**Papéis de associação (entrada)**

| Origem | Papel na origem | Papel inverso | Mult. inversa |
| --- | --- | --- | --- |
| [LabeledEdge](#class-LabeledEdge) | `ownedLabel` | `owningEdge` | 0..1 |
| [LabeledShape](#class-LabeledShape) | `ownedLabel` | `owningShape` | 0..1 |


<a id="class-LabeledEdge"></a>
### LabeledEdge

**Classe abstrata** · **Herda de:** [Edge](#class-Edge) · **Subclasses diretas:** —

**Papéis de associação (saída)**

| Papel | Destino | Mult. | Oposto | Mult. oposta | Propriedades |
| --- | --- | --- | --- | --- | --- |
| `ownedLabel` | [Label](#class-Label) | 0..* | `owningEdge` | 0..1 | composto, derivado, somente leitura |


<a id="class-LabeledShape"></a>
### LabeledShape

**Classe abstrata** · **Herda de:** [Shape](#class-Shape) · **Subclasses diretas:** —

**Papéis de associação (saída)**

| Papel | Destino | Mult. | Oposto | Mult. oposta | Propriedades |
| --- | --- | --- | --- | --- | --- |
| `ownedLabel` | [Label](#class-Label) | 0..* | `owningShape` | 0..1 | composto, derivado, somente leitura |


<a id="class-Node"></a>
### Node

**Classe abstrata** · **Herda de:** [DiagramElement](#class-DiagramElement) · **Subclasses diretas:** [Label](#class-Label), [Plane](#class-Plane), [Shape](#class-Shape)

_Sem atributos ou papéis de associação próprios._


<a id="class-Plane"></a>
### Plane

**Classe abstrata** · **Herda de:** [Node](#class-Node) · **Subclasses diretas:** —

**Papéis de associação (saída)**

| Papel | Destino | Mult. | Oposto | Mult. oposta | Propriedades |
| --- | --- | --- | --- | --- | --- |
| `planeElement` | [DiagramElement](#class-DiagramElement) | 0..* | `plane` | 0..1 | composto, ordenado |

**Restrições**

- `plane_element_type` (OCL): `planeElement->forAll(oclIsKindOf(Shape) or oclIsKindOf(Edge))`


<a id="class-Shape"></a>
### Shape

**Classe abstrata** · **Herda de:** [Node](#class-Node) · **Subclasses diretas:** [LabeledShape](#class-LabeledShape)

**Atributos próprios**

| Nome | Tipo | Mult. | Padrão | Propriedades |
| --- | --- | --- | --- | --- |
| `bounds` | [DC.Bounds](dc.md#datatype-Bounds) | 1 | — | — |


<a id="class-Style"></a>
### Style

**Classe abstrata** · **Herda de:** — · **Subclasses diretas:** —

**Papéis de associação (entrada)**

| Origem | Papel na origem | Papel inverso | Mult. inversa |
| --- | --- | --- | --- |
| [DiagramElement](#class-DiagramElement) | `style` | `diagramElement` | 0..* |
| [Diagram](#class-Diagram) | `ownedStyle` | `owningDiagram` | 1 |


## Associações

O arquivo tem **10 associações** e **12 extremidades navegáveis**. Nomes `A_*` são identificadores internos do CMOF; a direção indicada é a do papel navegável.

| Origem | Papel | Destino | Mult. | Papel oposto | Mult. oposta | Bidirecional | Associação |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Diagram](#class-Diagram) | `ownedStyle` | [Style](#class-Style) | 0..* | `owningDiagram` | 1 | não | `A_ownedStyle_owningDiagram` |
| [Diagram](#class-Diagram) | `rootElement` | [DiagramElement](#class-DiagramElement) | 1 | `owningDiagram` | 0..1 | sim | `A_rootElement_owningDiagram` |
| [DiagramElement](#class-DiagramElement) | `modelElement` | `Element` (MOF) | 0..1 | `diagramElement` | 0..* | não | `A_modelElement_diagramElement` |
| [DiagramElement](#class-DiagramElement) | `ownedElement` | [DiagramElement](#class-DiagramElement) | 0..* | `owningElement` | 0..1 | sim | `A_ownedElement_owningElement` |
| [DiagramElement](#class-DiagramElement) | `owningDiagram` | [Diagram](#class-Diagram) | 0..1 | `rootElement` | 1 | sim | `A_rootElement_owningDiagram` |
| [DiagramElement](#class-DiagramElement) | `owningElement` | [DiagramElement](#class-DiagramElement) | 0..1 | `ownedElement` | 0..* | sim | `A_ownedElement_owningElement` |
| [DiagramElement](#class-DiagramElement) | `style` | [Style](#class-Style) | 0..1 | `diagramElement` | 0..* | não | `A_style_diagramElement` |
| [Edge](#class-Edge) | `source` | [DiagramElement](#class-DiagramElement) | 0..1 | `sourceEdge` | 0..* | não | `A_source_sourceEdge` |
| [Edge](#class-Edge) | `target` | [DiagramElement](#class-DiagramElement) | 0..1 | `targetEdge` | 0..* | não | `A_target_targetEdge` |
| [LabeledEdge](#class-LabeledEdge) | `ownedLabel` | [Label](#class-Label) | 0..* | `owningEdge` | 0..1 | não | `A_ownedLabel_owningEdge` |
| [LabeledShape](#class-LabeledShape) | `ownedLabel` | [Label](#class-Label) | 0..* | `owningShape` | 0..1 | não | `A_ownedLabel_owningShape` |
| [Plane](#class-Plane) | `planeElement` | [DiagramElement](#class-DiagramElement) | 0..* | `plane` | 0..1 | não | `A_planeElement_plane` |
