diff --git a/1.0/fidmark.ttl b/1.0/fidmark.ttl
index b89aa95..bd74a16 100644
--- a/1.0/fidmark.ttl
+++ b/1.0/fidmark.ttl
@@ -12,7 +12,6 @@
rdf:type owl:Ontology ;
owl:versionIRI ;
owl:imports ;
- dcterms:abstract "Fiducial markers are visual objects that can be placed in the field of view of an imaging sensor to determine its position and orientation (i.e. a pose). This in turn can be used to determine the scale and position of other objects within the same field of view. These types of markers are used for a wide variety of applications ranging from medical applications to augmented reality (AR) solutions where they are applied to determine the location of an AR headset. With a wide range of different marker types, each with their own advantages for specific use-cases there are no fixed standards to decide which marker to use in which situation. This leads to proprietary AR solutions that rely on a predefined set of marker and pose detection algorithms, preventing the possibility to create interoperability between AR applications. We propose a fiducial marker ontology called FidMark, classifying and describing the different markers available for computer vision and augmented reality along with their spatial position and orientation. Our FidMark ontology also describes the procedures required to perform pose estimation, and marker detection to allow the description of algorithms used to perform these procedures. With our ontology we aim to enable future AR solutions to semantically describe markers within an environment, so other applications can utilise this information."@en ;
dcterms:bibliographicCitation "Maxim Van de Wynckel, Isaac Valadez and Beat Signer, FidMark: A Fiducial Marker Ontology for Semantically Describing Visual Markers"@en ;
dcterms:contributor "Beat Signer"@en ;
dcterms:creator "Isaac Valadez"@en ,
@@ -156,6 +155,11 @@
rdfs:label "as NFT"@en .
+### http://purl.org/fidmark/asPATT
+:asPATT rdf:type owl:DatatypeProperty ;
+ rdfs:label "as pattern"@en .
+
+
### http://purl.org/fidmark/asZFT
:asZFT rdf:type owl:DatatypeProperty ;
rdfs:domain :ImageDescriptor ;
@@ -166,7 +170,9 @@
### http://purl.org/fidmark/crc
-:crc rdf:type owl:DatatypeProperty .
+:crc rdf:type owl:DatatypeProperty ;
+ rdfs:comment ""@en ;
+ rdfs:label "CRC"@en .
### http://purl.org/fidmark/crowns
@@ -273,6 +279,8 @@
### http://purl.org/fidmark/ARToolKit
:ARToolKit rdf:type owl:Class ;
rdfs:subClassOf :Barcode ;
+ rdfs:comment "ARToolKit is an open-source computer tracking library for creation of strong augmented reality applications that overlay virtual imagery on the real world. Currently, it is maintained as an open-source project hosted on GitHub. ARToolKit is a very widely used AR tracking library with over 160,000 downloads on its last public release in 2004."@en ;
+ rdfs:isDefinedBy ;
rdfs:label "ARToolKit"@en .
@@ -380,7 +388,6 @@ Whereas ARTag has highly robust error detection and correction, it suffers from
rdfs:subClassOf :Barcode1D ,
:CircularBarcode ;
:color "Monochrome" ;
- :encoding "Not supported" ;
:shape "Circular" ;
rdfs:comment "A CCC is formed by placing a black ring on a white background. A CCC can also be thought of as a small white circle whose center is coincident with the center of a larger black circle, all on a white background. CCCs can be easily manufactured, it is easily extracted from the image, its extrtion is robust, it is a passive feature, and its centroid is completely invariant to the three translational and one rotational degrees of freedom and nearly invariant to the remaining two rotational degrees of freedom." ;
rdfs:isDefinedBy ;
@@ -686,6 +693,183 @@ Our tags are composed by a set of circular high-contrast features (dots) spatial
# Individuals
#################################################################
+### http://purl.org/fidmark/DICT_4X4_100
+:DICT_4X4_100 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 3 ;
+ :markerBits 16 ;
+ :maxIdentifiers 100 ;
+ :opencvName "DICT_4X4_100" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 4x4 dictionary with 100 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_4X4_1000
+:DICT_4X4_1000 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 2 ;
+ :markerBits 16 ;
+ :maxIdentifiers 1000 ;
+ :opencvName "DICT_4X4_1000" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 4x4 dictionary with 1000 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_4X4_250
+:DICT_4X4_250 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 3 ;
+ :markerBits 16 ;
+ :maxIdentifiers 250 ;
+ :opencvName "DICT_4X4_250" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 4x4 dictionary with 250 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_4X4_50
+:DICT_4X4_50 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 4 ;
+ :markerBits 16 ;
+ :maxIdentifiers 50 ;
+ :opencvName "DICT_4X4_50" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 4x4 dictionary with 50 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_5X5_100
+:DICT_5X5_100 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 7 ;
+ :markerBits 25 ;
+ :maxIdentifiers 100 ;
+ :opencvName "DICT_5X5_100" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 5x5 dictionary with 100 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_5X5_1000
+:DICT_5X5_1000 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 5 ;
+ :markerBits 25 ;
+ :maxIdentifiers 1000 ;
+ :opencvName "DICT_5X5_1000" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 5x5 dictionary with 1000 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_5X5_250
+:DICT_5X5_250 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 6 ;
+ :markerBits 25 ;
+ :maxIdentifiers 250 ;
+ :opencvName "DICT_5X5_250" ;
+ :supportedMarker :ARTag ,
+ :ArUco ;
+ rdfs:label "ArUco 5x5 dictionary with 250 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_5X5_50
+:DICT_5X5_50 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 8 ;
+ :markerBits 25 ;
+ :maxIdentifiers 50 ;
+ :opencvName "DICT_5X5_50" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 5x5 dictionary with 50 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_6X6_100
+:DICT_6X6_100 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 12 ;
+ :markerBits 36 ;
+ :maxIdentifiers 100 ;
+ :opencvName "DICT_6X6_100" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 6x6 dictionary with 100 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_6X6_1000
+:DICT_6X6_1000 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 9 ;
+ :markerBits 36 ;
+ :maxIdentifiers 1000 ;
+ :opencvName "DICT_6X6_1000" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 6x6 dictionary with 1000 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_6X6_250
+:DICT_6X6_250 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 11 ;
+ :markerBits 36 ;
+ :maxIdentifiers 250 ;
+ :opencvName "DICT_6X6_250" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 6x6 dictionary with 250 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_6X6_50
+:DICT_6X6_50 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 13 ;
+ :markerBits 36 ;
+ :maxIdentifiers 50 ;
+ :opencvName "DICT_6X6_50" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 6x6 dictionary with 50 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_7X7_100
+:DICT_7X7_100 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 18 ;
+ :markerBits 49 ;
+ :maxIdentifiers 100 ;
+ :opencvName "DICT_7X7_100" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 7x7 dictionary with 100 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_7X7_1000
+:DICT_7X7_1000 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 14 ;
+ :markerBits 49 ;
+ :maxIdentifiers 1000 ;
+ :opencvName "DICT_7X7_1000" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 7x7 dictionary with 1000 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_7X7_250
+:DICT_7X7_250 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 17 ;
+ :markerBits 49 ;
+ :maxIdentifiers 250 ;
+ :opencvName "DICT_7X7_250" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 7x7 dictionary with 250 tags"@en .
+
+
+### http://purl.org/fidmark/DICT_7X7_50
+:DICT_7X7_50 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 19 ;
+ :markerBits 49 ;
+ :maxIdentifiers 50 ;
+ :opencvName "DICT_7X7_50" ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco 7x7 dictionary with 50 tags"@en .
+
+
### http://purl.org/fidmark/DICT_APRILTAG_16h5
:DICT_APRILTAG_16h5 rdf:type owl:NamedIndividual ,
:MarkerDictionary ;
@@ -726,192 +910,6 @@ Our tags are composed by a set of circular high-contrast features (dots) spatial
rdfs:label "AprilTag 36h11 dictionary"@en .
-### http://purl.org/fidmark/DICT_ARUCO_4X4_100
-:DICT_ARUCO_4X4_100 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 3 ;
- :markerBits 16 ;
- :maxIdentifiers 100 ;
- :opencvName "DICT_4X4_100" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 4x4 dictionary with 100 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_4X4_1000
-:DICT_ARUCO_4X4_1000 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 2 ;
- :markerBits 16 ;
- :maxIdentifiers 1000 ;
- :opencvName "DICT_4X4_1000" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 4x4 dictionary with 1000 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_4X4_250
-:DICT_ARUCO_4X4_250 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 3 ;
- :markerBits 16 ;
- :maxIdentifiers 250 ;
- :opencvName "DICT_4X4_250" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 4x4 dictionary with 250 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_4X4_50
-:DICT_ARUCO_4X4_50 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 4 ;
- :markerBits 16 ;
- :maxIdentifiers 50 ;
- :opencvName "DICT_4X4_50" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 4x4 dictionary with 50 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_5X5_100
-:DICT_ARUCO_5X5_100 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 7 ;
- :markerBits 25 ;
- :maxIdentifiers 100 ;
- :opencvName "DICT_5X5_100" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 5x5 dictionary with 100 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_5X5_1000
-:DICT_ARUCO_5X5_1000 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 5 ;
- :markerBits 25 ;
- :maxIdentifiers 1000 ;
- :opencvName "DICT_5X5_1000" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 5x5 dictionary with 1000 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_5X5_250
-:DICT_ARUCO_5X5_250 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 6 ;
- :markerBits 25 ;
- :maxIdentifiers 250 ;
- :opencvName "DICT_5X5_250" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 5x5 dictionary with 250 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_5X5_50
-:DICT_ARUCO_5X5_50 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 8 ;
- :markerBits 25 ;
- :maxIdentifiers 50 ;
- :opencvName "DICT_5X5_50" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 5x5 dictionary with 50 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_6X6_100
-:DICT_ARUCO_6X6_100 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 12 ;
- :markerBits 36 ;
- :maxIdentifiers 100 ;
- :opencvName "DICT_6X6_100" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 6x6 dictionary with 100 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_6X6_1000
-:DICT_ARUCO_6X6_1000 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 9 ;
- :markerBits 36 ;
- :maxIdentifiers 1000 ;
- :opencvName "DICT_6X6_1000" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 6x6 dictionary with 1000 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_6X6_250
-:DICT_ARUCO_6X6_250 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 11 ;
- :markerBits 36 ;
- :maxIdentifiers 250 ;
- :opencvName "DICT_6X6_250" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 6x6 dictionary with 250 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_6X6_50
-:DICT_ARUCO_6X6_50 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 13 ;
- :markerBits 36 ;
- :maxIdentifiers 50 ;
- :opencvName "DICT_6X6_50" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 6x6 dictionary with 50 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_7X7_100
-:DICT_ARUCO_7X7_100 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 18 ;
- :markerBits 49 ;
- :maxIdentifiers 100 ;
- :opencvName "DICT_7X7_100" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 7x7 dictionary with 100 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_7X7_1000
-:DICT_ARUCO_7X7_1000 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 14 ;
- :markerBits 49 ;
- :maxIdentifiers 1000 ;
- :opencvName "DICT_7X7_1000" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 7x7 dictionary with 1000 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_7X7_250
-:DICT_ARUCO_7X7_250 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 17 ;
- :markerBits 49 ;
- :maxIdentifiers 250 ;
- :opencvName "DICT_7X7_250" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 7x7 dictionary with 250 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_7X7_50
-:DICT_ARUCO_7X7_50 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 19 ;
- :markerBits 49 ;
- :maxIdentifiers 50 ;
- :opencvName "DICT_7X7_50" ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco 7x7 dictionary with 50 tags"@en .
-
-
-### http://purl.org/fidmark/DICT_ARUCO_MIP_36h12
-:DICT_ARUCO_MIP_36h12 rdf:type owl:NamedIndividual ,
- :MarkerDictionary ;
- :hammingDistance 12 ;
- :markerBits 36 ;
- :maxIdentifiers 250 ;
- :supportedMarker :ArUco ;
- rdfs:label "ArUco MIP 36h12 dictionary"@en .
-
-
### http://purl.org/fidmark/DICT_ARUCO_ORIGINAL
:DICT_ARUCO_ORIGINAL rdf:type owl:NamedIndividual ,
:MarkerDictionary ;
@@ -929,6 +927,16 @@ Our tags are composed by a set of circular high-contrast features (dots) spatial
rdfs:label "ChilliTags dictionary"@en .
+### http://purl.org/fidmark/DICT_MIP_36h12
+:DICT_MIP_36h12 rdf:type owl:NamedIndividual ,
+ :MarkerDictionary ;
+ :hammingDistance 12 ;
+ :markerBits 36 ;
+ :maxIdentifiers 250 ;
+ :supportedMarker :ArUco ;
+ rdfs:label "ArUco MIP 36h12 dictionary"@en .
+
+
### http://purl.org/fidmark/DICT_REACTIVISION_AMOEBA
:DICT_REACTIVISION_AMOEBA rdf:type owl:NamedIndividual ,
:MarkerDictionary ;
@@ -1004,4 +1012,4 @@ Our tags are composed by a set of circular high-contrast features (dots) spatial
rdfs:label "Top right origin"@en .
-### Generated by the OWL API (version 4.5.9.2019-02-01T07:24:44Z) https://github.com/owlcs/owlapi
+### Generated by the OWL API (version 4.5.25.2023-02-15T19:15:49Z) https://github.com/owlcs/owlapi
diff --git a/examples/eswc2024_generator/src/models/ARTagMarker.ts b/examples/eswc2024_generator/data/.gitkeep
similarity index 100%
rename from examples/eswc2024_generator/src/models/ARTagMarker.ts
rename to examples/eswc2024_generator/data/.gitkeep
diff --git a/examples/eswc2024_generator/data/virtual_objects.ttl b/examples/eswc2024_generator/data/virtual_objects.ttl
new file mode 100644
index 0000000..019cd95
--- /dev/null
+++ b/examples/eswc2024_generator/data/virtual_objects.ttl
@@ -0,0 +1,426 @@
+@prefix rdf: .
+@prefix sosa: .
+@prefix ogc: .
+@prefix dcmi: .
+@prefix xsd: .
+@prefix poso: .
+@prefix qudt: .
+@prefix unit: .
+@prefix ssn: .
+@prefix ssns: .
+@prefix schema: .
+@prefix example: .
+@prefix fidmark: .
+
+example:marker-1 a fidmark:ArUco, sosa:FeatureOfInterest, ogc:SpatialObject;
+ dcmi:created "2023-12-02T15:16:39.150Z"^^xsd:dateTime;
+ poso:hasPosition [
+ a poso:AbsolutePosition;
+ dcmi:created "2023-12-02T15:16:39.150Z"^^xsd:dateTime;
+ poso:hasOrientation [
+ a poso:Orientation;
+ dcmi:created "2023-12-02T15:16:39.150Z"^^xsd:dateTime;
+ poso:yaw 26.772757919197186;
+ poso:pitch 20.097627797692653;
+ poso:roll 11.831161447369514;
+ qudt:unit unit:DEG;
+ poso:hasAccuracy [
+ a ssns:Accuracy;
+ schema:minValue 0;
+ schema:maxValue 0;
+ schema:unitCode unit:RAD
+]
+];
+ poso:xAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "19"^^xsd:double
+];
+ poso:yAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "10"^^xsd:double
+];
+ poso:zAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+]
+];
+ fidmark:markerIdentifier 21;
+ fidmark:hasDictionary fidmark:DICT_ARUCO_4X4_250;
+ fidmark:hasHeight [
+ a qudt:QuantityValue;
+ qudt:unit unit:CentiM;
+ qudt:numericValue "4"^^xsd:double
+];
+ fidmark:hasWidth [
+ a qudt:QuantityValue;
+ qudt:unit unit:CentiM;
+ qudt:numericValue "4"^^xsd:double
+].
+fidmark:DICT_ARUCO_4X4_250 a fidmark:MarkerDictionary.
+example:marker-2 a fidmark:ArUco, sosa:FeatureOfInterest, ogc:SpatialObject;
+ dcmi:created "2023-12-02T15:16:39.153Z"^^xsd:dateTime;
+ poso:hasPosition [
+ a poso:AbsolutePosition;
+ dcmi:created "2023-12-02T15:16:39.153Z"^^xsd:dateTime;
+ poso:hasOrientation [
+ a poso:Orientation;
+ dcmi:created "2023-12-02T15:16:39.153Z"^^xsd:dateTime;
+ poso:yaw 26.772757919197186;
+ poso:pitch 20.097627797692653;
+ poso:roll 11.831161447369514;
+ qudt:unit unit:DEG;
+ poso:hasAccuracy [
+ a ssns:Accuracy;
+ schema:minValue 0;
+ schema:maxValue 0;
+ schema:unitCode unit:RAD
+]
+];
+ poso:xAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "38"^^xsd:double
+];
+ poso:yAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "20"^^xsd:double
+];
+ poso:zAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+]
+];
+ fidmark:markerIdentifier 42;
+ fidmark:hasDictionary fidmark:DICT_ARUCO_4X4_250;
+ fidmark:hasHeight [
+ a qudt:QuantityValue;
+ qudt:unit unit:CentiM;
+ qudt:numericValue "4"^^xsd:double
+];
+ fidmark:hasWidth [
+ a qudt:QuantityValue;
+ qudt:unit unit:CentiM;
+ qudt:numericValue "4"^^xsd:double
+].
+example:marker-3 a fidmark:ArUco, sosa:FeatureOfInterest, ogc:SpatialObject;
+ dcmi:created "2023-12-02T15:16:39.154Z"^^xsd:dateTime;
+ poso:hasPosition [
+ a poso:AbsolutePosition;
+ dcmi:created "2023-12-02T15:16:39.154Z"^^xsd:dateTime;
+ poso:hasOrientation [
+ a poso:Orientation;
+ dcmi:created "2023-12-02T15:16:39.154Z"^^xsd:dateTime;
+ poso:yaw 26.772757919197186;
+ poso:pitch 20.097627797692653;
+ poso:roll 11.831161447369514;
+ qudt:unit unit:DEG;
+ poso:hasAccuracy [
+ a ssns:Accuracy;
+ schema:minValue 0;
+ schema:maxValue 0;
+ schema:unitCode unit:RAD
+]
+];
+ poso:xAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "57"^^xsd:double
+];
+ poso:yAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "30"^^xsd:double
+];
+ poso:zAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+]
+];
+ fidmark:markerIdentifier 63;
+ fidmark:hasDictionary fidmark:DICT_ARUCO_4X4_250;
+ fidmark:hasHeight [
+ a qudt:QuantityValue;
+ qudt:unit unit:CentiM;
+ qudt:numericValue "4"^^xsd:double
+];
+ fidmark:hasWidth [
+ a qudt:QuantityValue;
+ qudt:unit unit:CentiM;
+ qudt:numericValue "4"^^xsd:double
+].
+example:marker-4 a sosa:FeatureOfInterest, ogc:SpatialObject, fidmark:ARTag;
+ dcmi:created "2023-12-02T15:16:39.155Z"^^xsd:dateTime;
+ poso:hasPosition [
+ a poso:AbsolutePosition;
+ dcmi:created "2023-12-02T15:16:39.155Z"^^xsd:dateTime;
+ poso:hasOrientation [
+ a poso:Orientation;
+ dcmi:created "2023-12-02T15:16:39.155Z"^^xsd:dateTime;
+ poso:yaw 26.772757919197186;
+ poso:pitch 20.097627797692653;
+ poso:roll 11.831161447369514;
+ qudt:unit unit:DEG;
+ poso:hasAccuracy [
+ a ssns:Accuracy;
+ schema:minValue 0;
+ schema:maxValue 0;
+ schema:unitCode unit:RAD
+]
+];
+ poso:xAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "76"^^xsd:double
+];
+ poso:yAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "40"^^xsd:double
+];
+ poso:zAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+]
+];
+ fidmark:markerIdentifier 84;
+ fidmark:hasHeight [
+ a qudt:QuantityValue;
+ qudt:unit unit:CentiM;
+ qudt:numericValue "5"^^xsd:double
+];
+ fidmark:hasWidth [
+ a qudt:QuantityValue;
+ qudt:unit unit:CentiM;
+ qudt:numericValue "5"^^xsd:double
+].
+example:marker-5 a sosa:FeatureOfInterest, ogc:SpatialObject, fidmark:ARTag;
+ dcmi:created "2023-12-02T15:16:39.155Z"^^xsd:dateTime;
+ poso:hasPosition [
+ a poso:AbsolutePosition;
+ dcmi:created "2023-12-02T15:16:39.155Z"^^xsd:dateTime;
+ poso:hasOrientation [
+ a poso:Orientation;
+ dcmi:created "2023-12-02T15:16:39.155Z"^^xsd:dateTime;
+ poso:yaw 26.772757919197186;
+ poso:pitch 20.097627797692653;
+ poso:roll 11.831161447369514;
+ qudt:unit unit:DEG;
+ poso:hasAccuracy [
+ a ssns:Accuracy;
+ schema:minValue 0;
+ schema:maxValue 0;
+ schema:unitCode unit:RAD
+]
+];
+ poso:xAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "95"^^xsd:double
+];
+ poso:yAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "50"^^xsd:double
+];
+ poso:zAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+]
+];
+ fidmark:markerIdentifier 105;
+ fidmark:hasHeight [
+ a qudt:QuantityValue;
+ qudt:unit unit:CentiM;
+ qudt:numericValue "5"^^xsd:double
+];
+ fidmark:hasWidth [
+ a qudt:QuantityValue;
+ qudt:unit unit:CentiM;
+ qudt:numericValue "5"^^xsd:double
+].
+example:marker-6 a sosa:FeatureOfInterest, ogc:SpatialObject, fidmark:ARTag;
+ dcmi:created "2023-12-02T15:16:39.156Z"^^xsd:dateTime;
+ poso:hasPosition [
+ a poso:AbsolutePosition;
+ dcmi:created "2023-12-02T15:16:39.156Z"^^xsd:dateTime;
+ poso:hasOrientation [
+ a poso:Orientation;
+ dcmi:created "2023-12-02T15:16:39.156Z"^^xsd:dateTime;
+ poso:yaw 26.772757919197186;
+ poso:pitch 20.097627797692653;
+ poso:roll 11.831161447369514;
+ qudt:unit unit:DEG;
+ poso:hasAccuracy [
+ a ssns:Accuracy;
+ schema:minValue 0;
+ schema:maxValue 0;
+ schema:unitCode unit:RAD
+]
+];
+ poso:xAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "114"^^xsd:double
+];
+ poso:yAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "60"^^xsd:double
+];
+ poso:zAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+]
+];
+ fidmark:markerIdentifier 126;
+ fidmark:hasHeight [
+ a qudt:QuantityValue;
+ qudt:unit unit:CentiM;
+ qudt:numericValue "5"^^xsd:double
+];
+ fidmark:hasWidth [
+ a qudt:QuantityValue;
+ qudt:unit unit:CentiM;
+ qudt:numericValue "5"^^xsd:double
+].
+example:virtualobject-1 a sosa:FeatureOfInterest, ogc:SpatialObject;
+ dcmi:created "2023-12-02T15:16:39.156Z"^^xsd:dateTime;
+ poso:hasPosition [
+ a poso:RelativePosition;
+ dcmi:created "2023-12-02T15:16:39.156Z"^^xsd:dateTime;
+ poso:xAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:yAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:zAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:isRelativeTo example:marker-1
+].
+example:virtualobject-2 a sosa:FeatureOfInterest, ogc:SpatialObject;
+ dcmi:created "2023-12-02T15:16:39.157Z"^^xsd:dateTime;
+ poso:hasPosition [
+ a poso:RelativePosition;
+ dcmi:created "2023-12-02T15:16:39.157Z"^^xsd:dateTime;
+ poso:xAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:yAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:zAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:isRelativeTo example:marker-2
+].
+example:virtualobject-3 a sosa:FeatureOfInterest, ogc:SpatialObject;
+ dcmi:created "2023-12-02T15:16:39.157Z"^^xsd:dateTime;
+ poso:hasPosition [
+ a poso:RelativePosition;
+ dcmi:created "2023-12-02T15:16:39.157Z"^^xsd:dateTime;
+ poso:xAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:yAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:zAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:isRelativeTo example:marker-3
+].
+example:virtualobject-4 a sosa:FeatureOfInterest, ogc:SpatialObject;
+ dcmi:created "2023-12-02T15:16:39.157Z"^^xsd:dateTime;
+ poso:hasPosition [
+ a poso:RelativePosition;
+ dcmi:created "2023-12-02T15:16:39.157Z"^^xsd:dateTime;
+ poso:xAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:yAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:zAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:isRelativeTo example:marker-4
+].
+example:virtualobject-5 a sosa:FeatureOfInterest, ogc:SpatialObject;
+ dcmi:created "2023-12-02T15:16:39.157Z"^^xsd:dateTime;
+ poso:hasPosition [
+ a poso:RelativePosition;
+ dcmi:created "2023-12-02T15:16:39.157Z"^^xsd:dateTime;
+ poso:xAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:yAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:zAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:isRelativeTo example:marker-5
+].
+example:virtualobject-6 a sosa:FeatureOfInterest, ogc:SpatialObject;
+ dcmi:created "2023-12-02T15:16:39.157Z"^^xsd:dateTime;
+ poso:hasPosition [
+ a poso:RelativePosition;
+ dcmi:created "2023-12-02T15:16:39.157Z"^^xsd:dateTime;
+ poso:xAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:yAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:zAxisValue [
+ a qudt:QuantityValue;
+ qudt:unit unit:M;
+ qudt:numericValue "0"^^xsd:double
+];
+ poso:isRelativeTo example:marker-6
+].
diff --git a/examples/eswc2024_generator/package-lock.json b/examples/eswc2024_generator/package-lock.json
index e2b670f..faab885 100644
--- a/examples/eswc2024_generator/package-lock.json
+++ b/examples/eswc2024_generator/package-lock.json
@@ -11,8 +11,9 @@
"license": "ISC",
"dependencies": {
"@openhps/core": "^0.6.4",
- "@openhps/rdf": "^0.4.27",
- "axios": "^1.6.2"
+ "@openhps/rdf": "^0.4.28",
+ "axios": "^1.6.2",
+ "ts-node": "^10.9.1"
}
},
"node_modules/@bergos/jsonparse": {
@@ -2191,6 +2192,17 @@
"sparqlalgebrajs": "^4.2.0"
}
},
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/@dabh/diagnostics": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz",
@@ -2382,6 +2394,28 @@
"node-fetch": "^2.6.12"
}
},
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
"node_modules/@openhps/core": {
"version": "0.6.4",
"resolved": "https://registry.npmjs.org/@openhps/core/-/core-0.6.4.tgz",
@@ -2433,9 +2467,9 @@
}
},
"node_modules/@openhps/rdf": {
- "version": "0.4.27",
- "resolved": "https://registry.npmjs.org/@openhps/rdf/-/rdf-0.4.27.tgz",
- "integrity": "sha512-1lkF9KVOzjVbysutI+YxPZV2mDgoKOY2g17tLlq/zx6XR1UYqxt3icYV/q/3ksM1iqcynh8kE2hjzfsNjawQRw==",
+ "version": "0.4.28",
+ "resolved": "https://registry.npmjs.org/@openhps/rdf/-/rdf-0.4.28.tgz",
+ "integrity": "sha512-bJ3NucYj53xD4/Y0Qfpq3DWBZ5QPuEahN6hfPEozlLsY5lGELF4iz/iX8MinI2cPFfl8FV65ZJPbGamliDQWqw==",
"dependencies": {
"@comunica/query-sparql": "^2.10.0",
"@inquirer/prompts": "^3.3.0",
@@ -2511,6 +2545,26 @@
"node": ">=v12.22.12"
}
},
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
+ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA=="
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="
+ },
"node_modules/@types/http-link-header": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.5.tgz",
@@ -2620,6 +2674,25 @@
"node": ">=6.5"
}
},
+ "node_modules/acorn": {
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz",
+ "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/ansi-escapes": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
@@ -2656,6 +2729,11 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
+ },
"node_modules/arrayify-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/arrayify-stream/-/arrayify-stream-2.0.1.tgz",
@@ -2927,6 +3005,11 @@
"undici-types": "~5.26.4"
}
},
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
+ },
"node_modules/cross-fetch": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
@@ -2965,6 +3048,14 @@
"node": ">=0.4.0"
}
},
+ "node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
"node_modules/dom-serializer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
@@ -3452,6 +3543,11 @@
"node": "14 || >=16.14"
}
},
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
+ },
"node_modules/microdata-rdf-streaming-parser": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-2.0.1.tgz",
@@ -4303,6 +4399,48 @@
"node": ">=12"
}
},
+ "node_modules/ts-node": {
+ "version": "10.9.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
"node_modules/tslib": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
@@ -4339,6 +4477,19 @@
"tslib": "^2.0.1"
}
},
+ "node_modules/typescript": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz",
+ "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==",
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
@@ -4366,6 +4517,11 @@
"uuid": "dist/bin/uuid"
}
},
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="
+ },
"node_modules/validate-iri": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/validate-iri/-/validate-iri-1.0.1.tgz",
@@ -4510,6 +4666,14 @@
"engines": {
"node": ">=12"
}
+ },
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "engines": {
+ "node": ">=6"
+ }
}
}
}
diff --git a/examples/eswc2024_generator/package.json b/examples/eswc2024_generator/package.json
index e0bf64b..258e43d 100644
--- a/examples/eswc2024_generator/package.json
+++ b/examples/eswc2024_generator/package.json
@@ -4,13 +4,15 @@
"description": "",
"main": "index.js",
"scripts": {
- "postinstall": "openhps-rdf -d ./src/ontologies -n fidmark:http://purl.org/fidmark/ -n omg:https://w3id.org/omg# -n fog:https://w3id.org/fog# -m http://purl.org/fidmark/ https://openhps.github.io/FidMark/1.0/ontology.ttl -m https://w3id.org/fog# https://mathib.github.io/fog-ontology/ontology.ttl"
+ "postinstall": "openhps-rdf -d ./src/ontologies -n fidmark:http://purl.org/fidmark/ -n omg:https://w3id.org/omg# -n fog:https://w3id.org/fog# -m http://purl.org/fidmark/ https://openhps.github.io/FidMark/1.0/ontology.ttl -m https://w3id.org/fog# https://mathib.github.io/fog-ontology/ontology.ttl",
+ "generate": "ts-node ./src/generator"
},
"author": "",
"license": "ISC",
"dependencies": {
"@openhps/core": "^0.6.4",
- "@openhps/rdf": "^0.4.27",
- "axios": "^1.6.2"
+ "@openhps/rdf": "^0.4.28",
+ "axios": "^1.6.2",
+ "ts-node": "^10.9.1"
}
}
diff --git a/examples/eswc2024_generator/src/generator.ts b/examples/eswc2024_generator/src/generator.ts
index e69de29..ccbe277 100644
--- a/examples/eswc2024_generator/src/generator.ts
+++ b/examples/eswc2024_generator/src/generator.ts
@@ -0,0 +1,97 @@
+import { Quad, RDFSerializer, Store } from "@openhps/rdf";
+import { ARTagMarker, ArUcoMarker, FiducialMarker, MarkerDictionary, VirtualObject } from "./models";
+import { DICT_ARUCO_4X4_250 } from "./ontologies/fidmark";
+import { Absolute3DPosition, AngleUnit, GeographicalPosition, LengthUnit, Orientation, Relative3DPosition, RelativeOrientation } from "@openhps/core";
+import * as fs from 'fs';
+import * as path from 'path';
+import { ImageDescriptor } from "./models/ImageDescriptor";
+
+const URI = "http://example.org/markers/";
+
+function createArUco(): Quad[] {
+ const store = new Store();
+ for (let i = 1 ; i < 4 ; i++) {
+ const marker = new ArUcoMarker();
+ marker.uid = `marker-${i}`;
+ marker.identifier = i * 21;
+ marker.height = 4;
+ marker.width = 4;
+ marker.dictionary = MarkerDictionary.fromURI(DICT_ARUCO_4X4_250);
+ marker.setPosition(new Absolute3DPosition(i * 19, i * 10, 0, LengthUnit.METER));
+ marker.position.setOrientation(Orientation.fromEuler({
+ yaw: 31,
+ roll: 20,
+ pitch: 12,
+ unit: AngleUnit.DEGREE
+ }));
+ const quads = RDFSerializer.serializeToQuads(marker, URI);
+ store.addQuads(quads);
+ }
+ return store.getQuads(undefined, undefined, undefined, undefined);
+}
+
+function createARTag(): Quad[] {
+ const store = new Store();
+ for (let i = 4 ; i < 7 ; i++) {
+ const marker = new ARTagMarker();
+ marker.uid = `marker-${i}`;
+ marker.identifier = i * 21;
+ marker.height = 5;
+ marker.width = 5;
+ marker.setPosition(new Absolute3DPosition(i * 19, i * 10, 0, LengthUnit.METER));
+ marker.position.setOrientation(Orientation.fromEuler({
+ yaw: 31,
+ roll: 20,
+ pitch: 12,
+ unit: AngleUnit.DEGREE
+ }));
+ const quads = RDFSerializer.serializeToQuads(marker, URI);
+ store.addQuads(quads);
+ }
+ return store.getQuads(undefined, undefined, undefined, undefined);
+}
+
+function createCustomMarker(): Quad[] {
+ const store = new Store();
+ const marker = new FiducialMarker();
+ marker.uid = `marker-hiro`;
+ marker.height = 5;
+ marker.width = 5;
+ marker.imageDescriptor = new ImageDescriptor();
+ marker.imageDescriptor.image = "https://arprojectsdemo.netlify.app/markers/hiro.png";
+ marker.imageDescriptor.pattern = "https://arprojectsdemo.netlify.app/data/hiro.patt";
+ const quads = RDFSerializer.serializeToQuads(marker, URI);
+ store.addQuads(quads);
+ return store.getQuads(undefined, undefined, undefined, undefined);
+}
+
+function createVirtualObjects(): Quad[] {
+ const store = new Store();
+ for (let i = 1 ; i < 7 ; i++) {
+ const object = new VirtualObject();
+ object.uid = `virtualobject-${i}`;
+ //object.addRelativePosition(new RelativeOrientation(`marker-${i}`, 1, 1, 1, 1))
+ object.addRelativePosition(new Relative3DPosition(`marker-${i}`, 0, 0, 0, LengthUnit.METER));
+ const quads = RDFSerializer.serializeToQuads(object, URI);
+ store.addQuads(quads);
+ }
+ return store.getQuads(undefined, undefined, undefined, undefined);
+}
+
+async function generate() {
+ const store = new Store();
+ store.addQuads(createArUco());
+ store.addQuads(createARTag());
+ store.addQuads(createCustomMarker());
+ store.addQuads(createVirtualObjects());
+ const data = await RDFSerializer.stringify(store, {
+ prettyPrint: true,
+ prefixes: {
+ example: URI,
+ fidmark: "http://purl.org/fidmark/"
+ }
+ });
+ fs.writeFileSync(path.join("./data", "virtual_objects.ttl"), data);
+}
+
+generate();
diff --git a/examples/eswc2024_generator/src/models/FiducialMarker.ts b/examples/eswc2024_generator/src/models/FiducialMarker.ts
index eafd01f..eff5aba 100644
--- a/examples/eswc2024_generator/src/models/FiducialMarker.ts
+++ b/examples/eswc2024_generator/src/models/FiducialMarker.ts
@@ -1,5 +1,8 @@
-import { fidmark } from '@/ontologies';
-import { ReferenceSpace, SerializableObject } from '@openhps/core';
+import { fidmark } from '../ontologies';
+import { LengthUnit, NumberType, ReferenceSpace, SerializableMember, SerializableObject } from '@openhps/core';
+import { MarkerDictionary } from './MarkerDictionary';
+import { RDFBuilder, Thing, qudt, rdf, xsd } from '@openhps/rdf';
+import { ImageDescriptor } from './ImageDescriptor';
@SerializableObject({
rdf: {
@@ -7,5 +10,68 @@ import { ReferenceSpace, SerializableObject } from '@openhps/core';
}
})
export class FiducialMarker extends ReferenceSpace {
+ @SerializableMember({
+ rdf: {
+ predicate: fidmark.markerData,
+ datatype: xsd.string
+ },
+ })
+ data?: string;
+ @SerializableMember({
+ rdf: {
+ predicate: fidmark.markerIdentifier,
+ datatype: xsd.integer
+ },
+ numberType: NumberType.INTEGER
+ })
+ identifier?: number;
+
+ @SerializableMember({
+ rdf: {
+ predicate: fidmark.hasDictionary
+ }
+ })
+ dictionary?: MarkerDictionary;
+
+ @SerializableMember({
+ rdf: {
+ predicate: [fidmark.hasHeight],
+ serializer: (value: number) => {
+ return RDFBuilder.blankNode()
+ .add(rdf.type, qudt.QuantityValue)
+ .add(qudt.unit, LengthUnit.CENTIMETER)
+ .add(qudt.numericValue, value, xsd.double)
+ .build();
+ },
+ deserializer: (thing: Thing) => {
+ return parseFloat(thing.predicates[qudt.numericValue][0].value);
+ },
+ },
+ })
+ height?: number;
+
+ @SerializableMember({
+ rdf: {
+ predicate: [fidmark.hasWidth],
+ serializer: (value: number) => {
+ return RDFBuilder.blankNode()
+ .add(rdf.type, qudt.QuantityValue)
+ .add(qudt.unit, LengthUnit.CENTIMETER)
+ .add(qudt.numericValue, value, xsd.double)
+ .build();
+ },
+ deserializer: (thing: Thing) => {
+ return parseFloat(thing.predicates[qudt.numericValue][0].value);
+ },
+ },
+ })
+ width?: number;
+
+ @SerializableMember({
+ rdf: {
+ predicate: fidmark.hasImageDesciptor
+ }
+ })
+ imageDescriptor?: ImageDescriptor;
}
diff --git a/examples/eswc2024_generator/src/models/ImageDescriptor.ts b/examples/eswc2024_generator/src/models/ImageDescriptor.ts
index c545855..1ffc3b7 100644
--- a/examples/eswc2024_generator/src/models/ImageDescriptor.ts
+++ b/examples/eswc2024_generator/src/models/ImageDescriptor.ts
@@ -1,4 +1,5 @@
-import { fidmark } from '@/ontologies';
+import { IriString, xsd } from '@openhps/rdf';
+import { fidmark } from '../ontologies';
import { SerializableMember, SerializableObject } from '@openhps/core';
@SerializableObject({
@@ -9,8 +10,25 @@ import { SerializableMember, SerializableObject } from '@openhps/core';
export class ImageDescriptor {
@SerializableMember({
rdf: {
- predicate: fidmark.asImage
+ predicate: fidmark.asImage,
+ datatype: xsd.anyURI
}
})
- image: string;
+ image?: IriString;
+
+ @SerializableMember({
+ rdf: {
+ predicate: fidmark.asNFT,
+ datatype: xsd.anyURI
+ }
+ })
+ nft?: IriString;
+
+ @SerializableMember({
+ rdf: {
+ predicate: fidmark.asNFT,
+ datatype: xsd.anyURI
+ }
+ })
+ pattern?: IriString;
}
diff --git a/examples/eswc2024_generator/src/models/MarkerDictionary.ts b/examples/eswc2024_generator/src/models/MarkerDictionary.ts
index 7286b90..436e845 100644
--- a/examples/eswc2024_generator/src/models/MarkerDictionary.ts
+++ b/examples/eswc2024_generator/src/models/MarkerDictionary.ts
@@ -1,4 +1,5 @@
-import { fidmark } from "@/ontologies";
+import { IriString } from "@openhps/rdf";
+import { fidmark } from "../ontologies";
import { SerializableMember, SerializableObject } from "@openhps/core";
@SerializableObject({
@@ -20,4 +21,10 @@ export class MarkerDictionary {
}
})
hammingSize: number;
+
+ static fromURI(uri: IriString): MarkerDictionary {
+ const dict = new MarkerDictionary();
+ (dict as any).rdf = { uri };
+ return dict;
+ }
}
diff --git a/examples/eswc2024_generator/src/models/VirtualObject.ts b/examples/eswc2024_generator/src/models/VirtualObject.ts
index 769e216..b96bc12 100644
--- a/examples/eswc2024_generator/src/models/VirtualObject.ts
+++ b/examples/eswc2024_generator/src/models/VirtualObject.ts
@@ -1,7 +1,7 @@
import { DataObject, SerializableMember, SerializableObject } from "@openhps/core";
import { sosa } from "@openhps/rdf";
import { Geometry } from "./geometry/Geometry";
-import { omg } from "@/ontologies";
+import { omg } from "../ontologies";
@SerializableObject({
rdf: {
diff --git a/examples/eswc2024_generator/src/models/index.ts b/examples/eswc2024_generator/src/models/index.ts
index 4a05397..4bee78c 100644
--- a/examples/eswc2024_generator/src/models/index.ts
+++ b/examples/eswc2024_generator/src/models/index.ts
@@ -1,7 +1,8 @@
import 'reflect-metadata';
import '@openhps/rdf';
export * from './FiducialMarker';
-export * from './ArUcoMarker';
+export * from './markers/ArUcoMarker';
export * from './MarkerDictionary';
export * from './geometry/Geometry';
export * from './VirtualObject';
+export * from './markers';
diff --git a/examples/eswc2024_generator/src/models/markers/ARTagMarker.ts b/examples/eswc2024_generator/src/models/markers/ARTagMarker.ts
new file mode 100644
index 0000000..c517e06
--- /dev/null
+++ b/examples/eswc2024_generator/src/models/markers/ARTagMarker.ts
@@ -0,0 +1,11 @@
+import { FiducialMarker } from "../FiducialMarker";
+import { SerializableObject } from '@openhps/core';
+import { fidmark } from "../../ontologies";
+
+@SerializableObject({
+ rdf: {
+ type: fidmark.ARTag
+ }
+})
+export class ARTagMarker extends FiducialMarker {
+}
diff --git a/examples/eswc2024_generator/src/models/markers/ArUcoMarker.ts b/examples/eswc2024_generator/src/models/markers/ArUcoMarker.ts
new file mode 100644
index 0000000..412f0f3
--- /dev/null
+++ b/examples/eswc2024_generator/src/models/markers/ArUcoMarker.ts
@@ -0,0 +1,11 @@
+import { FiducialMarker } from "../FiducialMarker";
+import { SerializableObject } from '@openhps/core';
+import { fidmark } from "../../ontologies";
+
+@SerializableObject({
+ rdf: {
+ type: fidmark.ArUco
+ }
+})
+export class ArUcoMarker extends FiducialMarker {
+}
diff --git a/examples/eswc2024_generator/src/models/markers/QRCodeMarker.ts b/examples/eswc2024_generator/src/models/markers/QRCodeMarker.ts
new file mode 100644
index 0000000..e7c031f
--- /dev/null
+++ b/examples/eswc2024_generator/src/models/markers/QRCodeMarker.ts
@@ -0,0 +1,11 @@
+import { FiducialMarker } from "../FiducialMarker";
+import { SerializableObject } from '@openhps/core';
+import { fidmark } from "../../ontologies";
+
+@SerializableObject({
+ rdf: {
+ type: fidmark.QRCode
+ }
+})
+export class QRCodeMarker extends FiducialMarker {
+}
diff --git a/examples/eswc2024_generator/src/models/markers/index.ts b/examples/eswc2024_generator/src/models/markers/index.ts
new file mode 100644
index 0000000..43d2c40
--- /dev/null
+++ b/examples/eswc2024_generator/src/models/markers/index.ts
@@ -0,0 +1,2 @@
+export * from './ARTagMarker';
+export * from './ArUcoMarker';
diff --git a/examples/eswc2024_generator/src/ontologies/fidmark.ts b/examples/eswc2024_generator/src/ontologies/fidmark.ts
index 22dd632..035de74 100644
--- a/examples/eswc2024_generator/src/ontologies/fidmark.ts
+++ b/examples/eswc2024_generator/src/ontologies/fidmark.ts
@@ -340,6 +340,15 @@ export const P3PPoseComputation: OwlClass = 'http://purl.org/fidmark/P3PPoseComp
*/
export const PiTag: OwlClass = 'http://purl.org/fidmark/PiTag';
+/**
+ * Pose output
+ *
+ *
+ *
+ * http://purl.org/fidmark/PoseOutput
+ */
+export const PoseOutput: OwlClass = 'http://purl.org/fidmark/PoseOutput';
+
/**
* QR code
*
@@ -412,6 +421,15 @@ export const VisualCode: OwlClass = 'http://purl.org/fidmark/VisualCode';
*/
export const WhyCode: OwlClass = 'http://purl.org/fidmark/WhyCode';
+/**
+ *
+ *
+ *
+ *
+ * http://purl.org/fidmark/WhyCon
+ */
+export const WhyCon: OwlClass = 'http://purl.org/fidmark/WhyCon';
+
/**
* reacTIVision
*
@@ -520,6 +538,15 @@ export const asNFT: OwlDatatypeProperty = 'http://purl.org/fidmark/asNFT';
*/
export const asZFT: OwlDatatypeProperty = 'http://purl.org/fidmark/asZFT';
+/**
+ *
+ *
+ *
+ *
+ * http://purl.org/fidmark/crc
+ */
+export const crc: OwlDatatypeProperty = 'http://purl.org/fidmark/crc';
+
/**
* number of crowns
*
diff --git a/examples/eswc2024_generator/src/ontologies/omg.ts b/examples/eswc2024_generator/src/ontologies/omg.ts
index 1a3336a..6d50d98 100644
--- a/examples/eswc2024_generator/src/ontologies/omg.ts
+++ b/examples/eswc2024_generator/src/ontologies/omg.ts
@@ -24,9 +24,9 @@ export const CurrentGeometryState: OwlClass = 'https://w3id.org/omg#CurrentGeome
/**
* Geometry state
*
- * A geometry state is an evaluation holding the geometry description and metadata about a geometry that was true for the given time.
- * In case of geometry states, changing geometric properties does not cause the need for a new geometry state as long as the property was changed using the OPM concepts. If this is not the case, a copy of the now valid graph must be created and attached to a new geometry state. If an object within the geometry graph is changed (e.g. changing the primitive "Box" into a primitive "Sphere"), the old primitive ("Box") should be classified as opm:Deleted and the new primitive ("Sphere") should be added to the geometry graph in the correct place. The new geometry state should then be connected to any object of the geometry graph that is not opm:Deleted using the omg:containsGeometryObject relation.
- * Metadata of a geometry state must as a minimum be the time of generation stated by prov:generatedAtTime, but preferably also a prov:wasAttributedTo reference to the agent who created the state. In case properties are changed using the OPM concepts, the most current time of generation and agent who created the state will be determined using the omg:containsPropertyState relation.
+ * A geometry state is an evaluation holding the geometry description and metadata about a geometry that was true for the given time.
+ * In case of geometry states, changing geometric properties does not cause the need for a new geometry state as long as the property was changed using the OPM concepts. If this is not the case, a copy of the now valid graph must be created and attached to a new geometry state. If an object within the geometry graph is changed (e.g. changing the primitive "Box" into a primitive "Sphere"), the old primitive ("Box") should be classified as opm:Deleted and the new primitive ("Sphere") should be added to the geometry graph in the correct place. The new geometry state should then be connected to any object of the geometry graph that is not opm:Deleted using the omg:containsGeometryObject relation.
+ * Metadata of a geometry state must as a minimum be the time of generation stated by prov:generatedAtTime, but preferably also a prov:wasAttributedTo reference to the agent who created the state. In case properties are changed using the OPM concepts, the most current time of generation and agent who created the state will be determined using the omg:containsPropertyState relation.
* Derived geometry descriptions are also stored as states as these change when the base geometry changes.
*
* https://w3id.org/omg#GeometryState
@@ -72,7 +72,7 @@ export const containsGeometryObject: OwlObjectProperty = 'https://w3id.org/omg#c
/**
* contains property state
*
- * Relation between a geometry state and a relevant property state. Any property that belongs to the geometry state's related geometry objects (using the omg:containsGeometryObject relation) can be a host for relevant property states.
+ * Relation between a geometry state and a relevant property state. Any property that belongs to the geometry state's related geometry objects (using the omg:containsGeometryObject relation) can be a host for relevant property states.
* This relation can be inferred, as long as the connection to the geometry object (omg:containsGeometryObject), its properties (seas:hasProperty) and the considered property state (opm:hasPropertyState) are modelled correctly.
*
* https://w3id.org/omg#containsPropertyState
diff --git a/examples/eswc2024_generator/tsconfig.json b/examples/eswc2024_generator/tsconfig.json
index 6f8ece4..8564458 100644
--- a/examples/eswc2024_generator/tsconfig.json
+++ b/examples/eswc2024_generator/tsconfig.json
@@ -1,26 +1,21 @@
{
"compilerOptions": {
- "target": "esnext",
- "module": "esnext",
- "strict": false,
- "jsx": "preserve",
- "importHelpers": true,
+ "target": "es6",
+ "module": "commonjs",
"moduleResolution": "node",
- "experimentalDecorators": true,
- "emitDecoratorMetadata": true,
+ "noImplicitAny": false,
+ "noEmitHelpers": true,
+ "importHelpers": true,
+ "removeComments": false,
+ "preserveConstEnums": true,
"skipLibCheck": true,
- "esModuleInterop": true,
- "allowSyntheticDefaultImports": true,
"sourceMap": true,
- "baseUrl": ".",
+ "declaration": false,
+ "emitDecoratorMetadata": true,
+ "experimentalDecorators": true,
"types": [
"node",
],
- "paths": {
- "@/*": [
- "src/*"
- ]
- },
"lib": [
"esnext",
"dom",
@@ -29,11 +24,7 @@
]
},
"include": [
- "src/**/*.ts",
- "src/**/*.tsx",
- "src/**/*.vue",
- "tests/**/*.ts",
- "tests/**/*.tsx"
+ "src",
],
"exclude": [
"node_modules"