Blue
Blue

Reputation: 3

The function "org.apache.jena.rdf.model.hasProperty" didn't work

I'm learning jena recently.
I try to understand their TUTORIALS. (https://jena.apache.org/tutorials/rdf_api.html#ch-Navigating-a-Model).
When I compile Tutorial06, (https://github.com/apache/jena/blob/main/jena-core/src-examples/jena/examples/rdf/Tutorial06.java)
I put a "/" in the end of the URI by accident in line 32:
static final String johnSmithURI = "http://somewhere/JohnSmith/";
(it should be: static final String johnSmithURI = "http://somewhere/JohnSmith";)
so I got the exception.
I want to use "org.apache.jena.rdf.model.hasProperty" to set a condition,
but it didn't work.

There might be two situation:

  1. if I directly copy and paste "vcard.hasProperty​(VCARD.Family)"
    the console will show "The method hasProperty​(Property) is undefined for the type Resource"
    it's strange
    this method is defined in their doc
    https://jena.apache.org/documentation/javadoc/jena/org/apache/jena/rdf/model/Resource.html#hasProperty(org.apache.jena.rdf.model.Property)

  2. However, if I just choose the function after I keyed in "." like the picture
    enter image description here
    It won't show the error
    but the value of Boolean seems strange
    I add those code since line 51 in Tutorial06:
    System.out.println("vcard.hasProperty(VCARD.FN) : " + vcard.hasProperty(VCARD.FN)) ; System.out.println("vcard.hasProperty(VCARD.N) : " + vcard.hasProperty(VCARD.N)) ; System.out.println("vcard.hasProperty(VCARD.Family) : " + vcard.hasProperty(VCARD.Family)) ; System.out.println("vcard.hasProperty(VCARD.Given) : " + vcard.hasProperty(VCARD.Given)) ; System.out.println("vcard.hasProperty(VCARD.EMAIL) : " + vcard.hasProperty(VCARD.EMAIL)) ;

    Result:
    vcard.hasProperty(VCARD.FN) : true
    vcard.hasProperty(VCARD.N) : true
    vcard.hasProperty(VCARD.Family) : false
    vcard.hasProperty(VCARD.Given) : false
    vcard.hasProperty(VCARD.EMAIL) : false

the rdf file look like this:
<rdf:Description rdf:about="http://somewhere/JohnSmith">
<vCard:FN>John Smith</vCard:FN>
<vCard:N rdf:parseType="Resource">
<vCard:Family>Smith</vCard:Family>
<vCard:Given>John</vCard:Given>
</vCard:N>
</rdf:Description>

I'll appreciate if anyone can give me some idea about those situation.
I use Eclipse with jdk-11 and the jena-core -3.2.0.jar as my library

Upvotes: 0

Views: 155

Answers (1)

AndyS
AndyS

Reputation: 16700

The "vCard:Family" has a different subject because of the <vCard:N rdf:parseType="Resource">.

The RDF structure is clearer in Turtle or N-Triples:

@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix vCard: <http://www.w3.org/2001/vcard-rdf/3.0#> .

<http://somewhere/JohnSmith>
        vCard:FN  "John Smith" ;
        vCard:N   [ vCard:Family  "Smith" ;
                    vCard:Given   "John"
                  ] .

or equivalently:

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix vCard: <http://www.w3.org/2001/vcard-rdf/3.0#> .

<http://somewhere/JohnSmith>
        vCard:FN  "John Smith" ;
        vCard:N   _:b0 .

_:b0    vCard:Family  "Smith" ;
        vCard:Given   "John" .

or in N-Triples:

<http://somewhere/JohnSmith> <http://www.w3.org/2001/vcard-rdf/3.0#FN> "John Smith" .
<http://somewhere/JohnSmith> <http://www.w3.org/2001/vcard-rdf/3.0#N> _:B99dd1c9aX2D9045X2D4719X2D8d7eX2D9f4043b9b757 .
_:B99dd1c9aX2D9045X2D4719X2D8d7eX2D9f4043b9b757 <http://www.w3.org/2001/vcard-rdf/3.0#Family> "Smith" .
_:B99dd1c9aX2D9045X2D4719X2D8d7eX2D9f4043b9b757 <http://www.w3.org/2001/vcard-rdf/3.0#Given> "John" .

Upvotes: 0

Related Questions