Arquisoft / lomapSpec

Common specification for LoMap apps
MIT License
3 stars 0 forks source link

Final specification for LoMap using JSON #4

Closed gitblanc closed 1 year ago

gitblanc commented 1 year ago

Another question I want to pose is the interoperability of the application. I know there is an issue opened but I think it's a bit difuse on what the specification may be. I've been watching that most of groups (that have pods interaction) instead of using RDF or JSONld format, use simply JSON, so I want to know if this is going to be one of the main specifications or someone is working well with anotherone.

For the JSON specification: I want to declare a standard attributes list for each marker added to the pod, so then each group can get the list of markers of another person (who is a friend or known person) and there will be no trouble between those two different apps. I propose this: Attributes
name
description
lat
lng
comments
pictures
review score

I want to make some declarations according to the pictures of the pod:

FdezAriasSara commented 1 year ago

For the attributes , my group was planning to add another one called rating because of the following requirement in the assigment image

Comments would be like a nested set of comment objects from other users or the user that owns the pod where the location itself it's stored, right?

regarding the images: I think the best way is to store it in the own pod and then reference the unique URL in the json as said here , that way we would not have to share data with third parties and we would be taking advantage of already existing functionality

gitblanc commented 1 year ago

I added a review scores field fo the JSON, and like you say, comments are going to be an array of comments. According to the images I think is the easiest idea for everyone!

FdezAriasSara commented 1 year ago

by the way , how would the comment structure be?

Are comments plain-text only or is it possible to add images to them too ? for the structure i would suggest something like

     "comments":[
                    {
                    "author":"webId of the person who comments",
                    "comment":"comment contents",
                     "date": "timestamp of the moment the comment was submitted"
            }
                  (..)
                 ]

Also for review scores, I would name the attribute with a singular noun like score , rating... or reviewScore so nobody thinks it's an array of scores.

regarding names. I would use only lowercase and no spaces, camel case if we want to use more than one word for example in reviewScores.

SORRY, another thing, i think we would need another field, category and for that agree to stablish a set of categories for all groups that want theit apps to be compatible. Also i think that adding timestamps is easy and could be useful in case anyone wants to display the time

with all that, my proposal would be

{
    "locations":[
        {
            "name":"Parque de invierno",
                         "category":"park"
            "latitude":"43.35302550278352",
            "longitude":"-5.849442050492078",
            "description":"A beautiful place I found when i went for a walk",
            "comments":[
                                         {
                                      "author":"webId of the person who comments",
                                      "comment":"I've been there with my dog !",
                                       "date": "1679832611",//timesamp of the comment
                          },
                            (..more comments)
                           ]
            "reviewScore":"",
            "date": "timestamp of the time the user placed the pin/landmark..."
        }
gitblanc commented 1 year ago

I think that's the best structure for the json. Anyone has another idea or likes this one?

DavidGonzalezFernandez commented 1 year ago

Even though we might not need to make any further changes to our JSON specification, I believe it's important that we keep track of its version. Should we update the specification, this version number will help us avoid any confusion or errors in the future and maintain backward compatibility.

To add a version number to the JSON specification, I'd suggest including a new field "version" at the top level of the JSON object. The value of this field can be a string or a number that represents the version number of the specification.

{   
    "version": "1.0",   
    "locations": []   
}

I think the lastest structure proposed is appropriate. I believe we also need to agree on some restrictions regarding what will be stored inside each attribute. I propose the following:

Finally we should agree on which attributes can be left empty and which ones are compulsory. To my belief, the only critical information our apps will need is:

In my opinion, the rest should remain optional and could be left empty by the user.

aaronof17 commented 1 year ago

There are only two things that i should change:

gitblanc commented 1 year ago

I think that the extra-rules you are proposing are correct. I'll implementate them as soon as possible.

gitblanc commented 1 year ago

I also want to know where are we going to store the json. In my example, I created a folder on the user's pod root directory called justforfriends. This directory has specific agent persmissions that allows all my friends to read, append, and write data on it. Do you think that are the correct permissions, or the name of the folder is correct?. If we store the JSON on the same directory each person of each group can use the app of any other group without any problems.

gitblanc commented 1 year ago

There are only two things that i should change:

  • I should add an id for locations
  • People will have more than one map, so we need to add an other maps array. The format in my opinion should be this.
{
"maps":[
        "id":"(generación aleatoria de carácteres)",
  "name":"Parque de invierno",
  "locations":[
      {
                        "id":"(generación aleatoria de carácteres)",
          "name":"Parque de invierno",
                         "category":"park"
          "latitude":"43.35302550278352",
          "longitude":"-5.849442050492078",
          "description":"A beautiful place I found when i went for a walk",
          "comments":[
                                         {
                                      "author":"webId of the person who comments",
                                      "comment":"I've been there with my dog !",
                                       "date": "1679832611",//timesamp of the comment
                        },
                            (..more comments)
                           ]
          "reviewScore":"",
          "date": "timestamp of the time the user placed the pin/landmark..."
      }

I do not think that we may need an array of maps inside the same JSON. I think that we can create separate JSONs for each map that the user creates. If we do this, we will improve efficiency on our app, because it's not the same processing 1 file of 300k lines rather than 3 files of 100k lines each one

Omitg24 commented 1 year ago

Yeah, i agree with what @gitblanc says, having a massive Json file could be worse for the efficiency of the app itself, so we should probably create separate JSONs.

About routes

Has anyone thought about how to implement routes? In case anyone wants to add them in the future, as I've said in the general issue, GeoRDF could be helpful for this idea, since it has an already defined element (line), and would work like this:

`

50,-0.2,100 54,3,442 59,2.56,0 ` So if we want to use this, we should probably be also using JSONLD, but, at this time of the development, do you think it would be easy to change the format of the files we are storing? I'm asking because I think we should decide the final format of the files as soon as possible. If you agree, I can create a separate issue just for this.
andrrsin commented 1 year ago

Hello, I agree with the attributes you have proposed. However ehat we are talking in the other issue is the fact that. JSON is not the standard for Solid pods, therefore this way we are not doing the solid way. For that we thought on rather than using RDfa, use the mix that is JSONld. This is a Solid compatible format which has the structure of a json but it's also rdf. Right now I can't show you an example of it but in few hours I can post an example of its syntax.

This is the way.

gitblanc commented 1 year ago

Hello, I agree with the attributes you have proposed. However ehat we are talking in the other issue is the fact that. JSON is not the standard for Solid pods, therefore this way we are not doing the solid way. For that we thought on rather than using RDfa, use the mix that is JSONld. This is a Solid compatible format which has the structure of a json but it's also rdf. Right now I can't show you an example of it but in few hours I can post an example of its syntax.

This is the way.

Of course you are right. BUT, as you said, no one has a good example of a structure in that specification. So once anybody has a good example of rdf or JSONld we could talk about it. Now some groups like mine, are working with pods in JSON and that is the main thing on this issue

gitblanc commented 1 year ago

I want to close this issue when we set a common directory for the json file. Do you like to store it in a folder called like this?

image

Tell em what you think

iimxinn commented 1 year ago

Hello @andrrsin , can you post the example that you have metioned? Thank you

andrrsin commented 1 year ago

@iimxinn I will upload a small example in the new issue related to the formats.

aaronof17 commented 1 year ago

I think that we need to add, a pictures array.

{
"maps":[
        "id":"(generación aleatoria de carácteres)",
    "name":"Parque de invierno",
    "locations":[
        {
                        "id":"(generación aleatoria de carácteres)",
            "name":"Parque de invierno",
                         "category":"park"
            "latitude":"43.35302550278352",
            "longitude":"-5.849442050492078",
            "description":"A beautiful place I found when i went for a walk",
            "comments":[
                                         {
                                      "author":"webId of the person who comments",
                                      "comment":"I've been there with my dog !",
                                       "date": "1679832611",//timesamp of the comment
                          },
                            (..more comments)
                           ],
            "reviewScore":[
                                         {
                                      "author":"webId of the person who do the review",
                                      "score":"5",
                                       "date": "1679832611",//timesamp of the comment
                          },
                            (..more reviews)
                           ],
                       "pictures":[
                                         {
                                      "author":"webId of the person who take the photo",
                                      "pictureURL":"pictures's URL",
                          },
                            (..more pictures)
                           ],
        }
gitblanc commented 1 year ago

I think that we need to add, a pictures array.

{
"maps":[
        "id":"(generación aleatoria de carácteres)",
  "name":"Parque de invierno",
  "locations":[
      {
                        "id":"(generación aleatoria de carácteres)",
          "name":"Parque de invierno",
                         "category":"park"
          "latitude":"43.35302550278352",
          "longitude":"-5.849442050492078",
          "description":"A beautiful place I found when i went for a walk",
          "comments":[
                                         {
                                      "author":"webId of the person who comments",
                                      "comment":"I've been there with my dog !",
                                       "date": "1679832611",//timesamp of the comment
                        },
                            (..more comments)
                           ],
          "reviewScores":[
                                         {
                                      "author":"webId of the person who do the review",
                                      "score":"5",
                                       "date": "1679832611",//timesamp of the comment
                        },
                            (..more reviews)
                           ],
                       "pictures":[
                                         {
                                      "author":"webId of the person who take the photo",
                                      "pictureURL":"pictures's URL",
                        },
                            (..more pictures)
                           ],
      }

Yes! We will need to add an array on the user's pod to store external links to the urls of the images of each location

uo282422 commented 1 year ago

Wouldn't it make more sense to put the rating as part of the comment? (as done in Google Maps: 1 comment + 1 rate= 1 review). That would associate the comment with a rate directly.

I think it is more logical. What do you think?

aaronof17 commented 1 year ago

I think we shoud add an author for map.

{
"maps":[
        "id":"(generación aleatoria de carácteres)",
    "name":"Parque de invierno",
        "author":"Paco",
    "locations":[
        {
                        "id":"(generación aleatoria de carácteres)",
            "name":"Parque de invierno",
                         "category":"park"
            "latitude":"43.35302550278352",
            "longitude":"-5.849442050492078",
            "description":"A beautiful place I found when i went for a walk",
            "comments":[
                                         {
                                      "author":"webId of the person who comments",
                                      "comment":"I've been there with my dog !",
                                       "date": "1679832611",//timesamp of the comment
                          },
                            (..more comments)
                           ],
            "reviewScore":[
                                         {
                                      "author":"webId of the person who do the review",
                                      "score":"5",
                                       "date": "1679832611",//timesamp of the comment
                          },
                            (..more reviews)
                           ],
                       "pictures":[
                                         {
                                      "author":"webId of the person who take the photo",
                                      "pictureURL":"pictures's URL",
                          },
                            (..more pictures)
                           ],
        }
gitblanc commented 1 year ago

Wouldn't it make more sense to put the rating as part of the comment? (as done in Google Maps: 1 comment + 1 rate= 1 review). That would associate the comment with a rate directly.

I think it is more logical. What do you think?

Not always that you add a comment you necessary have to add a score haven't you? I think that having separate arrays much be a better option just for separate functionality

gitblanc commented 1 year ago

I think we shoud add an author for map.

{
"maps":[
        "id":"(generación aleatoria de carácteres)",
  "name":"Parque de invierno",
        "author":"Paco",
  "locations":[
      {
                        "id":"(generación aleatoria de carácteres)",
          "name":"Parque de invierno",
                         "category":"park"
          "latitude":"43.35302550278352",
          "longitude":"-5.849442050492078",
          "description":"A beautiful place I found when i went for a walk",
          "comments":[
                                         {
                                      "author":"webId of the person who comments",
                                      "comment":"I've been there with my dog !",
                                       "date": "1679832611",//timesamp of the comment
                        },
                            (..more comments)
                           ],
          "reviewScore":[
                                         {
                                      "author":"webId of the person who do the review",
                                      "score":"5",
                                       "date": "1679832611",//timesamp of the comment
                        },
                            (..more reviews)
                           ],
                       "pictures":[
                                         {
                                      "author":"webId of the person who take the photo",
                                      "pictureURL":"pictures's URL",
                        },
                            (..more pictures)
                           ],
      }

Why? The author of the map is the pod owner isn't?

aaronof17 commented 1 year ago

yes is the owner but i think for friends map its easier add the owner. But if you have other implementation (like take straightaway friend name) you can add this on json and not use it.

gitblanc commented 1 year ago

Well, it's true that for people that realize optional requirements may be needed: Create multiple maps between groups of users (family maps, tourist groups, etc. )

So I think that is a good idea to add that field

gitblanc commented 1 year ago

CHECK THE LATEST VERSION OF THE JSON SPEC ON THE WIKI

https://github.com/Arquisoft/lomapSpec/wiki/Data-specification-with-format-JSON

uo282422 commented 1 year ago

yes is the owner but i think for friends map its easier add the owner. But if you have other implementation (like take straightaway friend name) you can add this on json and not use it.

I am agree.

Wouldn't it make more sense to put the rating as part of the comment? (as done in Google Maps: 1 comment + 1 rate= 1 review). That would associate the comment with a rate directly. I think it is more logical. What do you think?

Not always that you add a comment you necessary have to add a score haven't you? I think that having separate arrays much be a better option just for separate functionality

Well, in Google Maps it works like that as I said. Do not forget that we are talking about the way to save information, the implementation about allowing or not to comment without a rating it is your choice.

gitblanc commented 1 year ago

yes is the owner but i think for friends map its easier add the owner. But if you have other implementation (like take straightaway friend name) you can add this on json and not use it.

I am agree.

Wouldn't it make more sense to put the rating as part of the comment? (as done in Google Maps: 1 comment + 1 rate= 1 review). That would associate the comment with a rate directly. I think it is more logical. What do you think?

Not always that you add a comment you necessary have to add a score haven't you? I think that having separate arrays much be a better option just for separate functionality

Well, in Google Maps it works like that as I said. Do not forget that we are talking about the way to save information, the implementation about allowing or not to comment without a rating it is your choice.

I know that we are talking about the data storage, but this decision may change some team's functionality and i don't know what do you want to save if the user doesn't add a review (i don't think that you have to enforce him/her to vote, so you save a null or what?). To add this change let's wait for other teams decision. Do you like it?

Please, other teams, do you like to change the reviewScores instead of using an array to save them in the comments array? Something like this:

"comments":[
          {
            "author":"webId of the person who comments",
            "comment":"I've been there with my dog !",
            "score": "0-5" (if the user didn't score what happens?)
            "date": "1679832611",//timestamp of the comment
          },
          (..more comments)
         ]