moviesToTurtle static method

String moviesToTurtle(
  1. List<Movie> movies,
  2. String listName
)

Converts a list of movies to TTL format using proper RDF triples.

Implementation

static String moviesToTurtle(List<Movie> movies, String listName) {
  final triples = <URIRef, Map<URIRef, dynamic>>{};

  // Create the list resource.

  final listResource = localNS.withAttr(listName);
  triples[listResource] = {
    rdfType: movieListType,
    nameProperty: Literal(_escapeString(listName)),
  };

  // Add movie references to the list only if there are movies.

  if (movies.isNotEmpty) {
    final movieList =
        movies.map((m) => localNS.withAttr('movie${m.id}')).toList();
    triples[listResource]![moviesProperty] = movieList;

    // Add individual movie definitions.

    for (final movie in movies) {
      final movieResource = localNS.withAttr('movie${movie.id}');
      triples[movieResource] = {
        rdfType: movieType,
        identifier: Literal('${movie.id}', datatype: XSD.int),
        name: Literal(_escapeString(movie.title)),
        description: Literal(_escapeString(movie.overview)),
        image: Literal(_escapeString(movie.posterUrl)),
        thumbnailUrl: Literal(_escapeString(movie.backdropUrl)),
        aggregateRating: Literal(
          '${movie.voteAverage}',
          datatype: XSD.double,
        ),
        datePublished: Literal(
          movie.releaseDate.toIso8601String(),
          datatype: XSD.dateTime,
        ),
        genre: Literal(movie.genreIds.join(',')),
      };
    }
  }

  // Define namespace bindings - only bind our custom namespaces.

  final bindNamespaces = {'': localNS, 'schema': movieNS};

  return tripleMapToTurtle(triples, bindNamespaces: bindNamespaces);
}