我应该如何在RDF vocab中定义自己的受限类型?

问题描述 投票:1回答:1

我想为自己的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范围。这就是每个人都使用的词汇。

所以我看到这方面完全混乱。是否有任何标准或推荐的解决方案来定义我自己的受限类型?

xsd rdf owl json-ld rdfs
1个回答
0
投票

我在这里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
© www.soinside.com 2019 - 2024. All rights reserved.