在我的数据库中,我有字符串属性的东西。某些属性值与数字字符串匹配(仅包含数字)。我想给这些东西一个特殊的类型(它们的子类型)。在OWL中这样的事情可能吗?
问问题
1863 次
2 回答
1
我认为你需要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
你可以做基于正则表达式的数据类型限制。
我希望这能给你一些方向。
于 2010-10-31T09:40:08.543 回答
0
实际上是你可以在 RDF 中做的事情。对于 RDF 中的任何文字,您可以使用类似这样的内容指定类型(在 turtle/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/XML 中的相同示例
<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 规范中提到的那些
如果需要,您可以创建自己的数据类型,并且具有以下内容:
:x :myDataTypeProperty "123"^^ns:MyClassificationScheme .
你可以更进一步说...
ns:MyClassificationScheme rdfs:subClassOf xsd:integer .
当您针对数据发出 SPARQL 查询时,您可以在发出应用过滤器时指定类型,如下所示:
SELECT * WHERE {
?person :born ?birthDate .
FILTER ( ?birthDate > "2005-02-28"^^xsd:date ) .
}
我希望这回答了你的问题。
已编辑
正如 panzi 提到的那样,我的回答方向错误。反正我留下。
于 2010-10-30T22:32:22.907 回答