@@ -4,6 +4,7 @@ use serde_json::json;
44use serde_json:: Value ;
55
66pub fn translate ( v : & Value ) -> Value {
7+
78 match v[ 0 ] . as_str ( ) {
89 Some ( "ObjectSomeValuesFrom" ) => translate_some_values_from ( v) ,
910 Some ( "ObjectAllValuesFrom" ) => translate_all_values_from ( v) ,
@@ -83,10 +84,19 @@ pub fn get_object(v: &Value) -> Value {
8384}
8485
8586pub fn get_cardinality_object ( v : & Value ) -> Value {
86- let o: Value = translate ( & v) ;
87-
88- json ! ( { "object" : o,
89- "datatype" : "xsd:nonNegativeInteger" } )
87+ if let Some ( s) = v. as_str ( ) {
88+ if let Some ( ( literal, datatype) ) = s. split_once ( "^^" ) {
89+ let trimmed = literal. trim_matches ( '"' ) ;
90+ json ! ( {
91+ "object" : trimmed,
92+ "datatype" : datatype
93+ } )
94+ } else {
95+ json ! ( { "error" : "Invalid format" } )
96+ }
97+ } else {
98+ json ! ( { "error" : "Expected a string" } )
99+ }
90100}
91101
92102pub fn translate_some_values_from ( v : & Value ) -> Value {
@@ -202,8 +212,8 @@ pub fn translate_min_qualified_cardinality(v: &Value) -> Value {
202212}
203213
204214pub fn translate_max_cardinality ( v : & Value ) -> Value {
205- let property_o : Value = get_object ( & v[ 1 ] ) ;
206- let cardinality_o : Value = get_cardinality_object ( & v[ 2 ] ) ;
215+ let cardinality_o : Value = get_cardinality_object ( & v[ 1 ] ) ;
216+ let property_o : Value = get_object ( & v[ 2 ] ) ;
207217 let type_o: Value = get_object ( & json ! ( "owl:Restriction" ) ) ;
208218
209219 json ! ( { "rdf:type" : vec![ type_o] ,
0 commit comments