ratingsFromTurtle static method

Map<String, double> ratingsFromTurtle(
  1. String ttlContent
)

Parses ratings from TTL content using proper RDF parsing.

Implementation

static Map<String, double> ratingsFromTurtle(String ttlContent) {
  try {
    // First try JSON backup for backward compatibility.

    final jsonMatch = RegExp(r'# JSON_DATA: (.+)').firstMatch(ttlContent);
    if (jsonMatch != null) {
      final jsonData = jsonMatch.group(1)!;
      final decoded = jsonDecode(jsonData) as Map<String, dynamic>;
      return decoded.map((key, value) => MapEntry(key, value.toDouble()));
    }

    // Parse using proper RDF.

    final triples = turtleToTripleMap(ttlContent);
    final ratings = <String, double>{};

    // Find rating resources.

    for (final subject in triples.keys) {
      final predicates = triples[subject]!;

      // Check if this is a rating resource.

      final typeValues =
          predicates['http://www.w3.org/1999/02/22-rdf-syntax-ns#type'] ?? [];
      final isRating = typeValues.any(
        (type) => type.toString().contains('Rating') || type == '#Rating',
      );

      if (isRating) {
        final movieIdValues = predicates['#movieId'] ?? [];
        final valueValues = predicates['#value'] ?? [];

        if (movieIdValues.isNotEmpty && valueValues.isNotEmpty) {
          final movieId = movieIdValues.first.toString();
          final rating = double.tryParse(valueValues.first.toString()) ?? 0.0;
          ratings[movieId] = rating;
        }
      }
    }

    return ratings;
  } catch (e) {
    return {};
  }
}