Иметь подзапрос, который возвращает значения PRINCIPAL, существующие более одного раза:
select *
from tablename
where PRINCIPAL not in (select PRINCIPAL from tablename
group by PRINCIPAL
having count(*) > 1)
ROWLEX на самом деле очень прохладен (использует SemWeb внутренне). Это не просто приложение браузера, а скорее SDK, записанный в C#. При использовании ROWLEX Вы непосредственно больше не взаимодействуете с утраиванием RDF (хотя Вы можете), но дает объектно-ориентированный look&feel. Существует два основных сценария использования:
Типичным использованием является Онтология, сначала приближаются. Например, давайте скажем, что Ваша онтология описывает следующий несколько сценарий наследования:
Автомобиль isSubClassOf Механизм
Автомобиль isSubClassOf CompanyAsset
Используя ROWLEX, Вы получите классы.NET для Автомобиля, Механизма и CompanyAsset. Следующий код C# скомпилирует без любой проблемы:
RdfDocument rdfDoc = new RdfDocument();
Car car = new Car("myCarUri", rdfDoc);
Vehicle vehicle = car; // implicit casting
CompanyAsset companyAsset = car; // implicit casting
vehicle.WheelCount = 4;
companyAsset.MonetaryValue = 15000;
Console.WriteLine(rdfDoc.ToN3());
Это распечатало бы:
myCarUri typeOf Car
myCarUri WheelCount 4
myCarUri MonetaryValue 15000
"Автомобильный" бизнес-объект представлен в RdfDocument, как утраивается. Автоматически сгенерированные классы C#/VB ведут себя как представления. У Вас может быть несколько представлений C# - каждый совершенно другой тип - на том же бизнес-объекте. Когда Вы взаимодействуете с этими представлениями, Вы на самом деле изменение RdfDocument.
Я исследовал это просто немного несколько месяцев назад. Один из более интересных проектов, которые я мог найти: http://www.hookedonlinq.com/linqtordf.ashx
Я создаю библиотеку с открытым исходным кодом dotNetRDF - поддержка OWL в настоящее время несколько ограничена, но может не подходить для ваших целей