在 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.
我想创建一个关于场地信息的 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.