- From: Holger Knublauch <holger@topquadrant.com>
- Date: Wed, 20 Jan 2016 15:29:24 +1000
- To: "public-data-shapes-wg@w3.org" <public-data-shapes-wg@w3.org>
- Message-ID: <569F1B34.9010508@topquadrant.com>
Hi Patrick,
I noticed this issue with Eclipse too, and took another look if I could
improve how the test cases are displayed. I found that by overloading
TestCase.runTest() it is possible to use a random name for the test
case. So after the latest change, Eclipse's JUnit runner displays the
URI of the test resource:
https://github.com/TopQuadrant/shacl/commit/a245b69095fe07c332dd750ad892776e3e4e20e2
HTH
Holger
On 20/01/2016 2:17 AM, Johnston, Patrick - Hoboken wrote:
> Thanks for your patience, that was very helpful. I have some final
> comments (PJ2 below), but don’t feel obliged to answer. If you guys do
> want to use the tests (minus the ones that don’t pass muster), let me
> know.
>
> In terms of outputting the file being processed in the case of passed
> tests, I did a little bit of research, and it looks like using the
> junit framework limits one’s ability to do this. The problem is that
> the tests just show up as instances of testRun (here in Intellij IDEA,
> but I imagine similar for other IDEs), and junit does not allow for
> any output on a successful test (it would have to be a failing
> assertion). Short of getting more sophisticated with reflection and
> creating classes at runtime, or overriding the internals of junit, the
> best I managed so far was to println the file being tested immediately
> after line 64 of WGTest (you could also instantiate it as
> Logger.info…), which at least works on the summary view:
> for(Resource list : JenaUtil.getResourceProperties(manifest, MF.entries)) {
> for(RDFNode member : list.as(RDFList.class).asJavaList()) {
> if(!member.isLiteral()) {
> Resource test = (Resource) member; System.out.println("Processing test file " + test.getLocalName()); if(test.hasProperty(RDF.type, SHT.MatchNodeShape)) {
> addTestIfSupported(new MatchNodeTestClass(test));
>
> Which at least gives you this in the summary view:
>
>
>
> The other alternative would be to switch to something like log4unit
> (http://www.openfuture.de/Log4Unit/), which provides more flexibility
> for this sort of thing, but that is more involved.
>
> p
>
> From: Holger Knublauch <holger@topquadrant.com
> <mailto:holger@topquadrant.com>>
> Date: Monday, January 18, 2016 at 12:08 AM
> To: "public-data-shapes-wg@w3.org
> <mailto:public-data-shapes-wg@w3.org>" <public-data-shapes-wg@w3.org
> <mailto:public-data-shapes-wg@w3.org>>
> Subject: Re: inheritance & reuse
> Resent-From: <public-data-shapes-wg@w3.org
> <mailto:public-data-shapes-wg@w3.org>>
> Resent-Date: Monday, January 18, 2016 at 12:08 AM
>
> On 17/01/2016 4:41 PM, Johnston, Patrick - Hoboken wrote:
>
>>
>> PJ> OK, not the answer I was hoping for, but so be it. In terms of
>> the test, its purpose was to allow for a class-agnostic shape,
>> Shape1, to be reused by more than one class-scoped shape (here,
>> Shape2). If I were to make Shape1 a superclass of Class1, I would
>> lose that. I admit I find the way section 1.1 is worded really
>> confusing, and the more I read it the less clear it becomes, in
>> particular around the scope of rdfs:subClassOf. I like Peter’s
>> definition approach in one of the earlier threads. Maybe it would be
>> better to come right out and say that RDFS actually plays no part in
>> the construction of shapes and the shapes graph, but that shapes are
>> able to follow rdfs:subClassOf relationships declared against
>> instances in the data graph. The question is then whether these
>> declarations will be processed if they are made in only the data
>> graph, or the shapes graph, or both? What is really unclear is what
>> of OWL can play in here, if at all, for example instances of
>> owl:Class, definitions which might themselves be imported into the
>> shapes or data graphs using owl:imports. I don’t want to reignite
>> what seems to have been a painful debate, but not mentioning OWL is
>> doing your readers a disservice. I see a place for both OWL and SHACL
>> in the work I am doing currently (hence the questions), they achieve
>> different ends.
>
> The way that it is intended to work is that it will indeed only
> consider rdfs:subClassOf triples. But there are many different ways of
> how these subclass triples can be produced, including (but not limited
> to) RDFS and OWL inference engines. And even with OWL there are many
> dialects and implementations, e.g. based on rules. The question to me
> is how much of this needs to go into the spec, and how much is better
> left to tutorials and primers.
>
> PJ2> Fair enough. I do think that if there is a selective reuse of
> paradigms from other vocabularies, that should be stated unambiguously
> in the spec, but that’s the WG's call.
>
>>
>>> 1.
>>>
>>>
>>>
>>> 2. Having a shape apply to data graph subclasses of a class in its
>>> scope (inheritance-003, OK).
>>> 3. The ramifications of shape merging through reuse, inheritance,
>>> and owl:import.
>>> 1. The same shape with overlapping constraints
>>> (inheritance-002, fails for the same reason inheritance-001
>>> fails)
>>> 2. Different shapes with the same scope and overlapping
>>> constraints (inheritance-004, OK)
>>> 3. Duplicated triples in data graphs (e.g. If there are
>>> instances of shape classes in the owl:import)
>>> (duplication-001, OK)
>>>
>>
>> RDF graphs are sets of triples, so it is not possible to have
>> duplicate triples in a single Turtle file. The Jena parser would
>> already remove the duplicates.
>>
>> PJ> Agreed that this shouldn't happen, but Jena is just one
>> implementation: other implementations may just leave duplicates in
>> (maybe saying the same thing twice means something to somebody),
>> especially if they originate from different graphs in a quad store,
>> say. Using owl:imports isn’t exactly common behavior in regular
>> linked-data-land, so I think it is worth calling out explicitly.
>
> If a graph implementation preserves and returns duplicate triples then
> the implementation has a serious bug. I don't think we can predict all
> possible bugs.
>
> PJ2> OK, if you don’t think this is worth specifying, consider this
> closed. To be specific, I was trying to mimic duplicate triples in
> multiple named graphs connected through owl:imports, not duplicate
> triples in a single file (or graph). For example, if the
> implementation was SPARQL-based and omitted the DISTINCT on the union
> of graphs.
>>
>>> 1.
>>>
>>>
>>> 2. The effect of uniqueLang when language is not specified
>>> (uniqueLang-001, fails)
>>>
>>
>> I cannot comment on how common the case you describe will be in
>> practice - having a fallback language and interpreting plain
>> xsd:string literals as having a default language. Maybe you are
>> right, but it will certainly complicate the logic here (e.g. we would
>> need to decide what to do with rdf:HTML triples not just xsd:string).
>> In any case there is the fallback to define your variation of the
>> unique language pattern in SPARQL.
>>
>> PJ> If the intended scope of sh:uniqueLang are values of type
>> rdf:langString, then the RDF1.1 spec seems to indicate that this also
>> encompasses plain strings (see
>> https://www.w3.org/TR/rdf11-concepts/#dfn-language-tagged-string). In
>> other words, “fred” will validate both as an rdf:langString and as
>> xsd:string.
>
> This is not my understanding. In the text that you quote it states
> that simple literals are syntactic sugar for xsd:string.
>
> PJ2> I re-read the text, and you’re right. It still doesn’t explain
> why the modified definition I supplied in my last comment doesn’t fail
> validation in the current implementation. I can work around this in
> JSON-LD by supplying a default language in the context for data graphs
> (I really don’t want to complicate things with SPARQL unless really
> needed), or using schema:inLanguage for RDFa, I was hoping for
> something less serialization-specific for shapes.
>
>
> Regards,
> Holger
Received on Wednesday, 20 January 2016 05:30:01 UTC