Я ожидаю, что это ошибка в ROWLEX. Ваш случай верный, но я предполагаю, что не готовился к нему, когда писал OntologyExtractor. Я постараюсь выпустить исправление как можно скорее.
РЕДАКТИРОВАТЬ : ROWLEX2.1 выпущен, вы можете загрузить его с http://rowlex.nc3a.nato.int. Версия 2.1 (среди прочих) теперь поддерживает функциональность общего свойства. Точный код в вопросе все равно приведет к той же ошибке! Чтобы преодолеть это, вы должны изменить оформление своего кода следующим образом:
[RdfSerializable]
public class Type1
{
[RdfProperty(true, Name = "title", ExcludeFromOntology=true)]
public string Title { get; set; }
}
[RdfSerializable]
public class Type2
{
[RdfProperty(true, Name = "title",
DomainAsType = new Type[]{typeof(Type1), typeof(Type2)})]
public string Title { get; set; }
}
При использовании OntologyExtractor.exe этот код приведет к появлению свойства OWL с классом анонимного домена, который является СОЮЗОМ Типа 1 и Типа 2.
Хотя это технически совершенно правильное решение, установка доменов в свойствах ограничивает их возможное повторное использование в будущем. В качестве решения вы можете заменить домен свойства локальными ограничениями. Вы можете достичь этого следующим образом:
[RdfSerializable]
public class Type2
{
[RdfProperty(true, Name = "title",
DomainAsType = new Type[]{typeof(Type1), typeof(Type2)},
UseLocalRestrictionInsteadOfDomain = true)]
public string Title { get; set; }
}
Если вы оставите UseLocalRestrictionInsteadOfDomain не установленным, ROWLEX выбирает между доменом и локальным ограничением в соответствии с текущим контекстом.