-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Better GeoSPARQL conformity #84
Comments
Can/Shall we replace the current
Regarding the properties of |
I am not so sure - according to RFC 2119, |
@lehmann-4178656ch and I discussed this further. I think a sane approach would be to omit the properties we cannot fill with any meaningful value to keep the dataset size manageable. For example, it seems extremely redundant to add In this spirit, I would also not add the |
Looking at the geoSPARQL specification...
This is visualized in this diagram at the beginning of section 6 and this other diagram from this paper So:
I agree with all of the above
I believe this is not the case: given that
then these relations can also link If I understand correctly this also means that if these triples hold... :x geo:hasGeometry :xGeom.
:y geo:hasGeometry :yGeom.
:x geo:sfContains :y ...then also these hold... :x geo:sfContains :yGeom.
:xGeom geo:sfContains :y.
:xGeom geo:sfContains :yGeom. This would require doing some inference (combining
Given what you pointed out about SHALL and that 6.3 reads "Implementations shall allow the properties ... to be used in SPARQL graph patterns" this probably would break the formal full conformity with GeoSPARQL, but still, in my opinion it is an acceptable tradeoff. |
Thank you all for this discussion. One way to realize redundant predicates is to just let the SPARQL engine know about 100% equivalent predicates, have the triples in the index for exactly one and then map each equivalent predicate to this one at query time. The situation is not new, just the scale. For example, each of the 90 M Wikidata items has exactly one Similarly, for predicate paths |
Hi @patrickbr @lehmann-4178656ch @Danysan1 @hannahbast @joka921, GeoSPARQL is a voluminous and complex spec.
Alternative GeometriesCurrently you have osmnode:679109323
geo:hasGeometry osm2rdfgeom:osm_node_679109323 ;
osm2rdfgeom:convex_hull "..."^^geo:wktLiteral ;
osm2rdfgeom:envelope "..."^^geo:wktLiteral ;
osm2rdfgeom:obb "..."^^geo:wktLiteral .
osm2rdfgeom:osm_node_679109323 geo:asWKT "..."^^geo:wktLiteral . But all these are alternative geometries so I suggest to change it to: osmnode:679109323
geo:hasGeometry
osmnode:679109323/geom, osmnode:679109323/convexHull, osmnode:679109323/boundingBox, osmnode:679109323/orientedBoundingBox;
geo:hasDefaultGeometry osmnode:679109323/geom;
geo:hasBoundingBox osmnode:679109323/boundingBox;
.
osmnode:679109323/geom a geo:Geometry; osm2rdf:role "geometry"; geo:asWKT "..."^^geo:wktLiteral.
osmnode:679109323/convexHull a geo:Geometry; osm2rdf:role "convexHull"; geo:asWKT "..."^^geo:wktLiteral.
osmnode:679109323/boundingBox a geo:Geometry; osm2rdf:role "boundingBox"; geo:asWKT "..."^^geo:wktLiteral.
osmnode:679109323/orientedBoundingBox a geo:Geometry; osm2rdf:role "orientedBoundingBox"; geo:asWKT "..."^^geo:wktLiteral. Notes:
Feature class and RelationsCurrently you have eg osmnode:679109323 rdf:type osm:node Please also add It's ok to keep the topological relations at the level of Features, eg: osmrel:3766584 ogc:sfContains osmway:264339544 As you can see in C.2.3.1. All features or geometries overlapping with another feature, the relations apply at both levels of Feature and Geometry, and by keeping them at the level of Feature, you implement only the first (most efficient) branch of the UNION. Magic PredicatesYou have materialized topological relations using an unofficial namespace like this: @prefix ogc: <http://www.opengis.net/rdf#> .
osmrel:3766584 ogc:sfContains osmway:264339544 Please consider using
I think you should use the standard predicate BTW, have you implemented transitivity of (This section applies to all topological relations that you support, not just MeasuresIt's a good idea to provide measures if you can.
Measures should be attached to Features not Geometries. Eg the Area of a boundingBox is typically bigger than the area of the detailed geometry, and only the latter is interesting. |
No additions from my side. I think @VladimirAlexiev explained it very well. |
We should be fully conform with the GeoSPARQL standards for types geo:SpatialObject and geo:Feature.
In particular, a
geo:Feature
must have the following properties:geo:hasGeometry, geo:hasDefaultGeometry, geo:hasCentroid
andgeo:hasBoundingBox
That is,
osm:Node
s,osm:Way
s,osm:Relation
s andosm:Area
s should be of typegeo:Feature
and offer these properties.As far as I understand it, all of the properties
geo:hasGeometry, geo:hasDefaultGeometry, geo:hasCentroid and geo:hasBoundingBox
must then point to an object of typegeo:SpatialObject
. These must implementgeo:hasSize, geo:hasMetricSize, geo:hasLength, geo:hasMetricLength, geo:hasPerimeterLength, geo:hasMetricPerimeterLength, geo:hasArea, geo:hasMetricArea, geo:hasVolume
andgeo:hasMetricVolume
.So far, I don't see any problem with implementing this.
However, AFAIK (@lehmann-4178656ch, @Danysan1, please correct me) ,
sfIntersects
andsfContains
should be properties betweengeo:SpatialObject
s. This would mean that we cannot write queries likeanymore. They would then look like this:
@hannahbast, @joka921, is that a problem?
See also ad-freiburg/qlever#678 (comment)
The text was updated successfully, but these errors were encountered: