2016-04-23 42 views
0

祝你好晚上每个人 我创建了一个只有一个类(方法)的简单本体,并且具有dataproperty action_nb(integer)和类型witch是(String)并且只能是(choice,rank,排序)然后使用查询来搜索器例如: 选择的方法,其中动作数类型=“选择”用数据约束限制创建个体

  1. 如何声明action_nb在因特瓦勒例如:methode1 => action_nb之间[10 ,30]。

  2. 如何声明具有三个值的类型ex:methode1 => type:“choice”;

这是我现在所拥有的代码:

SELECT ?inst 
WHERE { 
    ?inst ex:action_nb ?value . 
    ?inst es:type ?typ. 

    FILTER (?value < 80) 
    FILTER (?typ = " tri ") 
} 
+0

1)数据类型限制在[本答案]中解释(http://stackoverflow.com/questions/36245420/protege-datatype-restriction/36296355#36296355)。 2)我会建议声明,作为对象属性,而不是数据类型属性,有范围枚举类只允许三个人代表“选择”,“排名”和“排序”。 –

+0

谢谢先生...... 2)我认为这就是我需要选择的三种类型之一,我在数据处理中声明它为falow {“choix”,“rank”,“tri”}我遇到问题现在在FILTER – zaky2016

+0

中使用它我已经详细阐述了一个答案,让我知道是否有帮助 –

回答

1

为1),可以使用数据类型属性限制,解释here

对于2),你应该使用owl:oneOf。您可以使用枚举类或枚举数据类型执行此操作:

枚举类只能在RDF资源(个人)的声明列表中拥有成员。您可以为每个选项创建一个不同的个人,然后为类别MethodType创建类别{choice, rank, sort}。请注意,花括号是它在Protégé中看起来的样子。在海龟它看起来就像这样:

:MethodType 
    rdf:type owl:Class ; 
    owl:equivalentClass [ 
     rdf:type owl:Class ; 
     owl:oneOf (
      :choice 
      :rank 
      :sort 
     ) ; 
    ] ; 
. 

所列举的数据类型是由RDF文字列表的范围限制,你的情况rdfs:rangeowl:oneOf {"choice", "rank", "sort"}。 (注:1。对大括号这里举行了很好的意见; 2,本也可以用猫头鹰实现:和allValuesFrom限制)

如果typeOPtypeDP,是espectively对于第一种方法的对象属性,和用于第二数据属性查询可以是:分别

SELECT * 
WHERE { 
?m a :Method; 
:typeOP ?t . 

FILTER EXISTS {?m :typeOP :choice} 
} 

SELECT * 
WHERE { 
?m a :Method; 
:typeDP ?t . 

FILTER EXISTS {?m :typeDP "choice"} 
} 

+0

我使用了枚举数据类型,我声明了数据范围表达式中的数据空间(类型),像这样{“choice”, “sort”,“sort”}。现在,当我使用FILTER(?typ =“tri”)时,这是真的吗? – zaky2016

+0

您可以使用'FILTER {?inst es:type“tri”}' d推荐你的情况,或者'FILTER正则表达式(?inst,“tri”)' –

+0

我已经使用过这个查询了,正如你所说的:SELECT?inst WHERE {inst.exp ex:action_nb?value。 FILTER(?value <80) FILTER {?inst es:type“tri”} }但它告诉我这是格式错误的查询 – zaky2016