Skip to content

Commit

Permalink
Renamed method to ExtractDatatypeDefinitions
Browse files Browse the repository at this point in the history
  • Loading branch information
Marco De Salvo committed May 27, 2024
1 parent ca2020e commit 189700e
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 34 deletions.
49 changes: 29 additions & 20 deletions RDFSharp.Test/Model/RDFGraphTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1825,32 +1825,41 @@ public void ShouldRaiseExceptionOnImportingFromRelativeUri()
=> Assert.ThrowsException<RDFModelException>(() => RDFGraph.FromUri(new Uri("/file/system", UriKind.Relative)));

[TestMethod]
public void ShouldLoadDatatypesFromGraph()
public void ShouldExtractDatatypeDefinitionsFromGraph()
{
RDFDatatype exLength6 = new RDFDatatype(new Uri("ex:length6"), RDFModelEnums.RDFDatatypes.XSD_STRING, [ new RDFLengthFacet(6) ]);
RDFDatatype exMinLength6 = new RDFDatatype(new Uri("ex:minlength6"), RDFModelEnums.RDFDatatypes.XSD_STRING, [ new RDFMinLengthFacet(6) ]);
RDFDatatype exMaxLength6 = new RDFDatatype(new Uri("ex:maxlength6"), RDFModelEnums.RDFDatatypes.XSD_STRING, [ new RDFMaxLengthFacet(6) ]);
RDFDatatype exPatternEx = new RDFDatatype(new Uri("ex:patternex"), RDFModelEnums.RDFDatatypes.XSD_STRING, [ new RDFPatternFacet("^ex") ]);
RDFDatatype exInteger = new RDFDatatype(new Uri("ex:integer"), RDFModelEnums.RDFDatatypes.XSD_INTEGER, null);
RDFGraph graph = new RDFGraph()
.AddDatatype(exLength6)
.AddDatatype(exMinLength6)
.AddDatatype(exMaxLength6)
.AddDatatype(exPatternEx)
.AddDatatype(exInteger)
.RegisterDatatypeDefinitions();

Assert.IsTrue(RDFDatatypeRegister.GetDatatype("ex:length6").TargetDatatype == RDFModelEnums.RDFDatatypes.XSD_STRING
&& RDFDatatypeRegister.GetDatatype("ex:length6").Facets.Single() is RDFLengthFacet lengthFacet && lengthFacet.Length == 6);
Assert.IsTrue(RDFDatatypeRegister.GetDatatype("ex:minlength6").TargetDatatype == RDFModelEnums.RDFDatatypes.XSD_STRING
&& RDFDatatypeRegister.GetDatatype("ex:minlength6").Facets.Single() is RDFMinLengthFacet minlengthFacet && minlengthFacet.Length == 6);
Assert.IsTrue(RDFDatatypeRegister.GetDatatype("ex:maxlength6").TargetDatatype == RDFModelEnums.RDFDatatypes.XSD_STRING
&& RDFDatatypeRegister.GetDatatype("ex:maxlength6").Facets.Single() is RDFMaxLengthFacet maxlengthFacet && maxlengthFacet.Length == 6);
Assert.IsTrue(RDFDatatypeRegister.GetDatatype("ex:patternex").TargetDatatype == RDFModelEnums.RDFDatatypes.XSD_STRING
&& RDFDatatypeRegister.GetDatatype("ex:patternex").Facets.Single() is RDFPatternFacet patternFacet && patternFacet.Pattern == "^ex");
Assert.IsTrue(RDFDatatypeRegister.GetDatatype("ex:integer").TargetDatatype == RDFModelEnums.RDFDatatypes.XSD_INTEGER
&& RDFDatatypeRegister.GetDatatype("ex:integer").Facets.Count == 0);
}
RDFGraph graph = new RDFGraph()
.AddDatatype(exLength6)
.AddDatatype(exMinLength6)
.AddDatatype(exMaxLength6)
.AddDatatype(exPatternEx)
.AddDatatype(exInteger);
List<RDFDatatype> datatypes = graph.ExtractDatatypeDefinitions();

Assert.IsTrue(datatypes.Any(dt => string.Equals(dt.URI.ToString(), "ex:length6")
&& dt.TargetDatatype == RDFModelEnums.RDFDatatypes.XSD_STRING
&& dt.Facets.Single() is RDFLengthFacet lengthFacet
&& lengthFacet.Length == 6));
Assert.IsTrue(datatypes.Any(dt => string.Equals(dt.URI.ToString(), "ex:minlength6")
&& dt.TargetDatatype == RDFModelEnums.RDFDatatypes.XSD_STRING
&& dt.Facets.Single() is RDFMinLengthFacet minlengthFacet
&& minlengthFacet.Length == 6));
Assert.IsTrue(datatypes.Any(dt => string.Equals(dt.URI.ToString(), "ex:maxlength6")
&& dt.TargetDatatype == RDFModelEnums.RDFDatatypes.XSD_STRING
&& dt.Facets.Single() is RDFMaxLengthFacet maxlengthFacet
&& maxlengthFacet.Length == 6));
Assert.IsTrue(datatypes.Any(dt => string.Equals(dt.URI.ToString(), "ex:patternex")
&& dt.TargetDatatype == RDFModelEnums.RDFDatatypes.XSD_STRING
&& dt.Facets.Single() is RDFPatternFacet patternFacet
&& string.Equals(patternFacet.Pattern, "^ex")));
Assert.IsTrue(datatypes.Any(dt => string.Equals(dt.URI.ToString(), "ex:integer")
&& dt.TargetDatatype == RDFModelEnums.RDFDatatypes.XSD_INTEGER
&& dt.Facets.Count == 0));
}

[TestCleanup]
public void Cleanup()
Expand Down
8 changes: 4 additions & 4 deletions RDFSharp/Model/RDFGraph.cs
Original file line number Diff line number Diff line change
Expand Up @@ -656,7 +656,7 @@ public static RDFGraph FromFile(RDFModelEnums.RDFFormats rdfFormat, string filep
graph = RDFTriX.Deserialize(filepath);
break;
}
return graph.RegisterDatatypeDefinitions();
return graph;
}

/// <summary>
Expand Down Expand Up @@ -686,7 +686,7 @@ internal static RDFGraph FromStream(RDFModelEnums.RDFFormats rdfFormat, Stream i
graph = RDFTriX.Deserialize(inputStream, graphContext);
break;
}
return graph.RegisterDatatypeDefinitions();
return graph;
}

/// <summary>
Expand Down Expand Up @@ -747,7 +747,7 @@ public static RDFGraph FromDataTable(DataTable table)
}
#endregion

return graph.RegisterDatatypeDefinitions();
return graph;
}

/// <summary>
Expand Down Expand Up @@ -819,7 +819,7 @@ public static RDFGraph FromUri(Uri uri, int timeoutMilliseconds = 20000)
throw new RDFModelException($"Cannot read RDF graph from Uri {uri} because: " + ex.Message);
}

return graph.RegisterDatatypeDefinitions();
return graph;
}
#endregion

Expand Down
24 changes: 14 additions & 10 deletions RDFSharp/Model/RDFModelUtilities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -307,15 +307,16 @@ internal static List<RDFTriple> SelectTriples(RDFGraph graph, RDFResource subj,
}

/// <summary>
/// Loads the datatype definitions contained in the given graphs and sends them to the datatype register
/// Extracts the datatype definitions contained in the given graphs (both faceted and aliases)
/// </summary>
public static RDFGraph RegisterDatatypeDefinitions(this RDFGraph graph)
public static List<RDFDatatype> ExtractDatatypeDefinitions(this RDFGraph graph)
{
#region Guards
if (graph == null)
return graph;
#endregion
return new List<RDFDatatype>();
#endregion

List<RDFDatatype> datatypes = new List<RDFDatatype>();
foreach (RDFTriple datatypeTriple in graph[null, RDFVocabulary.RDF.TYPE, RDFVocabulary.RDFS.DATATYPE, null])
{
RDFResource datatypeIRI = (RDFResource)datatypeTriple.Subject;
Expand All @@ -325,7 +326,8 @@ public static RDFGraph RegisterDatatypeDefinitions(this RDFGraph graph)
&& graph[datatypeIRI, RDFVocabulary.OWL.ON_DATATYPE, null, null].FirstOrDefault()?.Object is RDFResource onDatatype)
{
//Detect the target datatype (fallback to rdfs:Literal in case not found)
RDFDatatype targetDatatype = RDFDatatypeRegister.GetDatatype(onDatatype.ToString()) ?? RDFDatatypeRegister.RDFSLiteral;
RDFDatatype targetDatatype = RDFDatatypeRegister.GetDatatype(onDatatype.ToString())
?? RDFDatatypeRegister.RDFSLiteral;
RDFModelEnums.RDFDatatypes targetDatatypeEnum = targetDatatype.ToString().GetEnumFromDatatype();

//Detect the constraining facets
Expand Down Expand Up @@ -363,21 +365,23 @@ public static RDFGraph RegisterDatatypeDefinitions(this RDFGraph graph)
}
}

//Finally send the datatype to the register
RDFDatatypeRegister.AddDatatype(new RDFDatatype(datatypeIRI.URI, targetDatatypeEnum, targetFacets));
//Finally collect the datatype
datatypes.Add(new RDFDatatype(datatypeIRI.URI, targetDatatypeEnum, targetFacets));
}

//Try detect an alias datatype
else if (graph[datatypeIRI, RDFVocabulary.OWL.EQUIVALENT_CLASS, null, null].FirstOrDefault()?.Object is RDFResource equivalentDatatype)
{
//Detect the target datatype (fallback to rdfs:Literal in case not found)
RDFDatatype targetDatatype = RDFDatatypeRegister.GetDatatype(equivalentDatatype.ToString()) ?? RDFDatatypeRegister.RDFSLiteral;
RDFDatatype targetDatatype = RDFDatatypeRegister.GetDatatype(equivalentDatatype.ToString())
?? RDFDatatypeRegister.RDFSLiteral;
RDFModelEnums.RDFDatatypes targetDatatypeEnum = targetDatatype.ToString().GetEnumFromDatatype();

RDFDatatypeRegister.AddDatatype(new RDFDatatype(datatypeIRI.URI, targetDatatypeEnum, null));
//Finally collect the datatype
datatypes.Add(new RDFDatatype(datatypeIRI.URI, targetDatatypeEnum, null));
}
}
return graph;
return datatypes;
}
#endregion

Expand Down

0 comments on commit 189700e

Please sign in to comment.