我想为自己的RDF vocab定义我的自定义受限类型。
例如,如果我想要一个不能超过20个字符的字符串,那么我可以使用XML中的XSD执行类似的操作:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="Char_20">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
我在乌龟中发现了与OWL方面和XSD类似的东西:
:EquipmentCategoryName
rdf:type owl:DatatypeProperty
rdfs:domain :EquipmentCategory
rdfs:range [
rdf:type rdfs:Datatype
owl:onDatatype xsd:string
owl:withRestrictions (
[
xsd:maxLength "10"^^xsd:int
]
)
]
理论上,我什至可以用my:Char_20 rdfs:subClassOf xsd:string
来描述我的受限类型,但我想那不是标准的解决方案。
我检查了schema.org,这是一个完全的惊喜。 https://schema.org/version/6.0/schema.jsonld他们将XSD添加到上下文中,但是他们甚至不必费心定义任何基于XSD基元的类型或适当地提供XSD范围。这就是每个人都使用的词汇。
所以我看到这方面完全混乱。是否有任何标准或推荐的解决方案来定义我自己的受限类型?
我在这里https://github.com/ruby-rdf/rdf-vocab/和不同页面上检查了许多vocab,并在W3C网站上阅读了有关OWL的更多信息。事实证明,与使用RDF类一样,我们可以使用XSD原语。典型用法如下:
按属性
Y rdf:type rdfs:Class
x rdf:type rdfs:Property
x rdfs:range xsd:integer
x rdfs:domain Y
y rdf:type Y
y x 12
按变量
x rdf:type xsd:integer
x rdf:value 12
首先要将整数限制为0-100,我们需要定义一个限制。这很棘手,因为我们也必须定义范围:
r rdf:type owl:Restriction
r owl:allValuesFrom s
s rdf:type owl:DataRange
s rdf:onDataRange xsd:integer
s xsd:minInclusive 0
s xsd:maxInclusive 100
如果我们要将限制应用于我们的财产,我们需要执行以下操作
x rdf:type owl:DatatypeProperty
r owl:onProperty x
r owl:onClass Y
如果我们想将其应用于我们的变量,则该变量是不同的。我对此并不完全确定,但我认为我们可以通过以下方式定义自定义受限基本类型:
xsd:integer rdf:type rdfs:Datatype
X rdf:type rdfs:Datatype
X rdfs:subClassOf xsd:integer
r owl:onDatatype X
有了新类型后,我们仅将其用于变量:
x rdf:type X
x rdf:value 12
如果是这样,我们也可以对属性使用相同的方法:
Y rdf:type rdfs:Class
x rdf:type rdfs:Property
x rdfs:range X
x rdfs:domain Y
y rdf:type Y
y x 12