NoSFeRaTu
#
16 мая 2011
|
на сиреневой книжечке вверху правой кнопкой - Close
я работаю не через либретто ноутс
ну с другими программами я не знаком)
|
Ilya S. Abdrakhimov
#
16 мая 2011
|
На сайте Ontobox.org обновлен справочник встроенных функций Libretto.
|
AVM
#
16 мая 2011
|
С онтологией http://libretto... будем разбираться (убивать), но чуть позже. А пока - вот программка на Libretto, позволяющая грохнуть эту онтологию в любой момент и из любого места:
prefix l "http://libretto.ontobox.org/";
(l:HasURI, l:Prefixed)/v:deleteForced();
%l:*/v:classes()/v:props()/v:delete();
(%l:Prefix, %l:Function)/v:delete();
%l:*/v:classes()/v:delete();
%l:*/v:delete();
Держите в голове, что, если знать как, проще всего такого рода задачи решаются с помощью скриптиков на Libretto.
|
AVM
#
16 мая 2011
|
Юрий пишет:
v:ontologies()/v:entity()/v:objects()
возвращает все объекты в т.ч. классы и еще что-то с непонятными именами.
*[v:local()/(not v:contains('_'))]
так я получил то что хотел.
Хорошо, что срабатывает. Однако нужно учитывать, что такой метод является очень хрупким. Стоит в онтологии случайно оказаться другому объекту без подчеркивания, и все посыплется. Лучше выборки делать не по идентификаторам объектов (которые, как правило, содержат фигню, и не имеют никакого смысла, а суррогатные имена, являясь системными, вообще меняться могут), а опираясь на смысл задачи, например, явно перечисляя классы, объекты которых нужны. Скажем, чтобы удалить все объекты классов С1 и C2 достаточно написать:
(C1, C2)/v:delete();
Чтобы выбрать объекты из дефолтной онтологии, у которых свойство prop имеет более одного значения, пишем
*[prop/v:size()>1]
и т.д. Все лучше делать, не опираясь на внутреннюю структуру имен.
|
Ilya S. Abdrakhimov
#
16 мая 2011
|
Еще раз для Юрия, по поводу получения значений свойств:
кроме имен свойств я хочу отобразить напротив значения этих свойств для этого я ищу способ вернуть значения для каждого свойства, например:
&u1/%name/v:value()
Если сделать запрос:
&u1/name то мне вернется имя, тоесть то что мне надо, но я не знаю как это сделать для списка
Функция для вывода значений t-свойств:
def printTprops() {
var obj = . ;
"Object = "/v:print(); obj/v:local()/v:println() ;
var props = obj/v:tprops();
props as x / "{x/v:local()} = {obj/v:values( x )}"! ;
}
|
AVM
#
16 мая 2011
|
NoSFeRaTu пишет:
Есть ли возможность в объекте сделать ссылку на анонимный объект?
Ведь имя у анонима каждый раз новое.
Если под "ссылкой" понимается присваивание объекта свойству, то пользоваться именами - плохой стиль. Можно ведь присвоить сам объект вместо возни со строками имени (которое, как правильно замечено, может и поменяться). Например, как в следующем примере:
class C {n v:int; c C};
C &a {c = C &_{n = 115}};
&a/c/n;
115
Здесь анонимный объект является значением свойства c объекта &a . Если анонимный объект создается где-то в другом месте, его можно передать через переменную:
class C {n v:int; c C};
var v = C &_{n = 115};
C &a {c = v};
&a/c/n;
115
|
Ilya S. Abdrakhimov
#
16 мая 2011
|
а есть ли возможность записать данные возвращаемые запросом в массив-коллкцию?
Можно присвоить переменной полученную коллекцию и работать с ней как показано в моем предыдущем сообщении (функция printTprops).
С другой стороны можно воспользоваться функциями count и i или функциями head, tail.
|
Djegorik
#
16 мая 2011
|
Execution error occured in template /app/models/init.ltt. Exception raised was RuntimeException : MVX reports: org.ontobox.box.exception.AlreadyExistsException: An entity with the http://libretto.ontobox.org/ name already exists (trying to create Ontology) Action: CreateOntology http://libretto.ontobox.org/ (Line: 5, column: 48) in builtin function http://ontobox.org/#mvx2box/1 ([4:9]).
Как решить эту проблему?
|
Ilya S. Abdrakhimov
#
16 мая 2011
|
Execution error occured in template /app/models/init.ltt. Exception raised was RuntimeException : MVX reports: org.ontobox.box.exception.AlreadyExistsException: An entity with the http://libretto.ontobox.org/ name already exists (trying to create Ontology) Action: CreateOntology http://libretto.ontobox.org/ (Line: 5, column: 48) in builtin function http://ontobox.org/#mvx2box/1 ([4:9]).
Как решить эту проблему?
Смотрите сообщение AVM
|
Djegorik
#
16 мая 2011
|
Execution error occured in template /app/models/init.ltt. Exception raised was RuntimeException : MVX reports: org.ontobox.box.exception.AlreadyExistsException: An entity with the http://libretto.ontobox.org/ name already exists (trying to create Ontology) Action: CreateOntology http://libretto.ontobox.org/ (Line: 5, column: 48) in builtin function http://ontobox.org/#mvx2box/1 ([4:9]).
Как решить эту проблему?
проблема решилась после удаления http://libretto.ontobox.org/ из MVX файла
|
NoSFeRaTu
#
16 мая 2011
|
NoSFeRaTu пишет:
Есть ли возможность в объекте сделать ссылку на анонимный объект?
Ведь имя у анонима каждый раз новое.
Если под "ссылкой" понимается присваивание объекта свойству, то пользоваться именами - плохой стиль. Можно ведь присвоить сам объект вместо возни со строками имени (которое, как правильно замечено, может и поменяться). Например, как в следующем примере:
class C {n v:int; c C};
C &a {c = C &_{n = 115}};
&a/c/n;
115
Здесь анонимный объект является значением свойства c объекта &a . Если анонимный объект создается где-то в другом месте, его можно передать через переменную:
class C {n v:int; c C};
var v = C &_{n = 115};
C &a {c = v};
&a/c/n;
115
А если несколько анонимных объетов создается в другом месте, то как сделать ссылку на них в одном и том же объекте?
|
Ilya S. Abdrakhimov
#
16 мая 2011
|
А если несколько анонимных объетов создается в другом месте, то как сделать ссылку на них в одном и том же объекте?
Можно получить анонимный объект по значениям одного или нескольких свойств.
C &_{n = 1};
C &_{n = 2};
C &a {
c = C[n==1];
}
|
NoSFeRaTu
#
16 мая 2011
|
А если несколько анонимных объетов создается в другом месте, то как сделать ссылку на них в одном и том же объекте?
Можно получить анонимный объект по значениям одного или нескольких свойств.
C &_{n = 1};
C &_{n = 2};
C &a {
c = C[n==1];
}
Это хорошо, но класс, которому надо отнести эти объекты, совершенно другой, и нужно передать не(!) один, а несколько.
Например, как у вас, не только [n==1], но и [n==2].
Когда я пишу:
G &a{
c=C[n==1]; #Подскажите как C &_{n = 2}; сюда еще привнести
}
объект пропадает с поля зрения вообще.
Может класс обозначить иначе надо?
у меня :
class G {
c C;
}
|
Ilya S. Abdrakhimov
#
16 мая 2011
|
Это хорошо, но класс, которому надо отнести эти объекты, совершенно другой, и нужно передать не(!) один, а несколько.
Например, как у вас, не только [n==1], но и [n==2].
Смотрите Libretto Language Tutorial 4. Objects and Their Modifiers
|
Ilya S. Abdrakhimov
#
16 мая 2011
|
Обновлен Libretto Notes.
Теперь должен быть нормальный экспорт/импорт MVX с онтологией http://libretto.ontobox.org/.
|
Ваш ответ:
|
|
Чтобы написать сообщение, необходимо войти или зарегистрироваться