Одна задача на пяти языках
Этот документ был подготовлен при помощи ИИ
Текст может содержать неточности, устаревшие данные или технические ошибки. Пожалуйста, проверяйте критически важную информацию перед использованием.
Один и тот же вопрос, записанный каждым языком. Везде self — элемент
ArchiMate, а в SPARQL — ?self.
Есть ли у элемента имя
| Язык | Выражение |
|---|---|
| AQL | self.name <> null and self.name.trim().size() > 0 |
| OCL | self.name <> null and self.name.size() > 0 |
| EOL | self.name.isDefined() and self.name.trim() <> '' |
| CEL | self.name != "" |
| SPARQL | ASK { ?self archimate:Nameable.name ?name . |
Связан ли элемент хоть с чем-нибудь
| Язык | Выражение |
|---|---|
| AQL | self.incomingRelationships->notEmpty() or self.outgoingRelationships->notEmpty() |
| OCL | self.incomingRelationships->notEmpty() or self.outgoingRelationships->notEmpty() |
| EOL | not self.incomingRelationships.isEmpty() or not self.outgoingRelationships.isEmpty() |
| CEL | self.incomingRelationships.size() > 0 || self.outgoingRelationships.size() > 0 |
| SPARQL | ASK { |
Имена всего, на что указывает элемент
| Язык | Выражение |
|---|---|
| AQL | self.outgoingRelationships->collect(r | r.target.name) |
| OCL | self.outgoingRelationships->collect(r | r.target.name) |
| EOL | self.outgoingRelationships.collect(r | r.target.name) |
| CEL | self.outgoingRelationships.map(r, r.target.name) |
| SPARQL | SELECT ?name WHERE { |
Операции над коллекциями пишут через -> в AQL и OCL, через точку в EOL и
макросами в CEL; SPARQL вместо коллекции возвращает строки.
Задано ли свойство owner ровно один раз
| Язык | Выражение |
|---|---|
| AQL | self.properties->select(p | p.key = 'owner')->size() = 1 |
| OCL | self.properties->select(p | p.key = 'owner')->size() = 1 |
| EOL | self.properties.select(p | p.key = 'owner').size() = 1 |
| CEL | self.properties.exists_one(p, p.key == "owner") |
| SPARQL | ASK { |
Обратите внимание на равенство: = в AQL, OCL и EOL, == в CEL, а в SPARQL
вместо него сопоставление с образцом.
Как убрать лишний пробел из имени
Модель меняют только два языка, поэтому у этой задачи два ответа.
| Язык | Выражение |
|---|---|
| EOL | self.name = self.name.trim(); |
| SPARQL | DELETE { GRAPH ?g { ?self archimate:Nameable.name ?name } } |
В обновлении вместе с ?self заранее связана переменная ?g — граф модели.
То же самое на AQL, OCL или CEL отклонят там, где требуется изменение, и модель не тронут там, где примут.