rdf - 正确使用rdfs :subPropertyOf

标签 rdf semantic-web rdfs

我想使用 rdf 和 rdfs 表示以下关系:

"Assessment Technique" (AT) has a property of "Assessment Characteristics" (AC). In a database, this would be represented by there being two tables, one for AT and the other AC linked with a foreign key in AC pointing back to the primary key in AT.

到目前为止,我使用 rdf 和 rdfs 想到的是以下代表两个表的类:

ex:AssessmentTechnique rdfs:label "Assessment Technique" .
ex:AssessmentCharacteristic rdfs:label "Assessment Characteristic" .

我的问题是关于AC表中的具体特征。这些可以 - 或者它们 - 正确地称为 hasAssessmentCharacteristics 的子属性吗?或者每个特定特征都应该是它自己的属性(property)?我尝试将它们创建为子属性,但是 hasAssessmentCharacteristics 的范围是一个类,而子属性的范围通常为 xsd:string 或 xsd:int 类型,这违反了子属性具有与父属性相同的域和范围。因此,尽管表达了意图,但以下内容是不正确的。

ex:hasAssessmentCharacteristics
  rdf:type rdfs:Property;
  rdfs:label "has Assessment Characteristics";
  rdfs:domain ex:AssessmentTechnique;
  rdfs:range ex:AssessmentCharacteristics .

ex:hasNumberOfItems
  rdfs:subPropertyOf ex:hasAssessmentCharacteristics;
  rdfs:label "has Number of Items";
  rdfs:domain ex:AssessmentTechnique;
  rdfs:range xsd:int .

我能够想到的唯一其他方法是忽略 AC 表中的每一列都来自同一个表的事实,而是具有一系列如下所示的属性赋值语句:

ex:hasNumberOfItems
  rdf:type rdfs:Property;
  rdfs:domain ex:AssessmentTechnique;
  rdfs:range xsd:int .    

ex:hasPublicAvailability
  rdf:type rdfs:Property;
  rdfs:domain ex:AssessmentTechnique;
  rdfs:range xsd:string .

ex:hasURL
  rdf:type rdfs:Property;
  rdfs:domain ex:AssessmentTechnique;
  rdfs:range xsd:string .

and so on....

我已经看到有很多方法可以在 rdfs 中拥有容器,但是从我对 reference material 的阅读来看似乎这涉及鸡舍和其中包含的母鸡,而不是包含或收集母鸡不同类型特征的方式(以扩展隐喻的使用)到诸如

  • 解剖
  • 饮食
  • 行为
  • 等等......

因此,如果我要创建一长串属性,而不使用任何“标记”来保持它们井井有条,我会用注释做一些事情。但如果有一种方法可以使用 rdf 或 rdfs 或 owl 来组织这些内容,那么我将不胜感激有人为我指明方向。

保罗

最佳答案

My question is about the specific characterstics in the AC table. Can these be - or are they - properly called sub-properties of hasAssessmentCharacteristics? Or should each specific characteristic be its own property?

即使不知道域模型的具体细节,答案就在于子属性的实际含义。在以下情况下,属性 p 是属性 q 的子属性:

        p(x,y) 蕴含 q(x,y)

这就是 RDFS 推理中使用子属性断言的方式。如果一个属性是另一个属性的子属性,那么每当您看到第一个属性的用法时,您就可以推断另一个属性。因此,例如,hasDaughter 是 hasChild 的子属性,因为我们知道如果某人有 x 作为女儿,那么他们就有 x 作为 child 。

听起来您正在寻找一个顶级属性(名称简化)hasCharacteristic 并定义一些指定各个特征的子属性。这没有问题。例如,在描述一个人时,我们可能会这样做:

:hasCharacteristic a rdfs:Property .

:hasHeightInInches rdfs:subPropertyOf :hasCharacteristics ;
                   rdfs:range xsd:int .

:hasName           rdfs:subPropertyOf :hasCharacteristic ;
                   rdfs:range xsd:string .

不过,您对域和范围的看法是正确的;如果子属性的域或范围不兼容,那么您需要确保您在 super 属性上有足够通用的父类(super class),或者根本不声明它们。在上面的示例中,您可以询问一个人的 :hasCharacteristic 的所有值,并且您将获得他们的姓名和高度(以英寸为单位),并且您获得数字和字符串这一事实不会有任何问题.

关于域和范围,请记住具有域 D 的属性 p 仅意味着:

        p(x,y) 蕴含 D(x)

并且范围 R 意味着:

        p(x,y) 蕴含 R(y)

这样做的后果之一是域和范围被子属性“继承”。假设p是q的子属性,q有定义域D。那么从p(x,y),我们可以推断出q(x,y)(因为p是q的子属性),然后我们可以推断出D( x)(因为 D 是 q 的域)。这意味着在上面的示例中,您可以在 super 属性上声明一个公共(public)域:

:hasCharacteristic a rdfs:Property ;
                   rdfs:domain :Person .

:hasHeightInInches rdfs:subPropertyOf :hasCharacteristics ;
                   rdfs:range xsd:int .

:hasName           rdfs:subPropertyOf :hasCharacteristic ;
                   rdfs:range xsd:string .

现在,每当你看到,例如,

        hasName(x,y)

您可以推断以下附加信息:

        有特征(x,y)
人(x)
xsd:字符串(y)

关于rdf - 正确使用rdfs :subPropertyOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32680982/

相关文章:

java - 当我使用 Model 作为返回类型启动 "@Web method"时出错

rdf - 文字是 RDF 资源吗?

使用 Jena 的 RDF/XML

rdf - 如何在三重存储中存储N-三重rdf并查询SPARQl

php - 在 php 中从 RDF 中提取数据?

java - 使用 Apache Jena 在 DBpedia 端点上进行多个查询以进行电影信息检索

rdf - 在SPARQL中使用 'GRAPH'关键字来获取远程图

client - Jena 桌面 SPARQL 客户端 (TDB)?

xml - XML Schema 和 RDF Schema 有什么区别?

rdf - 在 OWL 中的同一属性中定义多个域/范围