- From: Rumph, Frens Jan <mail@frensjan.nl>
- Date: Thu, 10 Jun 2021 16:50:24 +0200
- To: Martynas Jusevičius <martynas@atomgraph.com>
- Cc: semantic-web@w3.org
- Message-ID: <CAH3f1B-Nhfb0rvifmVUPCPRJ23wam=HDee0N-8HL9mNpv6JNuQ@mail.gmail.com>
The syntactic sugar list in turtle and sparql is pretty nice. It's the fact that the RDF abstract model has no real support for lists. Querying is a pain if you ask me. The context I'm in doesn't involve a lot of manual writing of RDF data. I was hoping to find a way that hurts my brain a little less. And I would really like to find a way to ensure that datasets won't contain malformed lists like: :frens :name _:n1 . _:n1 rdf:first "Frens" . _:n1 rdf:first "Jan" . _:n1 rdf:rest "de Vries" . The systems I'm targeting won't typically consume manually generated RDF, but there are API's for external users in play ... Perhaps I'll give SHACL a go with dash#ListShape <http://datashapes.org/dash#ListShape>. On Thu, Jun 10, 2021 at 12:20 PM Martynas Jusevičius <martynas@atomgraph.com> wrote: > Why is the list syntax ( ) not satisfactofy? > > On Thu, 10 Jun 2021 at 12.07, Rumph, Frens Jan <mail@frensjan.nl> wrote: > >> Dear readers, >> >> I am investigating transitioning an application to use RDF. One roadblock >> is how this application models names of persons. It supports >> straight-forward full names as a single string, but also supports >> decomposed names, e.g. person X has given name *Frens* followed by a second >> given name *Jan* followed by the family name *Rumph*. >> >> Note that this is a crosspost of >> https://stackoverflow.com/questions/65982459/rdf-modelling-of-list-of-name-elements >> <https://stackoverflow..com/questions/65982459/rdf-modelling-of-list-of-name-elements>. >> I hope to get some more >> >> The data structure is something like: >> >> ```java >> enum Role { >> ... >> GIVEN_NAME, >> FAMILY_NAME, >> ... >> } >> >> record NameElement(role: Role, value: String) {} >> >> record AnnotatedName(NameElement... elements) {} >> ``` >> >> in order to be instantiated like: >> >> ```java >> var name = new AnnotatedName( >> new NameElement(GIVEN_NAME, "Frens"), >> new NameElement(GIVEN_NAME, "Jan"), >> new NameElement(FAMILY_NAME, "de Vries") >> ); >> ``` >> >> This allows reconstruction of the name into a string while at the same >> time expressing the components of the name. So it captures the roles of the >> elements of a name (e.g. given names, family names) *as well as* their >> order (given names aren't first everywhere). Also, it allows expressing >> multiple names. E.g. in multiple languages / scripts. Or even aliases used >> in different areas of the world. >> >> I have toyed around with some RDF constructs, but none are really >> satisfactory: >> >> ```turtle >> # list of strings misusing data types as tags >> :frens :name ( "Frens"^^:givenName "Jan"^^:givenName "de >> Vries"^^:familyName ) . >> >> # list of blank nodes >> :frens :name ( [ :givenName "Frens" ] >> [ :givenName "Jan" ] >> [ :familyName "de Vries" ] ) . >> >> # single blank node with unordered 'elements' >> :frens :name [ a :AnnotatedPersonName ; >> :fullName "Frens Jan de Vries" ; >> :givenName "Frens" ; >> :givenName "Jan" ; >> :familyName "de Vries" ] . >> ``` >> >> --- >> >> **Existing ontologies for HD names?** >> Is there an existing ontology that covers such 'high fidelity'? FOAF and >> vcard have some relevant properties, but aren't able to capture this level >> of semantics. >> >> **Lists?** One major 'blocker' in migrating this approach to RDF is the >> notion of order that is used. If at all possible, I'd like to stay away >> from the List / Container swamp in RDF land ... >> >> I'd be grateful for any thoughts on the matter! >> >> Best regards, >> Frens Jan >> >
Received on Thursday, 10 June 2021 14:52:36 UTC