- From: Holger Knublauch <holger@topquadrant.com>
- Date: Fri, 16 Jan 2015 14:09:49 +1000
- To: "public-data-shapes-wg@w3.org" <public-data-shapes-wg@w3.org>
Hi Karen, I thought you wanted to express that within the same subject, dct:title could only have one value. This is what I outlined below. If you want to ensure that the same value is only used once per graph, then I guess you would need to rewrite the query to SELECT ?value WHERE { ?subject1 dct:title ?value . ?subject2 dct:title ?value . FILTER (?subject1 != ?subject2) . } which would find all ?values that are used by two (or more) distinct subjects. The primary key design pattern is similar, but also includes a specification that can be used to automatically create the URI of a resource based on a property value (e.g. http://example.org/countries-USA if the primary key is "USA"). Holger On 1/16/2015 13:48, Karen Coyle wrote: > Holger, it looks to me like the "primary key" requirement [1] covers > this. Do you agree? > > kc > [1] > https://www.w3.org/2014/data-shapes/wiki/Requirements#Declarations_of_Primary_Key_Properties > > On 1/15/15 2:45 PM, Holger Knublauch wrote: >> On 1/16/2015 1:45, Karen Coyle wrote: >>> Thanks, Holger. As usual, I need to do this "by example" because it's >>> quite likely that my vocabulary differs from that of others here. >>> >>> Use cases: I have data that uses dct:title in various places, and I >>> want to say that wherever it is used it can only be used once for each >>> subject in my data. Here's some data: >> >> The following static constraint could express that scenario: >> >> ex:AtMostOneTitleConstraint >> a :StaticConstraint ; >> :message "For a given subject, dct:title can only be used once." ; >> :predicate dct:title ; >> :sparql """ >> # Find all subjects that have two distinct values of >> dct:title >> SELECT (?subject AS ?root) >> WHERE { >> ?subject dct:title ?title1 . >> ?subject dct:title ?title2 . >> FILTER (?title1 != ?title2) . >> } >> """ ; >> . >> >>> >>> 1) >>> subjectA dce:creator "Somebody" . >>> subjectA dct:title "Some title" . >>> subjectA bf:subject http://.... . >>> subjectB dce:creator "Someone else" . >>> subjectB dct:title "Another title" . >>> >>> 2) >>> subjectA dce:creator "Somebody" . >>> subjectA dct:title "Some title" . >>> subjectA bf:subject ex:subject1 . >>> subjectB dce:creator "Someone else" . >>> subjectB dct:title "Another title" . >>> subject1 dct:title "A related book" . >>> >>> That's a pretty stupid example, and the data is more sophisticated >>> than that, of course. My questions are: >>> >>> a) because this data does not use rdf:type (unless inferred, and let's >>> say it isn't), does subject "s" constitute a node/graph/shape? >> >> In the absence of an rdf:type triple, we indeed need to declare this as >> a static constraint that is not attached to any class but executed for >> the whole graph. >> >>> b) substitute "skos:prefLabel" here and a rule that skos:prefLabel can >>> occur only once per each "X" (X because I dont know what to call it) - >>> is that the same case? >> >> I think that's similar, only that we could probably associate that >> constraint with skos:Concept, because that is where skos:prefLabel is >> supposed to be used. However, skos:prefLabel should have another >> constraint that it should only have one value per language tag, which is >> a variation of the query above. Here is the corresponding SPIN query >> >> CONSTRUCT { >> _:b0 a spin:ConstraintViolation . >> _:b0 rdfs:label ?message . >> _:b0 spin:violationRoot ?this . >> _:b0 spin:violationPath skos:prefLabel . >> } >> WHERE { >> ?this skos:prefLabel ?label1 . >> ?this skos:prefLabel ?label2 . >> FILTER ((lang(?label1) = lang(?label2)) && (?label1 != ?label2)) . >> BIND (CONCAT("Constraint S14: a resource has no more than one value >> of skos:prefLabel per language tag (@", lang(?label1), ").") AS >> ?message) . >> } >> >>> c) is this really a new use case, or a variation on existing ones? >> >> I believe the Requirements cover this scenario. Whether you want to >> write it up as a new User Story is up to you. >> >> HTH >> Holger >> >> >
Received on Friday, 16 January 2015 04:13:14 UTC