diff --git a/shapes/acp-access-control-resource.ttl b/shapes/acp-access-control-resource.ttl new file mode 100644 index 0000000..dd4a9e6 --- /dev/null +++ b/shapes/acp-access-control-resource.ttl @@ -0,0 +1,33 @@ +@prefix sh: . +@prefix acp: . +@prefix foaf: . +@prefix xsd: . +@prefix prov: . +@prefix dc: . +@prefix rdfs: . + +@prefix acp-access-control-shape: . +@prefix acp-access-control-resource-shape: . + +# Shape for AccessControlResource +acp-access-control-resource-shape:AcpAccessControlResourceShape a sh:NodeShape ; + dc:source ; + prov:wasDerivedFrom ; + sh:codeIdentifier "AccessControlResource"; + rdfs:label "Access Control Resource Shape"; + + # accessControl: multiple AccessControl objects + sh:property [ + sh:path acp:accessControl ; + sh:node acp-access-control-shape:AcpAccessControlShape ; + sh:codeIdentifier "accessControl"; + ] ; + + # resource: IRI as string + sh:property [ + sh:path acp:resource ; + sh:datatype xsd:anyURI ; + sh:maxCount 1; + sh:codeIdentifier "resource" + ] . + diff --git a/shapes/acp-access-control.ttl b/shapes/acp-access-control.ttl new file mode 100644 index 0000000..e377529 --- /dev/null +++ b/shapes/acp-access-control.ttl @@ -0,0 +1,24 @@ +@prefix sh: . +@prefix acp: . +@prefix foaf: . +@prefix xsd: . +@prefix prov: . +@prefix dc: . +@prefix rdfs: . + +@prefix acp-policy-shape: . + +@prefix acp-access-control-shape: . + +acp-access-control-shape:AcpAccessControlShape a sh:NodeShape ; + dc:source ; + prov:wasDerivedFrom ; + sh:codeIdentifier "AcpAccessControl"; + rdfs:label "ACP Access Control Shape"; + + sh:property [ + sh:path acp:apply ; + sh:node acp-policy-shape:AcpPolicyShape ; + rdfs:label "apply"; + sh:codeIdentifier "apply"; + ] . \ No newline at end of file diff --git a/shapes/acp-matcher.ttl b/shapes/acp-matcher.ttl new file mode 100644 index 0000000..adb9499 --- /dev/null +++ b/shapes/acp-matcher.ttl @@ -0,0 +1,24 @@ +@prefix sh: . +@prefix acp: . +@prefix foaf: . +@prefix xsd: . +@prefix prov: . +@prefix dc: . +@prefix rdfs: . + +@prefix acp-matcher-shape: . + +acp-matcher-shape:AcpMatcherShape a sh:NodeShape ; + dc:source ; + prov:wasDerivedFrom ; + sh:codeIdentifier "AcpMatcher"; + rdfs:label "ACP Matcher Shape"; + + sh:property [ + sh:path acp:agent ; + sh:nodeKind sh:IRI ; + rdfs:label "agent"; + sh:codeIdentifier "agent"; + ] ; + + . \ No newline at end of file diff --git a/shapes/acp-policy.ttl b/shapes/acp-policy.ttl new file mode 100644 index 0000000..cda27e0 --- /dev/null +++ b/shapes/acp-policy.ttl @@ -0,0 +1,31 @@ +@prefix sh: . +@prefix acp: . +@prefix foaf: . +@prefix xsd: . +@prefix prov: . +@prefix dc: . +@prefix rdfs: . + +@prefix acp-policy-shape: . +@prefix acp-matcher-shape: . + + +acp-policy-shape:AcpPolicyShape a sh:NodeShape ; + dc:source ; + prov:wasDerivedFrom ; + sh:codeIdentifier "AccessControlPolicy"; + rdfs:label "ACP Policy Shape"; + + sh:property [ + sh:path acp:allow ; + sh:nodeKind sh:IRI ; + rdfs:label "allow"; + sh:codeIdentifier "allow"; + ] ; + + sh:property [ + sh:path acp:anyOf ; + sh:node acp-matcher-shape:AcpMatcherShape; + rdfs:label "any of"; + sh:codeIdentifier "anyOf"; + ] . \ No newline at end of file diff --git a/shapes/acp-typed.ttl b/shapes/acp-typed.ttl new file mode 100644 index 0000000..616390b --- /dev/null +++ b/shapes/acp-typed.ttl @@ -0,0 +1,25 @@ +@prefix sh: . +@prefix acp: . +@prefix foaf: . +@prefix xsd: . +@prefix prov: . +@prefix dc: . +@prefix rdf: . +@prefix rdfs: . + +@prefix acp-typed-shape: . + +acp-typed-shape:AcpTypedShape a sh:NodeShape ; + dc:source ; + prov:wasDerivedFrom ; + sh:codeIdentifier "AccessControlPolicy"; + rdfs:label "ACP Policy Shape"; + + sh:property [ + sh:path rdf:type ; + sh:nodeKind sh:IRI ; + rdfs:label "type"; + sh:codeIdentifier "type"; + ] + +. \ No newline at end of file diff --git a/shapes/agent.ttl b/shapes/agent.ttl index 942c183..616b1cf 100644 --- a/shapes/agent.ttl +++ b/shapes/agent.ttl @@ -1,13 +1,16 @@ @prefix foaf: . @prefix sh: . -@prefix prov: . +@prefix prov: . @prefix rdfs: . -@prefix xsd: . +@prefix xsd: . @prefix schema: . @prefix rdf: . @prefix dct: . @prefix vs: . @prefix dc: . +@prefix vcard: . +@prefix pim: . +@prefix solid: . @prefix person-shape: . @prefix organization-shape: . @@ -31,3 +34,104 @@ agent-shape:AgentShape [ sh:node organization-shape:ContactOrganizationShape ] [ sh:node software-agent-shape::ContactSoftwareAgentShape ] ) . + + +agent-shape:WebIdAgentShape + a sh:NodeShape ; + sh:targetClass foaf:Agent ; + rdfs:label "Agent Shape" ; + rdfs:comment "Represents an agent, which can be a person, organization, or software agent." ; + dct:created "2026-03-18"^^xsd:date ; + dc:source ; + prov:wasDerivedFrom ; + vs:term_status "testing" ; + sh:codeIdentifier "WebIdAgent" ; + + sh:property [ + sh:path vcard:fn ; + sh:codeIdentifier "vcardFn" ; + sh:maxCount 1 + ] ; + + sh:property [ + sh:path vcard:hasUrl ; + sh:codeIdentifier "vcardHasUrl" ; + sh:maxCount 1 + ] ; + + sh:property [ + sh:path vcard:organizationName ; + sh:codeIdentifier "organization" ; + sh:maxCount 1 + ] ; + + sh:property [ + sh:path vcard:role ; + sh:codeIdentifier "role" ; + sh:maxCount 1; + ] ; + + sh:property [ + sh:path vcard:title ; + sh:codeIdentifier "title" ; + sh:maxCount 1; + ] ; + + sh:property [ + sh:path vcard:hasTelephone ; + sh:codeIdentifier "hasTelephone" ; + sh:maxCount 1; + ] ; + + sh:property [ + sh:path foaf:name ; + sh:codeIdentifier "foafName" ; + sh:maxCount 1; + ] ; + + sh:property [ + sh:path vcard:hasName ; + sh:codeIdentifier "name" ; + sh:maxCount 1; + ] ; + + sh:property [ + sh:path foaf:homepage ; + sh:codeIdentifier "foafHomepage" ; + sh:maxCount 1; + ] ; + + sh:property [ + sh:path vcard:hasPhoto ; + sh:codeIdentifier "photoUrl" ; + sh:maxCount 1; + ] ; + + sh:property [ + sh:path vcard:hasEmail ; + sh:codeIdentifier "hasEmail" ; + sh:maxCount 1; + ] ; + + sh:property [ + sh:path vcard:inAddressBook ; + sh:codeIdentifier "inAddressBook" ; + sh:minCount 1 ; + sh:maxCount 1; + ] ; + + # MULTIPLE VALUE PROPERTIES + sh:property [ + sh:path pim:storage ; + sh:codeIdentifier "pimStorage" + ] ; + + sh:property [ + sh:path solid:storage ; + sh:codeIdentifier "solidStorage" + ] ; + + sh:property [ + sh:path foaf:knows ; + sh:codeIdentifier "knows" + ] . \ No newline at end of file diff --git a/shapes/container.ttl b/shapes/container.ttl new file mode 100644 index 0000000..0b84d6f --- /dev/null +++ b/shapes/container.ttl @@ -0,0 +1,21 @@ +@prefix sh: . +@prefix prov: . +@prefix dc: . +@prefix rdfs: . +@prefix ldp: . +@prefix resource-shape: . + +@prefix container-shape: . + + +container-shape:ContainerShape a sh:NodeShape ; + dc:source ; + prov:wasDerivedFrom ; + rdfs:label "Container"; + sh:codeIdentifier "Container"; + + sh:property [ + sh:path ldp:contains ; + sh:node resource-shape:ResourceShape ; + sh:codeIdentifier "contains" ; + ] . \ No newline at end of file diff --git a/shapes/resource.ttl b/shapes/resource.ttl new file mode 100644 index 0000000..fc8d8bd --- /dev/null +++ b/shapes/resource.ttl @@ -0,0 +1,57 @@ +@prefix sh: . +@prefix prov: . +@prefix dc: . +@prefix rdfs: . +@prefix posix: . +@prefix rdf: . +@prefix xsd: . + +@prefix resource-shape: . + +resource-shape:ResourceShape a sh:NodeShape ; + dc:source ; + prov:wasDerivedFrom ; + rdfs:label "Resource"; + sh:codeIdentifier "Resource"; + + sh:property [ + sh:path dc:title ; + sh:codeIdentifier "title" ; + sh:datatype xsd:string ; + sh:maxCount 1 + ] ; + + sh:property [ + sh:path rdfs:label ; + sh:codeIdentifier "label" ; + sh:datatype xsd:string ; + sh:maxCount 1 + ] ; + + sh:property [ + sh:path dc:modified ; + sh:codeIdentifier "modified" ; + sh:datatype xsd:dateTime ; + sh:maxCount 1 + ] ; + + sh:property [ + sh:path posix:mtime ; + sh:codeIdentifier "mtime" ; + sh:datatype xsd:dateTime ; + sh:maxCount 1 + ] ; + + sh:property [ + sh:path posix:size ; + sh:codeIdentifier "size" ; + sh:datatype xsd:integer ; + sh:maxCount 1 + ] ; + + sh:property [ + sh:path rdf:type ; + sh:codeIdentifier "type" ; + sh:nodeKind sh:IRI ; + ] . +