Skip to content

Commit d2f7f7f

Browse files
committed
Fix maxCardinality
1 parent 77f44de commit d2f7f7f

2 files changed

Lines changed: 19 additions & 7 deletions

File tree

‎src/ldtab_2_ofn/class_translation.rs‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,14 +312,16 @@ pub fn translate_data_min_qualified_cardinality(exp: &owl::MinDataQualifiedCardi
312312
/// let max_cardinality_owl : owl::OWL = serde_json::from_str(max_cardinality).unwrap();
313313
///
314314
/// let axiom : Value = translation::translate(&max_cardinality_owl);
315-
/// let axiom_expected_string = r#"["MaxCardinality","1","obo:IAO_0000120"]"#;
315+
/// let axiom_expected_string = r#"["MaxCardinality","\"1\"^^xsd:int","obo:IAO_0000120"]"#;
316316
/// let axiom_expected : Value = serde_json::from_str(axiom_expected_string).unwrap();
317317
///
318318
/// assert_eq!(axiom, axiom_expected);
319319
/// ```
320320
pub fn translate_max_cardinality(exp: &owl::MaxCardinality) -> Value {
321321
let property = translate(&exp.owl_on_property[0].object);
322322
let cardinality = translate(&exp.owl_max_cardinality[0].object);
323+
let datatype = exp.owl_max_cardinality[0].datatype.clone();
324+
let cardinality = Value::String(format!("{}^^{}", cardinality, datatype));
323325

324326
let operator = Value::String(String::from("MaxCardinality"));
325327
let v = vec![operator, cardinality, property];

‎src/ofn_2_ldtab/class_translation.rs‎

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use serde_json::json;
44
use serde_json::Value;
55

66
pub 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

8586
pub 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

92102
pub fn translate_some_values_from(v: &Value) -> Value {
@@ -202,8 +212,8 @@ pub fn translate_min_qualified_cardinality(v: &Value) -> Value {
202212
}
203213

204214
pub 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

Comments
 (0)