2010-10-30 88 views
3

在我的数据库中,我有一些字符串属性。一些属性值与数字字符串匹配(仅包含数字)。我想给这些东西一个特殊的类型(他们是什么的子类型)。 OWL中有这样的可能吗?OWL:将属性值限制为数字字符串

回答

0

实际上你可以在RDF中做些什么。对于RDF任何文字,你可以在RDF/XML像这样的东西(在乌龟/ RDF)指定类型...

@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 
:x :myDataTypeProperty "123"^^xsd:integer . 
:y :myDataTypeProperty "some string"^^xsd:string . 
:z :myDataTypeProperty "2004-12-06"^^xsd:date . 

同例如

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns="http://www.foo.bar.com#"> 
    <rdf:Description rdf:about="http://www.foo.bar.com#x"> 
    <myDataTypeProperty rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">123</myDataTypeProperty> 
    </rdf:Description> 
    <rdf:Description rdf:about="http://www.foo.bar.com#y"> 
    <myDataTypeProperty rdf:datatype="http://www.w3.org/2001/XMLSchema#string">some string</myDataTypeProperty> 
    </rdf:Description> 
    <rdf:Description rdf:about="http://www.foo.bar.com#z"> 
    <myDataTypeProperty rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2004-12-06</myDataTypeProperty> 
    </rdf:Description> 
</rdf:RDF> 

XMLSchema(XSD)规范你可以找出所有支持的数据类型。不过可以肯定的是,你只能使用在SPARQL spec

提到的那些,你可以薄荷自己的数据类型,如果你想和有类似:

:x :myDataTypeProperty "123"^^ns:MyClassificationScheme . 

而且你可以更进一步说...

ns:MyClassificationScheme rdfs:subClassOf xsd:integer . 

当你发出SPARQL查询对数据,当您发出申请的过滤器,这样你可以指定类型:

SELECT * WHERE { 
    ?person :born ?birthDate . 
    FILTER (?birthDate > "2005-02-28"^^xsd:date) . 
} 

我希望这能回答你的问题。

编辑

正如胖子提到我的答案是走错direcction。无论如何我都离开了。

+0

我知道,但它不是我想要的。我有一个'xsd:string'数据类型属性,它已经在数据库中填充了值。其中一些值恰好匹配整数。我想资源巫婆这样的属性是自动的一些特殊的子类。它比查询中的FILTER REGEX更方便(但这样的查询也可以,只是不太方便)。基本上我想要一个正则表达式(或“转换为'xsd:integer'支持字符串”)的值限制。 – panzi 2010-10-31 00:27:03

+0

好的,我明白了。我想我完全误解了你的问题。我已经添加了一个不同的答案.. – 2010-10-31 09:20:11

2

我认为你需要的是Datatype Restrictions结合xsd:pattern

下面的公理是OWL 2 Primer ...

:Teenager rdfs:subClassOf 
     [ rdf:type    owl:Restriction ; 
     owl:onProperty  :hasAge ; 
     owl:someValuesFrom 
      [ rdf:type    rdfs:Datatype ; 
      owl:onDatatype  xsd:integer ; 
      owl:withRestrictions ( [ xsd:minExclusive  "12"^^xsd:integer ] 
            [ xsd:maxInclusive  "19"^^xsd:integer ] 
      ) 
      ] 
     ] . 

...如果你有点用xsd:pattern接班我们能有像...

:YourClass rdfs:subClassOf 
     [ rdf:type    owl:Restriction ; 
     owl:onProperty  :yourHasNumericProperty ; 
     owl:someValuesFrom 
      [ rdf:type    rdfs:Datatype ; 
      owl:onDatatype  xsd:integer ; 
      owl:withRestrictions ([xsd:pattern "E[1-9][0-9]*"]) 
      ] 
     ] . 

随着xsd:pattern你可以根据正则表达式进行数据类型限制。

我希望这给你一些方向。

+0

嗯,这对我来说不起作用。但是我从其他文件导入子类作为超类,并且即使没有添加任何限制,也会遇到问题。奇怪。 – panzi 2010-11-01 16:16:19