BaseUri setting for TTL+WKT

This commit is contained in:
Thomas Krijnen
2024-09-28 14:46:57 +02:00
parent 2eecda17e4
commit dd01cb0e51
2 changed files with 19 additions and 9 deletions
+13 -8
View File
@@ -223,9 +223,14 @@ bool TtlWktSerializer::ready()
void TtlWktSerializer::writeHeader()
{
using namespace ifcopenshell::geometry::settings;
filename_.stream << "# File generated by IfcOpenShell " << IFCOPENSHELL_VERSION << "\n";
filename_.stream << "@prefix geo: <http://www.opengis.net/ont/geosparql#> .\n";
filename_.stream << "@prefix ex: <http://example.org/> .\n";
if (settings_.get<BaseUri>().has()) {
filename_.stream << "@prefix base: <" << settings_.get<BaseUri>().get() << "> .\n";
} else {
filename_.stream << "@prefix base: <http://example.org/> .\n";
}
filename_.stream << "@prefix dcterms: <http://purl.org/dc/terms/> .\n";
filename_.stream << "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n\n\n";
}
@@ -233,19 +238,19 @@ void TtlWktSerializer::writeHeader()
void TtlWktSerializer::write(const IfcGeom::TriangulationElement* o)
{
auto ttl_object_id = [&]() {
return boost::replace_all_copy(object_id(o), "-", "_");
return boost::replace_all_copy(boost::replace_all_copy(object_id(o), "-", "_"), "$", "%24");
};
filename_.stream << "ex:" << ttl_object_id() << " a geo:Feature ;\n";
filename_.stream << "base:" << ttl_object_id() << " a geo:Feature ;\n";
filename_.stream << " dcterms:identifier " << escape_for_turtle(
IfcUtil::convert_utf8_to_utf32(o->guid())) << " ;\n";
filename_.stream << " rdfs:label " << escape_for_turtle(
IfcUtil::convert_utf8_to_utf32(o->name())
) << " ;\n";
filename_.stream << " geo:hasGeometry ex:" << ttl_object_id() << "_geometry .\n\n";
filename_.stream << " geo:hasGeometry base:" << ttl_object_id() << "_geometry .\n\n";
if (!o->geometry().polyhedral_faces_with_holes().empty()) {
filename_.stream << "ex:" << ttl_object_id() << "_geometry a geo:Geometry ;\n";
filename_.stream << "base:" << ttl_object_id() << "_geometry a geo:Geometry ;\n";
filename_.stream << " geo:asWKT " << escape_for_turtle(
IfcUtil::convert_utf8_to_utf32(
capture_output(
@@ -275,8 +280,8 @@ void TtlWktSerializer::write(const IfcGeom::TriangulationElement* o)
}
if (lowest_face) {
filename_.stream << "ex:" << ttl_object_id() << " geo:hasGeometry ex:" << ttl_object_id() << "_footprint_geometry .\n\n";
filename_.stream << "ex:" << ttl_object_id() << "_footprint_geometry a geo:Geometry ;\n";
filename_.stream << "base:" << ttl_object_id() << " geo:hasGeometry base:" << ttl_object_id() << "_footprint_geometry .\n\n";
filename_.stream << "base:" << ttl_object_id() << "_footprint_geometry a geo:Geometry ;\n";
filename_.stream << " geo:asWKT " << escape_for_turtle(
IfcUtil::convert_utf8_to_utf32(
capture_output(
@@ -290,7 +295,7 @@ void TtlWktSerializer::write(const IfcGeom::TriangulationElement* o)
) << "^^geo:wktLiteral .\n\n";
}
} else {
filename_.stream << "ex:" << ttl_object_id() << "_geometry a geo:Geometry ;\n";
filename_.stream << "base:" << ttl_object_id() << "_geometry a geo:Geometry ;\n";
bool force_2d = true;
double z_value;
for (size_t i = 2; i < o->geometry().verts().size(); i += 3) {