feat: Initial version of CleverRDFLib #4
No reviewers
Labels
No labels
Blocked
Bounty
$100
Bounty
$1000
Bounty
$10000
Bounty
$20
Bounty
$2000
Bounty
$250
Bounty
$50
Bounty
$500
Bounty
$5000
Bounty
$750
MoSCoW
Could have
MoSCoW
Must have
MoSCoW
Should have
Needs feedback
Points
1
Points
13
Points
2
Points
21
Points
3
Points
34
Points
5
Points
55
Points
8
Points
88
Priority
Backlog
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Signed-off: Owner
Signed-off: Scrum Master
Signed-off: Tech Lead
Spike
State
Completed
State
Duplicate
State
In Progress
State
In Review
State
Paused
State
Unverified
State
Verified
State
Wont Do
Type
Bug
Type
Discussion
Type
Documentation
Type
Epic
Type
Feature
Type
Legendary
Type
Support
Type
Task
Type
Testing
No milestone
No project
No assignees
4 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
cleverlibre/CleverRDFlib!4
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/initial_version-#1"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
ISSUES CLOSED: #1
ef1b7b1760tocbee72c78dcbee72c78d33165418a133165418a1b412bde0e9b412bde0e91be110eca91be110eca9969c51e3bf969c51e3bf59650c3a0a59650c3a0a23355ad08a23355ad08ac210884198c210884198cf2d24a160cf2d24a160e5517bc3ede5517bc3edcc86e5a93ecc86e5a93e20c909ba0d20c909ba0db0ac316167b0ac316167477bd4e72c477bd4e72ceeadefa5b6eeadefa5b66536ff2a44@ -0,0 +155,4 @@result = self.check_consistency()return result.unsatisfiable_classesdef _check_unsatisfiable_classes(self) -> list[ConsistencyIssue]:just a question let's suppose that we have such classes that are equivalent or subclass of
owl:nothingdoes this get flagged as error or just something to be reportedthis won't cause a failure, the application will resume processing but the potential issue gets reported
6536ff2a44f3cfc42aaff3cfc42aaf4f336028134f336028138b679b515b8b679b515b235beb3727235beb372765f26ec77765f26ec777f93a81262cf93a81262ca43e7325d9a43e7325d9742817f65b742817f65b8196a35afc8196a35afc4f20a23eae4f20a23eae868084dc6b868084dc6b9fc69a1f569fc69a1f56e828acf175@ -0,0 +112,4 @@found = Falsefor prop_node in context.properties_list:if prop_node.iri == iri:found = TrueFor this and functions like this,
any(prop_node.iri == iri for prop_node in context.properties_list)might be a clearer way to express what you're doingyes, i have been applying that for the production code, but the tests have more relaxed rules. Personally i think that condensing the logic in a single line does not make it any more readable, even if it written in a slightly different manner. i believe most people are used to those kinds of for loops like even if not from other languages.
@ -0,0 +35,4 @@# Note: We cannot use a context manager here because addinfourl takes ownership# of the file object and will close it when the response is closed.try:file_obj = open(local_path, "rb") # noqa: SIM115If you're suppressing the warning, I think it's wise to
finally: file_obj.close()after your exception handling@ -0,0 +271,4 @@def _find_ontology_iris(self) -> set[URIRef]:"""Find all ontology IRI declarations in the graph.Where this is used in exctract_ontology_iri, the calling code just accesses the first ontology. Should an exception be raised, or a warning logged, when this returns a multi-element list? Otherwise you are silently dropping any subsequent IRIs.
@ -0,0 +375,4 @@# Check for direct circular referencesfor class_a, superclasses in subclass_relations.items():for class_b in superclasses:if class_b in subclass_relations and class_a in subclass_relations[class_b]:This looks like it catches non-trivial cycles, but it doesn't look like it catches trivial ones. E.g. you'd catch "a Foo is a subclass of Bar, and a Bar is a subclass of Foo" but I don't think it'd catch "a Foo is a subclass of Foo". Not 100% sure but I think that's the case.
@ -0,0 +61,4 @@Returns:Tuple of (uri, depth) for the next item to process"""return self._stack.pop()In the breadth-first search you had to cast the equivalent call. If I were maintaining this, I'd find helpful a comment explaining why it's necessary there but not here.
Looks good. A handful of questions but given that I'm not an expert in the problem space, I'm approving anyway and just ask that you consider them.