Как приписать массив пользовательскому типу в ROWLEX

У меня есть какой-то пользовательский тип:

[RdfSerializable]
public class Item
{
    [RdfProperty(true)]
    public string Name { get; set; }
}

и некоторый другой тип, который имеет массив Item:

[RdfSerializable]
public class Container
{
      // ... some code

      // if this attribute is missing, then this property will not be exported as array
      [CardinalityRestriction(1, 100)]     
      [RdfProperty(false)]
      public Item[] MyArray { get { return mMyArray; } }
}

И случается так, что если я удаляю атрибут CardinalityRestriction из MyArray, он будет экспортирован OwlGrinder.exe как отдельный элемент, а НЕ как массив элементов.

Есть ли какой-то другой способ определить массивы, не ограничивая их некоторым диапазоном элементов?

1 ответ

Решение

ROWLEX OntologyExtractor ведет себя корректно (OwlGrinder читает онтологии и создает сборки. OntologyExtractor читает сборки и выплевывает онтологии). Согласно спецификациям OWL, если нет ограничения по количеству элементов, связанного со свойством OWL, то его мощность считается равной нулю или более. Если вы хотите, чтобы свойство не было "свойством массива", вам нужно применить ограничение количества элементов. Сокращение для этого делает свойство OWL функциональным свойством, где количество элементов равно 0 или 1.

Так что все, что вам нужно сделать, это удалить украшение [CardinalityRestiction(1100)], и вы получите то, что хотите.

[РЕДАКТИРОВАТЬ: отвечая на комментарий] Я воспроизвел ваш случай, удалил CardinalityRestriction, и OntologyExtractor создает следующую онтологию:

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:rdfschema="http://www.w3.org/2000/01/rdf-schema#">
    <owl:Ontology rdf:about="http://www.test.com/MyOntology" />
    <owl:Class rdf:about="http://www.test.com/MyOntology#Item" />
    <owl:DatatypeProperty rdf:about="http://www.test.com/MyOntology#Name">
        <rdfschema:domain rdf:resource="http://www.test.com/MyOntology#Item" />
        <rdfschema:range rdf:resource="http://www.w3.org/2001/XMLSchema#string" />
        <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty" />
    </owl:DatatypeProperty>
    <owl:ObjectProperty rdf:about="http://www.test.com/MyOntology#MyArray">
        <rdfschema:domain>
            <owl:Class rdf:about="http://www.test.com/MyOntology#Container" />
        </rdfschema:domain>
        <rdfschema:range rdf:resource="http://www.test.com/MyOntology#Item" />
    </owl:ObjectProperty>
</rdf:RDF>

Эта онтология позволяет вам создавать RDF-файлы, в которых ваш контейнерный объект имеет ноль или более элементов, связанных через свойство MyArray OWL.

Другие вопросы по тегам