2009-08-06 55 views
0

我有一些自定義類型:如何屬性的數組自定義類型ROWLEX

​​

並具有項目的數組一些其他類型:

[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作爲單個項目導出,而不是作爲項目數組導出。

是否有一些其他方式來定義數組而不將它們約束到一些元素範圍?

回答

1

ROWLEX OntologyExtractor行爲正確(OwlGrinder讀取本體並生成程序集,OntologyExtractor讀取程序集並吐出本體)。根據OWL specifications,如果沒有與OWL屬性關聯的基數限制,則其基數假定爲「零個或多個」。如果你想要一個屬性不是「數組屬性」,那麼你需要應用基數限制。一個簡短的說法就是讓OWL屬性爲functional property,其中基數爲0或1.

所以你只需要移除[CardinalityRestiction(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屬性鏈接的項目。

+0

我希望它的行爲爲基數0 .. *(零或更多),這是一個數組。所以如果我刪除「CardinalityRestriction」,我得到「1」的基數,即單個元素,但不是數組。這就是我的意思。所以根據OWL規範有一個錯誤。 – 2009-09-14 09:26:24

相關問題