0

我有一些自定义类型:

[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; } }
}

并且如果我从 MyArray 中删除 CardinalityRestriction 属性,它将被 OwlGrinder.exe 导出为单个项目而不是项目数组。

有没有其他方法可以定义数组而不将它们限制在某些元素范围内?

4

1 回答 1

1

ROWLEX OntologyExtractor 行为正确(OwlGrinder 读取本体并生成程序集。OntologyExtractor 读取程序集并吐出本体)。根据OWL 规范,如果没有与 OWL 属性关联的基数限制,则假定其基数“零或更多”。如果您希望属性不是“数组属性”,那么您需要应用基数限制。一种简写方式是使 OWL 属性成为功能属性,其中基数为 0 或 1。

因此,您需要做的就是移除 [CardinalityResiction(1,100)] 装饰,然后您就拥有了想要的东西。

[编辑:回复评论]我复制了你的案例,删除了 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 属性链接的零个或多个项目。

于 2009-09-09T14:42:18.083 回答