我可以为rdf:List成员指定一个范围吗?

我可以为rdf:List成员指定一个范围吗?,rdf,Rdf,如果我想说某个东西的标题应该是rdfs:Literal,我会这样做: example:title a owl:DatatypeProperty ; rdfs:range rdfs:Literal . 现在我想表达的是,有些东西有一个有序的标题列表: example:titles a rdf:List . 如何指定列表中的成员应该是什么?我需要子类rdf:List吗 更新:如果可能的话,我想继续使用rdf:List,根据Joshua的回答,我认为下面说的任何只有rdfs:Literal

如果我想说某个东西的标题应该是rdfs:Literal,我会这样做:

example:title a owl:DatatypeProperty ;
    rdfs:range rdfs:Literal .
现在我想表达的是,有些东西有一个有序的标题列表:

example:titles a rdf:List .
如何指定列表中的成员应该是什么?我需要子类rdf:List吗

更新:如果可能的话,我想继续使用rdf:List,根据Joshua的回答,我认为下面说的任何只有rdfs:Literal值的rdf:List都是一个示例:ListOfLiterals,然后我可以使用它作为一个范围

@prefix entity: <http://example.com/stuff/> .
@prefix example: <http://example.com/my/term/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

example:ListOfLiterals a owl:Class ;
    owl:equivalentClass [
        a owl:Class ;
        owl:intersectionOf (
            rdf:List
            [
                a owl:Restriction ;
                owl:allValuesFrom rdfs:Literal ;
                owl:onProperty rdf:first
            ]
            [
                a owl:Restriction ;
                owl:allValuesFrom example:ListOfLiterals ;
                owl:onProperty rdf:rest
            ] )
    ] .

example:Book a owl:Class .

example:titles a owl:DatatypeProperty ;
    rdfs:domain example:Book ;
    rdfs:range example:ListOfLiterals .

entity:somebook a example:Book ;
    example:titles ( "Book Title"@en "Second Book Title"@en ) .
@前缀实体:。
@前缀示例:。
@前缀owl:。
@前缀rdf:。
@前缀rdfs:。
示例:ListOfLiterals一个owl:Class;
owl:等价类[
猫头鹰:类;
猫头鹰:交叉(
rdf:列表
[
猫头鹰:限制;
owl:rdfs中的所有值:Literal;
owl:onProperty rdf:first
]
[
猫头鹰:限制;
owl:示例中的所有值:ListOfLiterals;
owl:onProperty rdf:rest
] )
] .
示例:预订一个owl:Class。
示例:标题owl:DatatypeProperty;
rdfs:域示例:Book;
范围示例:ListOfLiterals。
实体:somebook示例:Book;
示例:标题(“书名”@en“第二书名”@en)。

这有什么意义吗,或者我误解了什么吗?

首先,请注意,在OWL代码中使用
rdf:List
s意味着您将处于OWL Full状态,而许多推理器都是为使用OWL DL而设计的。你可能会同意,如果你同意,那就太好了。如果您需要保持在OWL DL中,那么您必须使用自己的词汇表来创建列表,例如,一个类
warp:List
和属性
warp:first
warp:rest
,并使用它们而不是它们的RDF对应项

无论如何,一旦决定了
List
类和
first
rest
属性,就可以定义一个列表类型
listofeelements
,该列表类型只能包含某个类
元素的成员,但有以下限制:

元素列表和SQSubsetq;列表(仅第一个元素)(仅剩余元素列表)

这意味着
元素列表
是:(i)一个
列表
;(ii)具有作为
元素的
第一个
属性的值;和(iii)将
元素列表
作为其
其余部分
,这意味着
列表
中的其余部分也必须是
元素
s。无论
nil
对象是什么,都应该声明为
列表
,但您可能还希望包括:

a元素列表

但这并不一定那么重要。对于您的情况,您希望以类似的方式定义一个类
标题列表
,然后将属性的范围声明为
标题列表

下面是一个示例本体,它只定义了这些类型的
List
类和
ElementList
类(在人类可读的海龟中):


谢谢约书亚!这是针对JSON-LD Web服务的,大多数客户端根本不关心RDF位,因此我目前不关心reasoners。@是的,如果您不关心reasoners,这应该适合您。(尽管,如果你不使用一个推理器,简单地说一些列表是一个整数列表,你就不会得到每个成员都是整数的结果;你需要一个推理器。)如果你能这样做,就要考虑。如果没有,我们能做些什么让它变得更好
@prefix :      <http://stackoverflow.com/a/19480798/1281433/code#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

:rest   a            owl:ObjectProperty ;
        rdfs:domain  :List ;
        rdfs:range   :List .

:List   a       owl:Class .

:nil    a       owl:NamedIndividual , :ElementList , :List .

:ElementList  a          owl:Class ;
        rdfs:subClassOf  [ a                   owl:Class ;
                           owl:intersectionOf  ( :List [ a                  owl:Restriction ;
                                                         owl:allValuesFrom  :Element ;
                                                         owl:onProperty     :first
                                                       ] [ a                  owl:Restriction ;
                                                           owl:allValuesFrom  :ElementList ;
                                                           owl:onProperty     :rest
                                                         ] )
                         ] .

:Element  a     owl:Class .

:first  a            owl:ObjectProperty ;
        rdfs:domain  :List .

<http://stackoverflow.com/a/19480798/1281433/code>
        a       owl:Ontology .

[ a                      owl:Axiom ;
  rdfs:comment           "It's probably a good idea to specify that nil is an ElementList.  This could also be inferred, though, if there is a nil-terminated List that is known to be an ElementList." ;
  owl:annotatedProperty  rdf:type ;
  owl:annotatedSource    :nil ;
  owl:annotatedTarget    :ElementList
] .