我有一个带有域Show和范围xsd:dateTime
的Data Property ShowTime。我想知道是否有办法断言dataTime范围必须包含在“2018-01-01TX:X:X”中,以便在该日期具有固定日期和变量小时。
我尝试过使用曼彻斯特语法:
xsd:dateTime[>="2018-01-01T00:00:00"^^xsd:dateTime, <"2018-01-01T00:00:00"^^xsd:dateTime]
但告诉我语法不正确。
P.S。我正在使用HermiT。
有人能帮助我吗?感谢。
编辑
具体例子。假设我们有一个Show
类,它代表了电影放映的概念。每个节目都有日期和开始时间。因此,我们可以通过数据属性showDateTime
和域Show
以及范围xsd:dateTime
(类似“2018-01-16T18:00:00”)来平凡地表示这些信息。
问题是我需要根据开始时间在每日时段(早上,下午,傍晚,深夜)对每个节目进行分类。我尝试过SWRL,财产限制......我还没有找到方法告诉推理人不要考虑日期,这显然优先于时间并且让我感到困惑。
所以,我想把日期和时间分成两个独立的属性(showDate
和showTime
),总是类型为xsd:dateTime,并对showTime
绑定它的限制有固定的日期(例如2018-01-01)。通过这种方式,我可以将MorningShow类定义如下:
showTime some xsd:dateTime[>= "2018-01-01T07:00:00"^^xsd:dateTime ,
<= "2018-01-01T13:00:00"^^xsd:dateTime]
这就是我提问的原因。
答案 0 :(得分:2)
使用曼彻斯特语法可以创建OWL本体。但是,OWL的语义不允许您尝试执行的操作。
编辑更新的问题
如上所述定义MorningShow
类不起作用,因为:
(1)没有办法像你所描述的那样动态改变类的定义。
(2)更重要的是,它违背了一个阶级的概念,它给出了个人所属/不属于的集合的固定描述。您的想法归结为每个可能日期的不同MorningShow
类。
我在想,在Protege的SWRL中可能有一种方法可以应用一些只能提取时间的函数。但事实并非如此。
唯一的其他选择是:
(1)考虑使用Time Ontology in OWL,虽然这可能是一种过度杀伤。
(2)定义您自己的DateTime
类,它是以下数据属性的域:
我。 date
,范围为xsd:dateTime
,
II。 hours
,范围为xsd:byte
,
III。范围minutes
xsd:byte
ObjectProperty: showTime
Domain:Show
Range: DateTime
DataProperty: date
Domain: DateTime
Range: xsd:dateTime
DataProperty: hours
Domain: DateTime
Range: xsd:byte[>= "0"^^xsd:byte , < "24"^^xsd:byte]
DataProperty: minutes
Domain: DateTime
Range: xsd:byte[>= "0"^^xsd:byte , < "60"^^xsd:byte]
Class: Afternoon
EquivalentTo: hours some xsd:byte[>= "12"^^xsd:byte , < "17"^^xsd:byte]
SubClassOf: DateTime
Class: DateTime
Class: Morning
EquivalentTo: hours some xsd:byte[< "12"^^xsd:byte]
SubClassOf: DateTime
Class: Show
SubClassOf: showTime some ShowTime
Class: ShowTime
SubClassOf: showTime exactly 1 DateTime
Individual: dt
Facts: hours "8"^^xsd:byte