* [ELPA] New package: triples @ 2022-10-26 0:54 Andrew Hyatt 2022-10-26 2:52 ` Stefan Monnier 2022-10-27 3:36 ` Jean Louis 0 siblings, 2 replies; 14+ messages in thread From: Andrew Hyatt @ 2022-10-26 0:54 UTC (permalink / raw) To: emacs-devel Hi everyone, I've created a new package, triples, which can be found at https://github.com/ahyatt/triples. I'd like to add this to some ELPA, and would prefer the gnu ELPA. I will be talking about this package, and examples of its use, in the upcoming Emacs conference. The package is a library which is a layer on top of sqlite, designed to store data in a particular format, where everything goes into one table. All data is expressed as "triples", a link between a subject, and an object, via a predicate. This is similar to the RDF standard. With the triples package, a schema can be defined, which also is stored in the same triples data. The schema controls what are valid representations in the database. This takes the form of types and their properites. Data about entities, and their types and properties can be stored and retrieved according to that schema, and the schema can be added by other clients, letting packages build on top of the data by adding new types, and letting the data live together in a way that's difficult to do otherwise. For example, one package could provide a way to store contact information in the database. Another package could layer on an annotation package onto that that lets contact and any other entities contain annotations. Another way to think of this is that it's a database that allows independent types, each type having a predefined set of properties, and entities that are stored can have an arbitrary set of those types. You can see a use of this in my other package that I'm developing: https://github.com/ahyatt/ekg. The package does work, and I am using ekg regularly at the moment without issues. I am the sole contributor, and have FSF papers. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-10-26 0:54 [ELPA] New package: triples Andrew Hyatt @ 2022-10-26 2:52 ` Stefan Monnier 2022-10-26 5:52 ` Stefan Kangas 2022-10-26 13:23 ` Andrew Hyatt 2022-10-27 3:36 ` Jean Louis 1 sibling, 2 replies; 14+ messages in thread From: Stefan Monnier @ 2022-10-26 2:52 UTC (permalink / raw) To: Andrew Hyatt; +Cc: emacs-devel, Tom Gillespie > I've created a new package, triples, which can be found at > https://github.com/ahyatt/triples. I'd like to add this to some ELPA, and > would prefer the gnu ELPA. I will be talking about this package, and > examples of its use, in the upcoming Emacs conference. Sounds really nice. Currently I see it depends on `emacsql`, but that package is neither in GNU ELPA nor NonGNU ELPA. Any chance you can rework your package so it can use the new built-in sqlite code in Emacs-29, or maybe the `pq` package (tho this one is currently only in GNU-devel, it just needs a `Version:` bump to appear on GNU ELPA)? In the mean time, we should probably add `emacsql` to (presumably Non)GNU ELPA. Stefan PS: I also see `cl-lib` in the package-requires, and using a weird non-parenthesized syntax. Since `emacsql` depends on Emacs-25, you may as well depend on Emacs-25 which will give you `cl-lib` anyway. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-10-26 2:52 ` Stefan Monnier @ 2022-10-26 5:52 ` Stefan Kangas 2022-10-26 13:23 ` Andrew Hyatt 1 sibling, 0 replies; 14+ messages in thread From: Stefan Kangas @ 2022-10-26 5:52 UTC (permalink / raw) To: Stefan Monnier, Andrew Hyatt; +Cc: emacs-devel, Tom Gillespie Stefan Monnier <monnier@iro.umontreal.ca> writes: > Sounds really nice. Currently I see it depends on `emacsql`, but that > package is neither in GNU ELPA nor NonGNU ELPA. Any chance you can > rework your package so it can use the new built-in sqlite code in > Emacs-29, or maybe the `pq` package (tho this one is currently only in > GNU-devel, it just needs a `Version:` bump to appear on GNU ELPA)? > > In the mean time, we should probably add `emacsql` to (presumably > Non)GNU ELPA. I think we are getting closer to adding it. See the discussion here: https://github.com/magit/emacsql/pull/87#issuecomment-1277783891 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-10-26 2:52 ` Stefan Monnier 2022-10-26 5:52 ` Stefan Kangas @ 2022-10-26 13:23 ` Andrew Hyatt 2022-10-26 13:29 ` Stefan Monnier 1 sibling, 1 reply; 14+ messages in thread From: Andrew Hyatt @ 2022-10-26 13:23 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel, Tom Gillespie On Tue, Oct 25, 2022 at 10:52 PM Stefan Monnier <monnier@iro.umontreal.ca> wrote: >> I've created a new package, triples, which can be found at >> https://github.com/ahyatt/triples. I'd like to add this to >> some ELPA, and would prefer the gnu ELPA. I will be talking >> about this package, and examples of its use, in the upcoming >> Emacs conference. > > Sounds really nice. Currently I see it depends on `emacsql`, > but that package is neither in GNU ELPA nor NonGNU ELPA. Any > chance you can rework your package so it can use the new > built-in sqlite code in Emacs-29, or maybe the `pq` package (tho > this one is currently only in GNU-devel, it just needs a > `Version:` bump to appear on GNU ELPA)? > > In the mean time, we should probably add `emacsql` to > (presumably Non)GNU ELPA. Yes, it's possible for me to rework it. However, it then would be available just to those on Emacs 29, which seems restrictive. Would it make sense to try to be compatible with both by wrapping the calls and just using whichever sqlite package is available? Has anyone done that before? Anyway, it doesn't hurt for me to make a branch and just completely switch to the Emacs 29 sqlite to see if anything interesting comes up, so I'll do that soon. > > > > Stefan > > > PS: I also see `cl-lib` in the package-requires, and using a weird > non-parenthesized syntax. Since `emacsql` depends on Emacs-25, you may > as well depend on Emacs-25 which will give you `cl-lib` anyway. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-10-26 13:23 ` Andrew Hyatt @ 2022-10-26 13:29 ` Stefan Monnier 2022-10-27 5:15 ` Andrew Hyatt 0 siblings, 1 reply; 14+ messages in thread From: Stefan Monnier @ 2022-10-26 13:29 UTC (permalink / raw) To: Andrew Hyatt; +Cc: emacs-devel, Tom Gillespie > Yes, it's possible for me to rework it. However, it then would be available > just to those on Emacs 29, which seems restrictive. Would it make sense to > try to be compatible with both by wrapping the calls and just using > whichever sqlite package is available? That's what I was hoping for, yes. But either way is fine by me :-) > Anyway, it doesn't hurt for me to make a branch and just completely switch > to the Emacs 29 sqlite to see if anything interesting comes up, so I'll do > that soon. It's probably a good first step in any case, before deciding if and how to merge the two cases. Stefan ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-10-26 13:29 ` Stefan Monnier @ 2022-10-27 5:15 ` Andrew Hyatt 2022-10-27 15:34 ` Stefan Monnier 0 siblings, 1 reply; 14+ messages in thread From: Andrew Hyatt @ 2022-10-27 5:15 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel, Tom Gillespie On Wed, Oct 26, 2022 at 09:29 AM Stefan Monnier <monnier@iro.umontreal.ca> wrote: >> Yes, it's possible for me to rework it. However, it then would >> be available just to those on Emacs 29, which seems >> restrictive. Would it make sense to try to be compatible with >> both by wrapping the calls and just using whichever sqlite >> package is available? > > That's what I was hoping for, yes. But either way is fine by me > :-) > I've started looking into this. Interesting consideration is that emacsql and sqlite have a bit different representations: in sqlite everything is a string, but emacsql will store symbols, numbers differently than strings, which are wrapped in the database with extra quotes to mark them as strings. I'll try to keep compatibility between these versions, which really I think means that our use of sqlite has to support emacsql's way of doing things. About the possibility of using one or the other, whichever is available, how would that work in terms of package dependencies? I don't think it's possible to have an OR dependency specified in the package-dependencies line in the source, but really only one of emacsql or emacs29 would be required. If you have any insight into this, it'd be useful. >> Anyway, it doesn't hurt for me to make a branch and just >> completely switch to the Emacs 29 sqlite to see if anything >> interesting comes up, so I'll do that soon. > > It's probably a good first step in any case, before deciding if > and how to merge the two cases. Great, that is what I'm doing. When it passes tests, I'll let you know. > > > Stefan ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-10-27 5:15 ` Andrew Hyatt @ 2022-10-27 15:34 ` Stefan Monnier 2022-11-03 2:32 ` Andrew Hyatt 0 siblings, 1 reply; 14+ messages in thread From: Stefan Monnier @ 2022-10-27 15:34 UTC (permalink / raw) To: Andrew Hyatt; +Cc: emacs-devel, Tom Gillespie > About the possibility of using one or the other, whichever is available, how > would that work in terms of package dependencies? I don't think it's > possible to have an OR dependency specified in the package-dependencies > line in the source, but really only one of emacsql or emacs29 would be > required. If you have any insight into this, it'd be useful. Package dependencies just tell the package manager to install other packages to try and make it easier on users to get a working package. But you don't need to have a precise/exact description of the real dependencies in the `Package-Requires` (as long as the correct byte-compilation of your package actually depends on some other package, e.g. if your package uses a macro defined in the other package). You can just remove the `emacsql` dependency from `Package-Requires` and replace it with a runtime check for the presence of either `emacsql` or the new sqlite support that emits an error when applicable (with a message explaining to the user that they need to have one of those two thingies before they can use the package). [ Just make sure the error is not emitted just because the file(s) from your package are loaded, but only when some code is actually called. ] Stefan ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-10-27 15:34 ` Stefan Monnier @ 2022-11-03 2:32 ` Andrew Hyatt 0 siblings, 0 replies; 14+ messages in thread From: Andrew Hyatt @ 2022-11-03 2:32 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel, Tom Gillespie [-- Attachment #1: Type: text/plain, Size: 1565 bytes --] On Thu, Oct 27, 2022 at 11:34 AM Stefan Monnier <monnier@iro.umontreal.ca> wrote: > > About the possibility of using one or the other, whichever is available, > how > > would that work in terms of package dependencies? I don't think it's > > possible to have an OR dependency specified in the package-dependencies > > line in the source, but really only one of emacsql or emacs29 would be > > required. If you have any insight into this, it'd be useful. > > Package dependencies just tell the package manager to install other > packages to try and make it easier on users to get a working package. > But you don't need to have a precise/exact description of the > real dependencies in the `Package-Requires` (as long as the > correct byte-compilation of your package actually depends on some other > package, e.g. if your package uses a macro defined in the other package). > > You can just remove the `emacsql` dependency from `Package-Requires` and > replace it with a runtime check for the presence of either `emacsql` or > the new sqlite support that emits an error when applicable (with > a message explaining to the user that they need to have one of those two > thingies before they can use the package). > [ Just make sure the error is not emitted just because the file(s) from > your package are loaded, but only when some code is actually called. ] > This is now done, you can find the new code that can either use emacs 29 builtin sqlite, or emacsql, on a new branch, at https://github.com/ahyatt/triples/tree/combined. > > > Stefan > > [-- Attachment #2: Type: text/html, Size: 2191 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-10-26 0:54 [ELPA] New package: triples Andrew Hyatt 2022-10-26 2:52 ` Stefan Monnier @ 2022-10-27 3:36 ` Jean Louis 2022-10-27 5:19 ` Andrew Hyatt 1 sibling, 1 reply; 14+ messages in thread From: Jean Louis @ 2022-10-27 3:36 UTC (permalink / raw) To: Andrew Hyatt; +Cc: emacs-devel * Andrew Hyatt <ahyatt@gmail.com> [2022-10-26 03:59]: > I've created a new package, triples, which can be found at > https://github.com/ahyatt/triples. I'd like to add this to some ELPA, and > would prefer the gnu ELPA. I will be talking about this package, and > examples of its use, in the upcoming Emacs conference. I like the idea of relating everything to everything. I was experimenting with semantic triplets for PostgreSQL: Implementation of Semantic Triplets in PostgreSQL database: https://hyperscope.link/3/7/1/5/4/Implementation-of-Semantic-Triplets-in-PostgreSQL-database-37154.html In this case any table, column, with its primary key may be related to any other table, column with its primary key. That way objects and subjects are constrained and rigid, it is not universal triplets, but database tables dependent one. It relates only what exists in the database. If there is `people' database then such may be related to arbitrary other tables like `statistics'. You have made general triplets to build any type of knowledge that is nice. Triplets allow huge flexibility in relation assignments. I just wonder if your "types" can simply be replaced again with predicates. select * from predicates; predicates_id | predicates_name | predicates_description ---------------+-----------------+----------------------------------- 1 | is | When subject is object. 2 | knows | When subject knows object. 3 | registered | When subject registered an object by adding "has" predicate, one can tell: person has age person has name employee has id id is integer employeee has manager employee is person manager is person -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-10-27 3:36 ` Jean Louis @ 2022-10-27 5:19 ` Andrew Hyatt 2022-10-27 19:15 ` Jean Louis 2022-10-27 23:33 ` Jean Louis 0 siblings, 2 replies; 14+ messages in thread From: Andrew Hyatt @ 2022-10-27 5:19 UTC (permalink / raw) To: Jean Louis; +Cc: emacs-devel On Thu, Oct 27, 2022 at 06:36 AM Jean Louis <bugs@gnu.support> wrote: > * Andrew Hyatt <ahyatt@gmail.com> [2022-10-26 03:59]: >> I've created a new package, triples, which can be found at >> https://github.com/ahyatt/triples. I'd like to add this to >> some ELPA, and would prefer the gnu ELPA. I will be talking >> about this package, and examples of its use, in the upcoming >> Emacs conference. > > I like the idea of relating everything to everything. > > I was experimenting with semantic triplets for PostgreSQL: > > Implementation of Semantic Triplets in PostgreSQL database: > https://hyperscope.link/3/7/1/5/4/Implementation-of-Semantic-Triplets-in-PostgreSQL-database-37154.html > > In this case any table, column, with its primary key may be > related to any other table, column with its primary key. That > way objects and subjects are constrained and rigid, it is not > universal triplets, but database tables dependent one. It > relates only what exists in the database. If there is `people' > database then such may be related to arbitrary other tables like > `statistics'. Thanks for mentioning this, it's an interesting design I'll read up on! > > You have made general triplets to build any type of knowledge > that is nice. > > Triplets allow huge flexibility in relation assignments. > > I just wonder if your "types" can simply be replaced again with > predicates. > > select * from predicates; > predicates_id | predicates_name | predicates_description > ---------------+-----------------+----------------------------------- > 1 | is | When subject is object. 2 | > knows | When subject knows object. 3 | > registered | When subject registered an object > > by adding "has" predicate, one can tell: > > person has age person has name employee has id id is integer > employeee has manager employee is person manager is person We have "has" but not "is". The schema has types, those types have properties. So we can have a subject, "Joe Employee", who has a type person, and a type employee, and a type manager, the properties of those respective types. But we don't know or enforce that every employee is also a person. It's perhaps a feature that can be added later if needed; it seems possible in the current implementation. > > -- > Jean > > Take action in Free Software Foundation campaigns: > https://www.fsf.org/campaigns > > In support of Richard M. Stallman > https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-10-27 5:19 ` Andrew Hyatt @ 2022-10-27 19:15 ` Jean Louis 2022-10-27 23:33 ` Jean Louis 1 sibling, 0 replies; 14+ messages in thread From: Jean Louis @ 2022-10-27 19:15 UTC (permalink / raw) To: Andrew Hyatt; +Cc: emacs-devel * Andrew Hyatt <ahyatt@gmail.com> [2022-10-27 08:20]: > > In this case any table, column, with its primary key may be related to > > any other table, column with its primary key. That way objects and > > subjects are constrained and rigid, it is not universal triplets, but > > database tables dependent one. It relates only what exists in the > > database. If there is `people' database then such may be related to > > arbitrary other tables like `statistics'. > > Thanks for mentioning this, it's an interesting design I'll read up > on! Recently I am thinking of using UUID. Any table, column, by primary key (by it UUID or just INTEGER or else), may still have UUID. Let us say transaction entry: ID 3 Date created "2022-02-27 18:57:23.52117" Date modified nil User created "maddox" User modified "maddox" Date/Time "2022-02-27 00:00:00" Name "Mobile money fee" Description "nil" Amount 2310.0 Currency "UGX - Ugandan shilling" From account "Jean Louis" To account "Mobile money expenses" UUID "3c171d3d-b2c8-4527-8984-34bbacc82ff2" Hyperdocument nil Then by using UUID as subject, predicate, and UUID as object, it becomes clear what is what. A function must search UUID among those tables who have it. It is really fast, not noticable. But I can't know how well it could scale with millions or billions of records. For presentation purposes it would be fine, but for direct access, I can't be sure of speed. > > select * from predicates; predicates_id | predicates_name | > > predicates_description > > ---------------+-----------------+----------------------------------- > > 1 | is | When subject is object. 2 | knows > > | When subject knows object. 3 | registered | When > > subject registered an object > > > > by adding "has" predicate, one can tell: > > > > person has age person has name employee has id id is integer employeee > > has manager employee is person manager is person > > We have "has" but not "is". The schema has types, those types have > properties. So we can have a subject, "Joe Employee", who has a type > person, and a type employee, and a type manager, the properties of those > respective types. But we don't know or enforce that > every employee is also a person. It's perhaps a feature that can be > added later if needed; it seems possible in the current > implementation. Principle of semantic triplets is just subject, predicate and object. I guess you allow users to add any kind of predicates, right? Types are automatically formed by using subject, predicate, object principle. Reference: https://en.wikipedia.org/wiki/Semantic_triple This should be enough by using that principle: - job is activity - job has status - employee is status - Joe is name - person has name - Joe has employee (meaning status) Also see this: OneModel — an Alternative to emacs org-mode: https://soylentnews.org/article.pl?sid=16/04/23/0149257 OneModel - Record, manage and share any knowledge: http://onemodel.org/1/e-9223372036854618119.html -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-10-27 5:19 ` Andrew Hyatt 2022-10-27 19:15 ` Jean Louis @ 2022-10-27 23:33 ` Jean Louis 2022-11-03 2:37 ` Andrew Hyatt 1 sibling, 1 reply; 14+ messages in thread From: Jean Louis @ 2022-10-27 23:33 UTC (permalink / raw) To: Andrew Hyatt; +Cc: emacs-devel I have forgot to mention that any relationship subject, predicate, object, itself, should be capable of becoming both subject and object. Employee IS status Joe HAS employee (status) Date IS TIME, etc. 2012-10-28 IS date (Joe HAS employee status) SINCE 2012-10-28 ABC INC. IS company Company EMPLOYED Joe Trevis HAS manager (status) (Company EMPLOYED Joe) HAS Trevis ((Company EMPLOYED Joe) HAS Trevis) MANAGES Joe and so on -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-10-27 23:33 ` Jean Louis @ 2022-11-03 2:37 ` Andrew Hyatt 2022-11-03 16:57 ` Jean Louis 0 siblings, 1 reply; 14+ messages in thread From: Andrew Hyatt @ 2022-11-03 2:37 UTC (permalink / raw) To: Andrew Hyatt, emacs-devel [-- Attachment #1: Type: text/plain, Size: 1105 bytes --] Yes, this is in theory possible depending on how you use this library! I've seen this done as CVTs (Compound Value Types). To take your example, (Joe HAS employee status) SINCE 2012-10-28, it'd be something like: Subject: Joe Predicate: /employment/status Object: "6988a214-368c-40a2-9e51-8a7f5549de44" Subject: "6988a214-368c-40a2-9e51-8a7f5549de44" Predicate: /employment/start Object: "2012-10-28" On Thu, Oct 27, 2022 at 7:39 PM Jean Louis <bugs@gnu.support> wrote: > I have forgot to mention that any relationship subject, predicate, > object, itself, should be capable of becoming both subject and object. > > Employee IS status > Joe HAS employee (status) > Date IS TIME, etc. > 2012-10-28 IS date > (Joe HAS employee status) SINCE 2012-10-28 > ABC INC. IS company > Company EMPLOYED Joe > Trevis HAS manager (status) > (Company EMPLOYED Joe) HAS Trevis > ((Company EMPLOYED Joe) HAS Trevis) MANAGES Joe > > and so on > > > -- > Jean > > Take action in Free Software Foundation campaigns: > https://www.fsf.org/campaigns > > In support of Richard M. Stallman > https://stallmansupport.org/ > [-- Attachment #2: Type: text/html, Size: 1732 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [ELPA] New package: triples 2022-11-03 2:37 ` Andrew Hyatt @ 2022-11-03 16:57 ` Jean Louis 0 siblings, 0 replies; 14+ messages in thread From: Jean Louis @ 2022-11-03 16:57 UTC (permalink / raw) To: Andrew Hyatt; +Cc: emacs-devel * Andrew Hyatt <ahyatt@gmail.com> [2022-11-03 05:39]: > Yes, this is in theory possible depending on how you use this > library! Not only, but it should be possible. Relationship is also subject or object. I find UUIDs fantastic tool for relationship management. It is something that spans over specific databases to many other digital things on the planet. So I have created this one: CREATE TABLE uuid2uuid ( uuid2uuid_uuid UUID PRIMARY KEY DEFAULT gen_random_uuid(), uuid2uuid_datecreated TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, uuid2uuid_datemodified TIMESTAMP, uuid2uuid_usercreated TEXT NOT NULL DEFAULT current_user, uuid2uuid_usermodified TEXT NOT NULL DEFAULT current_user, uuid2uuid_uuidobject UUID NOT NULL, uuid2uuid_uuidpredicate UUID NOT NULL, uuid2uuid_uuidsubject UUID NOT NULL, oid2oid_description TEXT ); > I've seen this done as CVTs (Compound Value Types). I do not know that abbreviation. If you look at the table above, you will see UUID created for each entry. It means again you may relate relationship UUID to other UUID and how you define values for UUID is left to programmer. For example ID 3 in the database: ID 3 First name "Vicente" Last name (People List Name) "Ramirez" People type "Individual Person" UUID "f2832aa3-8cbd-4d2f-87c3-2887c41d22e2" Thus UUID "f2832aa3-8cbd-4d2f-87c3-2887c41d22e2" may be related to other UUID "2fc8ebd6-c24e-4a91-aaf9-42970c15866c" One could say Entry 7150f343-1c54-43f7-9838-414724b93bda says that: UUID "f2832aa3-8cbd-4d2f-87c3-2887c41d22e2" is married (predicate) to UUID "2fc8ebd6-c24e-4a91-aaf9-42970c15866c" Now we got UUID for marriage: 7150f343-1c54-43f7-9838-414724b93bda and UUID for child 6d7b0daf-2a6e-4fcc-9b7a-b83208fc4c5f and we can say: Entry 0e1cdfd9-7248-4c08-8cf8-a66eae51ea3a says that: UUID "7150f343-1c54-43f7-9838-414724b93bda" are parents (predicate) of "6d7b0daf-2a6e-4fcc-9b7a-b83208fc4c5f" It looks not readable, though the programming algorithm is to solve the representation. > To take your example, > (Joe HAS employee status) SINCE 2012-10-28, it'd be something like: > > Subject: Joe > Predicate: /employment/status > Object: "6988a214-368c-40a2-9e51-8a7f5549de44" I think that /employment/status as predicate shall be simple relationship: Entry d7b270ba-65cb-46ba-9702-34e9bf102c47 says that: employment (UUID) has status (another UUID) and then Entry e65b3519-1009-4812-a15d-151f1627fdd9 says that: Joe (in reality UUID) has d7b270ba-65cb-46ba-9702-34e9bf102c47 Which would mean Joe has employment status. > Subject: "6988a214-368c-40a2-9e51-8a7f5549de44" > Predicate: /employment/start > Object: "2012-10-28" That for me would rather be: Entry 11e7bb1b-ebe0-46c4-8706-53cceeae7b76 says that: Employment (UUID like c9d17440-d165-49d3-b545-cd0dd0f9f4d6) has Start date (UUID) Then Entry 8186ab12-fbe6-40e5-b266-49d71350eb30 says that: e65b3519-1009-4812-a15d-151f1627fdd9 (Joe's employment status) is 2022-11-03 (but again as UUID) With or without UUID, or ID, one shall minimize the types of predicates, maximize the relationship definition, as that personally seem to be easier for artificial intelligence programming. Type shall not be defined strictly in the database, but rather be defined in triplets. Entry abac4ea3-c534-42d3-a3e4-921ce99e7c49 says that Start Date (11e7bb1b-ebe0-46c4-8706-53cceeae7b76) IS Date (11e7bb1b-ebe0-46c4-8706-53cceeae7b76) then: Date (11e7bb1b-ebe0-46c4-8706-53cceeae7b76) is Type (68ad33a3-c4f1-4781-8123-cefc31ba6de7) then you can easily get information like "list of types", types may have its "formats", one can see which information is "Date" or list employees by date. Now I am thinking it should be even simpler: subjectobjects should by something like: UUID Value triplets should be: UUID with predicate also being UUID relates to UUID Then UUID "Predicate" UUID "Is" UUID of "Is" relates to UUID of Predicate That way you get even predicates as objects/subjects If we use IDs as integers, it may get problematic. CREATE TABLE objects ( objects_uuid UUID PRIMARY KEY DEFAULT gen_random_uuid(), objects_datecreated TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, objects_datemodified TIMESTAMP, objects_usercreated TEXT NOT NULL DEFAULT current_user, objects_usermodified TEXT NOT NULL DEFAULT current_user, objects_name TEXT NOT NULL, objects_description TEXT ); With those 2 tables like "objects" and "triplets" one should be able to describe anything, and due to UUIDs, even anything across the databases, objects need not exist or be referencable in the single database, they can be anything in that case. Everything else on upper level remains for programmer to define its representations, inputs, editing, etc. -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2022-11-03 16:57 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-10-26 0:54 [ELPA] New package: triples Andrew Hyatt 2022-10-26 2:52 ` Stefan Monnier 2022-10-26 5:52 ` Stefan Kangas 2022-10-26 13:23 ` Andrew Hyatt 2022-10-26 13:29 ` Stefan Monnier 2022-10-27 5:15 ` Andrew Hyatt 2022-10-27 15:34 ` Stefan Monnier 2022-11-03 2:32 ` Andrew Hyatt 2022-10-27 3:36 ` Jean Louis 2022-10-27 5:19 ` Andrew Hyatt 2022-10-27 19:15 ` Jean Louis 2022-10-27 23:33 ` Jean Louis 2022-11-03 2:37 ` Andrew Hyatt 2022-11-03 16:57 ` Jean Louis
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).