syntax - 如何在 rdf :Seq? 中定义元素的类型

标签 syntax rdf owl rdfs turtle-rdf

我想创建一个属性来定义 rdf:Seq作为 rdfs:range一个对象:

eg:myProperty a rdf:Property;
    rdfs:range rdf:Seq;
    .

我正在寻找一种方法来定义存储在 rdf:Seq 中的元素的类型。 .例如,我不想要这个:
eg:typeOfElement a rdf:Class;
    .

eg:somethingElse a rdf:Class;
    .

[] eg:myProperty [
        a rdf:Seq;
        rdf:_1 [a eg:typeOfElement];   # It's the type I want
        rdf:_2 [a eg:typeOfElement];   # It's the type I want
        rdf:_3 [a eg:somethingElse];   # I don't want this type
    ];
    .

有没有办法定义 rdf:Seq元素的类型仅为 eg:typeOfElement当我定义 eg:myProperty ?

(如有必要,我可以使用猫头鹰。)

最佳答案

可能有多种方法可以实现这一点,具体取决于您的实现偏好。我的建议是使用 rdf:li 特殊属性代替任意 rdf:_nnn , 更容易扩展。 rdf:li相当于rdf:_1 , rdf:_2为了。所以下面的代码块是等价的:

:mySeq a rdf:Seq;
  rdf:_1 :foo;
  rdf:_2 :bar .

:mySeq a rdf:Seq;
  rdf:li :foo;
  rdf:li :bar .

请注意,第二个 block 中的顺序很重要。

要完成您的要求,您可以扩展 rdf:li使用新属性并优化其域/范围(尽管这些仅对人类读者真正有意义,因为子属性继承了父属性的语义):
:myItem rdfs:subPropertyOf rdf:li;
  rdfs:range :typeOfElement;
  rdfs:domain :mySeq .
:myItem继承 rdf:li 的语义,所以无论你有什么实现逻辑都可以推断出 :myItem 的值以某种有意义的顺序排列。接下来定义:mySeq通过属性限制类:
:mySeq rdfs:subClassOf [ 
    a owl:Restriction; 
    owl:onProperty :myItem;
    owl:allValuesFrom :typeOfElement;].

断言 :mySeq是属性 :myItem 的所有事物的类显式用于 :typeOfElement 的值.您现在可以使用 :mySeq 创建列表.

更进一步,您可以定义 :mySeq作为上述规则与 rdf:Seq 的交集:
:mySeq a owl:Class;
    owl:equivalentClass
    [ a owl:Class;
        owl:intersectionOf
          ( rdf:Seq
            [a owl:Restriction;
             owl:onProperty :myItem;
             owl:allValuesFrom :typeOfElement ]) ] .

注意使用 owl:equivalentClass代替rdfs:subClassOf .如果我们对待 owl:equivalentClass对称并被 rdfs:subClassOf 包含,例如:
owl:equivalentClass a owl:SymmetricProperty .
owl:equivalentClass rdfs:subPropertyOf rdfs:subClassOf .

那么我们可以有双向的等价性。因此 rdf:Seq 的所有实例:myItem 的值属于 :typeOfElement也是 :mySeq 的实例.在这种情况下,您正在推断类型。所以通过声明:
:x a rdf:Seq; :myItem :foo, :bar .

你可以推断:x a :mySeq .

关于syntax - 如何在 rdf :Seq? 中定义元素的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30529932/

相关文章:

java - 在 JAVA 变量名中使用 UTF-8 字符

syntax - 什么是上下文无关语法和巴科斯诺尔范式?

php - "Directly accessing"返回值而不引用

linked-list - 使用 sparql 将 rdf 有序列表从一个图移动到另一个图

rdf - 使用 SPARQL 查询链接电影数据库 (LMDB)

xml - 结构化格式的维基词典

java - 如何在 Apache(不是 Tomcat)服务器上执行基于 Java 的 OWL 推理器?

rdf - 猫头鹰 - 门徒没有正确推断?如何精确定义一个类 "vegetarian"?

css - CSS block 中的未闭合引号

rdf - 使用OWL API查询BBC Wildlife Ontology