WedX - журнал о программировании и компьютерных науках

Попытка получить членов определенного класса в онтологии

Я использую Jena java API для чтения/поиска онтологии и пытаюсь найти всех членов определенного класса онтологии.

Итак, я использую следующий код:

OntClass oc = model.getOntClass(NS + "ClassName");
for (ExtendedIterator<? extends OntResource> i = oc.listInstances(); i.hasNext();)
{
    OntResource or = i.next();
    System.out.println("Local name:" + or.getLocalName()); 
}

Где model — это объект OntModel, с которым считывается онтология.

Результат, который я получаю из этого кода, представляет собой список значений в форме: className1, className5 и т. д.

Однако, когда я открываю онтологию с помощью Protege, члены одного и того же класса имеют обычные имена. Является ли getInstances() подходящей функцией для моей цели? И если да, то где в онтологии хранятся имена, которые я вижу с помощью Protege, и как я могу получить их значения?

07.01.2013

  • @Alexis Pigeon Хорошо, серьезно, в чем проблема быть хорошим? Я знаю, что никто не обязан мне помогать или что-то в этом роде, поэтому я хочу сказать спасибо всем, кто беспокоит.... почему вы должны были это исправить?? 07.01.2013

Ответы:


1

Сама петля в порядке. Ваш вызов .localName() извлекает часть URI, которая (обычно) является частью имени пары prefix:name qname. Часто это осмысленная строка символов, например myontology:Wheel или myontology:Truck, но она формально не определена в стандарте RDF, и, строго говоря, RDF рассматривает целые URI как отдельные токены без какой-либо внутренней структуры.

Когда вы обрабатываете онтологию в коде, URI ресурса (или класса, свойства, индивидуума и т. д.) — это то, что вам нужно для ссылки на этот ресурс. Однако для представления ресурса человеку через какой-то пользовательский интерфейс вам нужно что-то более удобочитаемое. Для этого в RDF существует ряд соглашений (к сожалению, это соглашения во множественном числе). Как правило, вы найдете одно или несколько из следующих свойств, прикрепленных к ресурсу:

  • rdfs:label - обычно используется для компактных читаемых имен
  • rdfs:comment — обычно используется для более длинных и описательных терминов.
  • skos:prefLabel - ярлык "предпочтительный"
  • skos:altLabel - "альтернативный" ярлык

Большинство онтологий или наборов данных будут использовать либо rdfs:comment и rdfs:label, либо термины SKOS. Некоторые будут использовать оба. Имейте в виду, что ярлыки также могут иметь варианты с языковыми тегами:

<https://example.org/terms#Cat>
  a owl:Class ;
  rdfs:label "cat"@en ;
  rdfs:label "chat"@fr ;
  rdfs:comment "denotes the set of all cats"@en ;
  rdfs:comment "désigne l'ensemble de tous les chats"@fr .

Поэтому Protege будет следить за тем, какие из этих свойств используются в редактируемой онтологии, выбирать предпочтительное и затем отображать его. Вы можете сделать то же самое, например:

OntClass oc = model.getOntClass(NS + "ClassName");
for (ExtendedIterator<? extends OntResource> i = oc.listInstances(); i.hasNext();)
{
  OntResource or = i.next();
  Property labelProp = null;

  if (or.hasProperty( RDFS.label )) {
    labelProp = RDFS.label;
  }
  else if (or.hasProperty( SKOS.prefLabel )) {
    labelProp = SKOS.prefLabel;
  }

  // note: does not deal with lang tags
  String label = (labelProp != null) ? or.getProperty( labelProp ).getString() : "unknown";

  System.out.println("Resource " + or.getURI() + " is labelled: " + label ); 
}
08.01.2013
  • Спасибо за ваш подробный ответ, это полностью помогло :) 08.01.2013
  • Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]