这个问题很不清楚,所以你会得到一个通用的答案:) 每个 OWL 属性都必须是数据类型或对象类型。
- 对象类型属性连接图的两个节点,即不仅主体,而且三元组的对象也是一个 URI(或空白节点)。
- 数据类型属性:三元组的对象是一个具体值,可以是字符串、整数、日期时间等。这些具体值称为“literal”-s。文字的基本类型是“文字”,这些是具体类型(字符串、整数、日期时间...)的子类。
定义本体时,不需要您将数据类型属性限制为特定的文字类型。您可以保持其通用性,接受任何类型的文字。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 ,则上述所有行都可以正确编译。但是,我个人的看法是,如果你能更具体,那就更具体,因为你可以防止错误和误解。