Re: [SMW-devel] Maintain order of property values
Hi Markus, thanks for the quick response. I was considering both of your options already but wanted to make sure that I did not miss any straight forward solution. So potential over engineering becomes engineering now ;) THX, michael On 2020-09-24 13:16, Markus Krötzsch wrote: Hi Michael, The data model of SMW never considered "insertion order" as a piece of information that should be recorded. In fact, a normal SQL RDBMs like MariaDB has no obligation to return tuples in a specific order unless there is an ordering clause in the query. Same for SPARQL. Relying on result orders to be the same "as in the table" is generally not robust. To store and retrieve ordered lists in SMW, there are several options: (1) Use sub-objects instead of plain values and store the index of each entry with the value. Then sort by this value when retrieving data. (2) Store the unordered values as you do now, and in addition store a string of the ordered values (comma-separated) in another property. You can use page variables to build such a string and #arraymap to decompose it (if you want to do more than just display this string). I have worked with both solutions in practice. For things like lecture dates, we use (1) (though we use the date rather than the insertion order as an ordering criterion there). For things like author lists (where order matters), we use (2). Best regards, Markus On 24/09/2020 12:37, Michael Erdmann wrote: Dear Community, is there a way to maintain the order of attribute values, e.g. in ASK queries. By "maintain" I mean to keep the order of the values as they had been added in the wiki page's annotations. Currently I get this: Test_Page contains: [[MyProperty::Page1]] [[MyProperty::Page2]] [[MyProperty::Page3]] Another_Page contains this query: {{#ask: [[Test_Page]] | ?MyProperty | format = ul }} and shows this result Test_Page (MyProperty: Page1, Page2, Page3) Changing the order in Test_Page to: [[MyProperty::Page2]] [[MyProperty::Page3]] [[MyProperty::Page1]] still results in exactly the same query result, i.e. Page1 at the beginnig of the list. Is there a way to accomplish what I want in Wiki text? If there is a way to accomplish this in PHP that is also fine for me. I investigated a bit already and found, that $data = StoreFactory::getStore()->getSemanticData( $myPage ); $values = $data->getPropertyValues( $myProperty ); already returns the values in a constant order (page-IDs?). Is the DB maybe not prepared to maintain this information? BTW. I am using MW1.31 and SMW3.0.2. THX, michael -- Dr. Michael Erdmann |erdm...@diqa-pm.com | +49 151 6140 1790 DIQA Projektmanagement GmbH | An der RaumFabrik 33c | 76227 Karlsruhe Handelsregister: Amtsgericht Mannheim HRB 715454 USt-IdNr.: DE283037270 Geschäftsführer: Dr. Michael Erdmann, Dipl.-Wirtsch.-Inf. Daniel Hansch This email may contain confidential information. If you are not the intended recipient please notify the sender immediately and delete this email. Any unauthorized copying, disclosure or distribution of this email is strictly forbidden. ___ Semediawiki-devel mailing list Semediawiki-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/semediawiki-devel -- Dr. Michael Erdmann | erdm...@diqa-pm.com | +49 151 6140 1790 DIQA Projektmanagement GmbH | An der RaumFabrik 33c | 76227 Karlsruhe Handelsregister: Amtsgericht Mannheim HRB 715454 USt-IdNr.: DE283037270 Geschäftsführer: Dr. Michael Erdmann, Dipl.-Wirtsch.-Inf. Daniel Hansch This email may contain confidential information. If you are not the intended recipient please notify the sender immediately and delete this email. Any unauthorized copying, disclosure or distribution of this email is strictly forbidden. ___ Semediawiki-devel mailing list Semediawiki-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/semediawiki-devel
Re: [SMW-devel] Maintain order of property values
Hi Michael, The data model of SMW never considered "insertion order" as a piece of information that should be recorded. In fact, a normal SQL RDBMs like MariaDB has no obligation to return tuples in a specific order unless there is an ordering clause in the query. Same for SPARQL. Relying on result orders to be the same "as in the table" is generally not robust. To store and retrieve ordered lists in SMW, there are several options: (1) Use sub-objects instead of plain values and store the index of each entry with the value. Then sort by this value when retrieving data. (2) Store the unordered values as you do now, and in addition store a string of the ordered values (comma-separated) in another property. You can use page variables to build such a string and #arraymap to decompose it (if you want to do more than just display this string). I have worked with both solutions in practice. For things like lecture dates, we use (1) (though we use the date rather than the insertion order as an ordering criterion there). For things like author lists (where order matters), we use (2). Best regards, Markus On 24/09/2020 12:37, Michael Erdmann wrote: Dear Community, is there a way to maintain the order of attribute values, e.g. in ASK queries. By "maintain" I mean to keep the order of the values as they had been added in the wiki page's annotations. Currently I get this: Test_Page contains: [[MyProperty::Page1]] [[MyProperty::Page2]] [[MyProperty::Page3]] Another_Page contains this query: {{#ask: [[Test_Page]] | ?MyProperty | format = ul }} and shows this result Test_Page (MyProperty: Page1, Page2, Page3) Changing the order in Test_Page to: [[MyProperty::Page2]] [[MyProperty::Page3]] [[MyProperty::Page1]] still results in exactly the same query result, i.e. Page1 at the beginnig of the list. Is there a way to accomplish what I want in Wiki text? If there is a way to accomplish this in PHP that is also fine for me. I investigated a bit already and found, that $data = StoreFactory::getStore()->getSemanticData( $myPage ); $values = $data->getPropertyValues( $myProperty ); already returns the values in a constant order (page-IDs?). Is the DB maybe not prepared to maintain this information? BTW. I am using MW1.31 and SMW3.0.2. THX, michael -- Dr. Michael Erdmann |erdm...@diqa-pm.com| +49 151 6140 1790 DIQA Projektmanagement GmbH | An der RaumFabrik 33c | 76227 Karlsruhe Handelsregister: Amtsgericht Mannheim HRB 715454 USt-IdNr.: DE283037270 Geschäftsführer: Dr. Michael Erdmann, Dipl.-Wirtsch.-Inf. Daniel Hansch This email may contain confidential information. If you are not the intended recipient please notify the sender immediately and delete this email. Any unauthorized copying, disclosure or distribution of this email is strictly forbidden. ___ Semediawiki-devel mailing list Semediawiki-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/semediawiki-devel ___ Semediawiki-devel mailing list Semediawiki-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/semediawiki-devel
[SMW-devel] Maintain order of property values
Dear Community, is there a way to maintain the order of attribute values, e.g. in ASK queries. By "maintain" I mean to keep the order of the values as they had been added in the wiki page's annotations. Currently I get this: Test_Page contains: [[MyProperty::Page1]] [[MyProperty::Page2]] [[MyProperty::Page3]] Another_Page contains this query: {{#ask: [[Test_Page]] | ?MyProperty | format = ul }} and shows this result Test_Page (MyProperty: Page1, Page2, Page3) Changing the order in Test_Page to: [[MyProperty::Page2]] [[MyProperty::Page3]] [[MyProperty::Page1]] still results in exactly the same query result, i.e. Page1 at the beginnig of the list. Is there a way to accomplish what I want in Wiki text? If there is a way to accomplish this in PHP that is also fine for me. I investigated a bit already and found, that $data = StoreFactory::getStore()->getSemanticData( $myPage ); $values = $data->getPropertyValues( $myProperty ); already returns the values in a constant order (page-IDs?). Is the DB maybe not prepared to maintain this information? BTW. I am using MW1.31 and SMW3.0.2. THX, michael -- Dr. Michael Erdmann | erdm...@diqa-pm.com | +49 151 6140 1790 DIQA Projektmanagement GmbH | An der RaumFabrik 33c | 76227 Karlsruhe Handelsregister: Amtsgericht Mannheim HRB 715454 USt-IdNr.: DE283037270 Geschäftsführer: Dr. Michael Erdmann, Dipl.-Wirtsch.-Inf. Daniel Hansch This email may contain confidential information. If you are not the intended recipient please notify the sender immediately and delete this email. Any unauthorized copying, disclosure or distribution of this email is strictly forbidden. ___ Semediawiki-devel mailing list Semediawiki-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/semediawiki-devel