decode method
Implementation
({RdfDataset dataset, Map<BlankNodeTerm, String> blankNodeLabels}) decode(
String input,
{String? documentUrl}) {
_logger.fine(
'Parsing N-Quads document${documentUrl != null ? " with base URL: $documentUrl" : ""}',
);
final List<Quad> quads = [];
final List<String> lines = input.split('\n');
final Map<String, BlankNodeTerm> blankNodeMap = {};
int lineNumber = 0;
for (final line in lines) {
lineNumber++;
final trimmed = line.trim();
// Skip empty lines and comments
if (trimmed.isEmpty || trimmed.startsWith('#')) {
continue;
}
try {
final quad = _parseLine(trimmed, lineNumber, blankNodeMap);
quads.add(quad);
} catch (e) {
throw RdfDecoderException(
'Error parsing N-Quads at line $lineNumber: ${e.toString()}',
format: _formatName,
source: SourceLocation(
line: lineNumber - 1, // Convert to 0-based line number
column: 0,
context: trimmed,
),
);
}
}
final blankNodeLabels = {
for (final entry in blankNodeMap.entries) entry.value: entry.key
};
if (blankNodeLabels.length != blankNodeMap.length) {
throw RdfException(
'Inconsistent blank node labeling: some blank nodes have duplicate labels.');
}
// Organize quads into default and named graphs
return (
dataset: RdfDataset.fromQuads(quads),
blankNodeLabels: blankNodeLabels
);
}