ラベル付けドキュメントからのデータを検証しようとしています。rdf:type
各ラベル (またはコード) は、特定の(および可能性のある他の属性 ( 、 、 など:isPresent
)rdfs:label
を持つ匿名ノードです:comment
)。は、同じプロパティ ( ):Codes
を介してリンクされています。:Documents
schema:isTargetOf
「有効なドキュメントには、タイプ x、y、z のコードが少なくとも 1 つと、タイプ k のコードが 1 つだけ含まれている必要があります」などと言えるようになりたいと考えています。
@prefix ex: <http://example.org/ns#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema: <http://schema.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
ex:Document
a schema:Document ;
schema:isTargetOf [ a schema:HasAuthor ;
schema:isPresent true ] ;
schema:isTargetOf [ a schema:HasImage ;
schema:isPresent true ] ;
schema:isTargetOf [ a schema:HasImage ;
schema:isPresent true ] ;
.
したがって、この例では、有効なドキュメントは、少なくとも 1 つの HasImage コードと 1 つの HasAuthor コードのターゲットである必要があります。
schema:isTargetOf を schema:has_author または schema:has_image に変更するなど、プロパティが異なる場合の方法を理解しています。
ex:Document
a schema:Document ;
schema:has_author [ a schema:HasAuthor ;
schema:isPresent true ] ;
schema:has_image [ a schema:HasImage ;
schema:isPresent true ] ;
schema:has_image [ a schema:HasImage ;
schema:isPresent true ] ;
.
それから私はすることができます:
@prefix dash: <http://datashapes.org/dash#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema: <http://schema.org/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
schema:DocumentShape
a sh:NodeShape ;
sh:targetClass schema:Document ;
sh:property [
sh:path schema:has_author ;
sh:minCount 1 ;
sh:maxCount 1 ;
sh:message "Documents must have exactly 1 author"
] ;
sh:property [
sh:path schema:has_image;
sh:minCount 1 ;
sh:message "Must have at least one HasImage"
] ;
.
本質的に、単一のプロパティによってリンクされたもののコレクションを検証したいと思います。
現在、コードの種類ごとに特定のプロパティの種類を生成するために shacl ルールを試していますが、それは少し複雑に感じます。もっと直接的な方法があるのではないかと思います。
関連する場合は、pyshacl を使用しています。