1

我有一个带有域 Show 和 range 的数据属性 ShowTime xsd:dateTime。我想知道是否有办法断言 dataTime 范围必须包含在“2018-01-01TX:X:X”中,以便在该日期有一个固定的日期和一个可变的小时。

我试过曼彻斯特语法:

xsd:dateTime[>="2018-01-01T00:00:00"^^xsd:dateTime, <"2018-01-01T00:00:00"^^xsd:dateTime]

但是告诉我语法不正确。

PS我正在使用HermiT。

有人能帮我吗?谢谢。

已编辑

具体例子。假设我们有一个Show类,它代表了电影放映的概念。每个节目都有日期和开始时间。因此,我们可以通过showDateTime具有域Show和范围的数据属性xsd:dateTime(例如“2018-01-16T18:00:00”)简单地表示这些信息。

问题是我需要仅根据开始时间对每天的时间段(早上、下午、傍晚、深夜)中的每个节目进行分类。我尝试了 SWRL,财产限制......我还没有找到一种方法来告诉推理者不要考虑日期,这显然优先于时间并且把我搞砸了。

因此,我想将日期和时间分成两个单独的属性(showDateshowTime),始终为 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]

这就是我提出问题的原因。

4

1 回答 1

2

曼彻斯特语法使您能够创建 OWL 本体。但是,OWL 的语义不允许您尝试执行此操作。

编辑您更新的问题

按照您的描述定义MorningShow类是行不通的,因为:

(1) 没有办法像你描述的那样动态地改变类的定义。

(2) 更重要的是,它违背了类别的概念,该类别给出了个人属于/不属于的集合的固定描述。您想到的可以归结MorningShow为每个可能的日期的不同课程。

我在想 Protege 中的 SWRL 中可能有一种方法可以应用一些只提取时间的功能。然而,这种情况并非如此。

唯一的其他选择是:

(1) 考虑在 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 
于 2018-01-16T05:21:14.443 回答