在ROWLEX中有没有办法从序列化对象中删除“rdf:datatype”?

时间:2009-07-14 19:06:37

标签: .net schema rdf rowlex

在ROWLEX中,是否可以删除每个属性的“rdf:datatype”属性和/或使用通用的RDF Schema?

示例:

<MyOntology:Channel>
   <MyOntology:title rdf:datatype="http://www.w3.org/2001/XMLSchema#string">My news</MyOntology:title>
   <MyOntology:description rdf:datatype="http://www.w3.org/2001/XMLSchema#string">My desc</MyOntology:description>
</MyOntology:Channel>

1 个答案:

答案 0 :(得分:2)

这个问题很不清楚,所以你得到一个通用答案:)每个OWL属性必须是数据类型或对象类型。

  • 对象类型属性连接图的两个节点,即不仅是主题,而且三元组的对象也是URI(或空白节点)。
  • 数据类型属性:三元组的对象是具体值,可以是字符串,整数,日期时间等。这些具体值称为“文字”-s。文字的基本类型是“Literal”,从这些是具体类型(字符串,整数,日期时间......)子类。

定义本体时,不要求您将数据类型属性限制为特定的文字类型。你可以保持通用,接受任何类型的文字。 ROWLEX确实支持这一点。有一个通用的RdfLiteral类和一个特定的文字类的主机,如RdfLiteralString,RdfLiteralDateTime等。每个特定的文字类都包含显式和隐式转换实现,以将.NET类型转换为文字并返回。因此,在ROWLEX中,您可以写:

    RdfDocument rdfDoc = new RdfDocument();
    // Assuming that Person class and DateOfBirth data type property 
    // are autogenerated from your person-ontology, AND
    // your DateOfBirth data type property is restricted to DateTime
    Person p = new Person("joe", rdfDoc); 
    // Implicit casting from DateTime to RdfLiteralDateTime
    p.DateOfBirth = new Sytem.DateTime(1946, 12, 31); // Compiles OK
    p.DateOfBirth = 26; // Compiler error
    p.DateOfBirth = "Hello World"; // Compiler error

如果本体中的DateOfBirth数据类型属性不限于DateTime,则上述所有行都会编译而不会出错。但是,我个人的意见是,如果你可以更具体,更具体,因为你可以防止错误和误传。