在 RDFS 中重新定义并声明 属性

redefine and declare property in RDFS

我想创建一个关于场地信息的 RDFS 模式,其中包含例如:

地址信息。

我找到了另一个关于它的模式:https://schema.org/Place 其中有 属性 地址信息。

第一个问题是我可以声明场地也有地址属性吗? 我已经知道我可以在不声明的情况下使用 属性。我之所以要声明它是为了让我的架构更清晰。

   <?xml version="1.0"?>

    <rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:place="https://schema.org/Place#"
    xml:base="http://localhost:3000/VenueSchema#">

    <rdfs:Class rdf:ID="Venue">
    <rdfs:subClassOf rdf:resource="https://schema.org/Place"/>
    </rdfs:Class>

    <rdf:Property rdf:ID="address">
        <rdf:type source:"https://schema.org/Place#address">
    </rdf:Property>

    </rdf:RDF>

第二个问题是我可以重新定义属性地址吗?能否达到override或overload的效果?

<?xml version="1.0"?>

<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:place="https://schema.org/Place#"
xml:base="http://localhost:3000/VenueSchema#">

 <rdfs:Class rdf:ID="Venue">
 <rdfs:subClassOf rdf:resource="https://schema.org/Place"/>
 </rdfs:Class>

  <rdf:Property rdf:ID="address">
  <rdfs:domain rdf:resource= "#Venue">
  <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
 </rdf:Property>

</rdf:RDF>

The first question is can I declare the Venue also has the property of address? I already know that I can use the property without declaring it. The reason I want to declare it to make my schema more clear.

在 RDFS 中没有属性。属性可以声明域和范围,但这并不会使属性 属于 到 类。当你说

p rdfs:domain D

你是说当 x p y 时,你可以推断 x rdf:type D。这就是领域公理所做的一切。范围公理是相似的,但可以让你推断出 y 的类型。您可以在 属性 上声明 其他 域和范围,但请注意,这意味着您将能够推断 属性 属于所有域。例如,如果您这样说:

有脚 rdfs:domain 大象

有脚 rdfs:domain 人类

然后当你看到 Jimbo hasFoot foot73 时,你将能够推断出 Jimbo 是一个人类并且大象.

The second question is can I redefine the property address? Can it achieve override or overload effects?

你可以对资源说些额外的话;这就是语义网的美妙之处之一。但是,您不能让其他任何人收回他们所说的话,尽管您可以自由地忽略他们所说的话。也就是说,您可以包含 属性 的声明,即使其他人已经声明了它们。 RDF数据模型是基于集合的三元组,三元组不包含重复项,所以说一次或说一百次没有区别。

不过,谈论覆盖或重载是没有意义的。我之前在回答您之前的一些问题时已经说过,但是 RDF 不是一种面向对象的编程语言,即使它有属性的概念和 类. 属性 只是一个 IRI。它没有任何行为或副作用。你可以对 属性 说一些额外的事情,你可以忽略其他人对他们说的事情,但是你可以覆盖或重载 属性.

您可以定义子属性,这可能会有用。例如,您可以说:

:hasParent a rdfs:Property ;
           rdfs:range :Human .

:hasMother a rdfs:Property ;
           rdfs:range :Woman ;
           rdfs:subPropertyOf :hasParent .

如果你这样做,那么当你说 x hasMother y 时,你可以推断出 y 是一个 女人和一个人类,你可以推断x hasParent y.