正确使用rdfs:subPropertyOf

时间:2015-09-20 15:21:22

标签: rdf semantic-web rdfs

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

  <评估技术“(AT)具有”评估特征“(AC)的属性。在数据库中,这将由两个表来表示,一个用于AT,另一个AC用AC中的外键链接,指向AT中的主键。

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

span child of

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

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

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

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 .

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

  • 解剖学
  • 饮食
  • 行为
  • 依旧......

因此,如果我要创建一个很长的属性列表而没有任何“标记”来保持它们的组织,我会做一些评论。但如果有一种方法可以使用rdf或rdfs或owl来组织这些,那么我会感谢有人指着我。

1 个答案:

答案 0 :(得分:3)

  

我的问题是关于AC表中的特定字符。这些是 - 或者它们 - 可以恰当地称为hasAssessmentCharacteristics的子属性吗?或者每个特定的特征应该是它自己的属性?

如果不了解您的域模型的具体细节,答案就在于子属性的实际含义。在以下情况下,属性p是属性q的子属性:

p(x,y)表示q(x,y)

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

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

:hasCharacteristic a rdfs:Property .

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

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

但你对域和范围的看法是对的;如果子属性的域或范围不兼容,那么您需要确保在超级属性上具有足够的超级类,或者根本不要声明它们。在上面的示例中,您可以询问一个人的所有值: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的域)。这意味着在上面的示例中,您可以在超级属性上声明一个公共域:

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

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

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

现在,只要你看到,例如

hasName(X,Y)

您可以推断这些附加信息:

hasCharacteristic(X,Y)
人(X)
XSD:字符串(x)的