Re: Templates, Generics, and Parametric Polymorphism in Semantic Web Languages

For read-write Linked Data mapping to SPARQL, based on URI patterns and
with parameter support, you can take a look at Linked Data Templates.
https://atomgraph.github.io/Linked-Data-Templates/

On Thu, 15 Dec 2022 at 02.47, Adam Sobieski <adamsobieski@hotmail.com>
wrote:

> When reading a traditional function (e.g., C/C++/C#/Java/JavaScript), the
> statements in “{}” brackets are to be interpreted as occurring in a
> sequence. When reading a graph, the contents of “{}” brackets are to be
> interpreted as a set. Accordingly, the concept of a function which returns
> a graph faces an uphill battle in terms of syntactical clarity when using
> “{}” brackets. I will think about clearer examples.
>
> Here are some sketches of templates, macros, and functions which utilize
> the “{}” brackets to produce sets of nested contents.
>
>
>
> @prefix list:  <http://www.w3.org/2000/10/swap/list#> .
>
> @prefix log:   <http://www.w3.org/2000/10/swap/log#> .
>
> @prefix ex:    <http://example.org/#> .
>
> @prefix graph: <http://www.w3.org/2000/10/swap/graph#> .
>
> @prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>
>
>
> ex:ng??(?x ?y) :graph
>
> {
>
>     ?x rdf:type foaf:Person .
>
>     ?y rdf:type foaf:Person .
>
>     ?x foaf:knows ?y .
>
>     ?y foaf:knows ?x .
>
> } .
>
>
>
> {
>
>     ex:ng??(ex:Alice ex:Bob) :graph ?graph .
>
>     ?graph graph:member ?stmt .
>
>     ?stmt log:equalTo { ?s ?p ?o } .
>
> }
>
> =>
>
> {
>
>     ?s ?p ?o .
>
> } .
>
>
>
> The intended semantics of that “ex:ng??(?x ?y)” syntax is that, for each
> valid argument for ?x and ?y, a named graph is provided with a string-based
> pattern for its URI. That is, wherever the URI-pattern is utilized, a named
> graph is provided with contents as described, in the above case, four
> statements.
>
>
>
> When I look at that sketch, I want to extend it to include guards for the
> input parameters, as if it were a function. I want to express that ?x and
> ?y must be rdf:type of foaf:Person and distinct individuals for the
> arguments to be valid. One complication is that there is a matter of "in
> which graph or dataset(s) must these conditions hold"?
>
> Maybe we could add a named graph parameter into the mix? With a URI-based
> named graph, we could use a syntax like “ex:ng??(?kb ?x ?y)”.
>
>
>
> @prefix list:  <http://www.w3.org/2000/10/swap/list#> .
>
> @prefix log:   <http://www.w3.org/2000/10/swap/log#> .
>
> @prefix ex:    <http://example.org/#> .
>
> @prefix graph: <http://www.w3.org/2000/10/swap/graph#> .
>
> @prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>
> @prefix owl:   <http://www.w3.org/2002/07/owl#> .
>
>
>
> ex:ng??(?kb ?x ?y) :graph
>
> {
>
>     @requires ?kb holds { ?x rdf:type foaf:Person } .
>
>     @requires ?kb holds { ?y rdf:type foaf:Person } .
>
>     @requires ?kb holds { ?x owl:differentFrom ?y } .
>
>     ?x foaf:knows ?y .
>
>     ?y foaf:knows ?x .
>
> } .
>
>
>
> {
>
>     ex:ng??(:this ex:Alice ex:Bob) :graph ?graph .
>
>     ?graph graph:member ?stmt .
>
>     ?stmt log:equalTo { ?s ?p ?o } .
>
> }
>
> =>
>
> {
>
>     ?s ?p ?o .
>
> } .
>
>
>
> Could those three "@requires" be a one-liner:
>
>
> @prefix list:  <http://www.w3.org/2000/10/swap/list#> .
>
> @prefix log:   <http://www.w3.org/2000/10/swap/log#> .
>
> @prefix ex:    <http://example.org/#> .
>
> @prefix graph: <http://www.w3.org/2000/10/swap/graph#> .
>
> @prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>
> @prefix owl:   <http://www.w3.org/2002/07/owl#> .
>
>
>
> ex:ng??(?kb ?x ?y) :graph
>
> {
>
>     @requires ?kb holds { ?x rdf:type foaf:Person . ?y rdf:type
> foaf:Person . ?x owl:differentFrom ?y . } .
>
>     ?x foaf:knows ?y .
>
>     ?y foaf:knows ?x .
>
> } .
>
>
>
> {
>
>     ex:ng??(:this ex:Alice ex:Bob) :graph ?graph .
>
>     ?graph graph:member ?stmt .
>
>     ?stmt log:equalTo { ?s ?p ?o } .
>
> }
>
> =>
>
> {
>
>     ?s ?p ?o .
>
> } .
>
>
> With something like those sketches, above, I’m hoping to express that the
> arguments provided must be as indicated, in this case two distinct people,
> as holding in a provided knowledgebase (a named graph or SPARQL endpoint,
> ?kb). The described graph-based template/macro/function would then produce
> a graph containing two statements: “?x foaf:knows ?y” and “?y foaf:knows
> ?x”.
>
> It’s unclear what would or should happen if a template/macro/function were
> “invoked” with invalid arguments. Maybe it would or should, then, return an
> empty graph and/or maybe an error or exception would or should be thrown?
>
> What is the construct in N3 with its variables? I think of it as a
> template/macro/function. The current approach to invocation involves a
> URI-based pattern which resembles binding arguments to parameters to invoke
> the template/macro/function.
>
> What are the values which are bound to the variables? Thus far, I am using
> URIs (xsd:anyURI) in the sketches. In theory, the graph-based
> templates/macros/functions should work with built-in datatypes like strings
> (xsd:string) or numerical types (e.g., xsd:integer). So, the actual values
> bound to the variables are, thus far, URIs.
>
> Hopefully this content, above, clarifies what I'm hoping to express in the
> sketches while also introducing some new possibilities.
>
>
>
> Also, while I’m excited about the mapping which provides a means of
> accessing and utilizing query string portions of URIs, and about its
> potential uses with graph-based templates/macros/functions, one potential
> limitation of the approach is that there exists an upper limit on URI
> string length (2048 characters?).
>
>
>
>
>
> Best regards,
>
> Adam
>
> ------------------------------
> *From:* David Booth <david@dbooth.org>
> *Sent:* Wednesday, December 14, 2022 4:58 AM
> *To:* Adam Sobieski <adamsobieski@hotmail.com>; semantic-web@w3.org <
> semantic-web@w3.org>
> *Subject:* Re: Templates, Generics, and Parametric Polymorphism in
> Semantic Web Languages
>
> Hi Adam,
>
> I am not yet understanding how to interpret the examples you have given.
>   To understand your suggested template syntax, I need an example to
> clearly differentiate these 4-5 things:
>
>    1. What is template prior to expansion?  (Think of this as a
>       function.)
>    2. Which parts of that template represent the variables
>       that will be replaced with actual data during template expansion?
>       (Think of these as the formal parameters to that function.)
>    3. For each of those variables, what is the actual value
>       to be substituted into the template, in place of that variable?
>       (Think of these as the actual parameters to that function.)
>    4. What is the final result of template expansion, after values
>       have been substituted in for the variables?  (Think of these
>       as the function result.)
>    5. If you are also showing a syntax for invoking template expansion,
>       then what part of the example is illustrating that?  (Think of this
>       as showing the function invocation.)  The syntax needs to:
>       a. identify the template to be expanded (like identifying the
>          function to be called); and
>       b. bind an actual value to each template variable (like binding
>          an actual parameter to each formal parameter).
>
> I assume that your example included some or all of the above, but it
> isn't easy for me to see which bits are which.  Could you clarify please?
>
> Thanks,
> David Booth
>
> On 12/14/22 00:12, Adam Sobieski wrote:
> > Existing query-based solutions, e.g., SPIN, could be of use for
> > expressing the preconditions and effects of operators in planning
> > domains. Beyond the processing and inferencing functionalities of
> > solutions for templates and rules, there is the comparative
> > expressiveness of the templates and rules to consider, and also the ease
> > of consuming and inspecting the templates and rules to consider for each
> > solution. I am thinking about how convenient it can be made for
> > developers to utilize a more expressive planning domain definition
> > language / ontology and its resultant APIs and object models while
> > developing next-generation planning algorithms and solvers.
> >
> > With respect to the proposed mapping for Semantic Web languages which
> > enables the access and use of URIs' query string portions, I recently
> > changed the syntax in the sketches and examples from “^^” (which had
> > some complications) to “??” (which I hope reminds developers of the URI
> > query string).
> >
> > Understanding that "ex:ng??(ex:Alice ex:Bob)" maps to a URI, here is an
> > updated example of what a /named graph template/in N3 could resemble:
> >
> >
> > @prefix list:<http://www.w3.org/2000/10/swap/list#> .
> >
> > @prefix log:<http://www.w3.org/2000/10/swap/log#> .
> >
> > @prefix ex:<http://example.org/#> .
> >
> > @prefix graph: <http://www.w3.org/2000/10/swap/graph#> .
> >
> > ex:ng??(?x ?y) :graph
> >
> > {
> >
> > ?x rdf:type foaf:Person .
> >
> > ?y rdf:type foaf:Person .
> >
> > ?x foaf:knows ?y .
> >
> > ?y foaf:knows ?x .
> >
> > } .
> >
> > {
> >
> > ex:ng??(ex:Alice ex:Bob) :graph ?graph .
> >
> > ?graph graph:member ?stmt .
> >
> > ?stmt log:equalTo { ?s ?p ?o } .
> >
> > }
> >
> > =>
> >
> > {
> >
> > ?s ?p ?o .
> >
> > } .
> >
> >
> > I am brainstorming about other new uses of and scenarios for the mapping.
> >
> >
> >
> > Best regards,
> >
> > Adam
> >
> >
> > ------------------------------------------------------------------------
> > *From:* David Booth <david@dbooth.org>
> > *Sent:* Tuesday, December 13, 2022 5:16 PM
> > *To:* semantic-web@w3.org <semantic-web@w3.org>
> > *Subject:* Re: Templates, Generics, and Parametric Polymorphism in
> > Semantic Web Languages
> > Since every rules language (including N3) in essence defines a template
> > language for the rules, I think it's worth asking: why are the existing
> > template facilities inadequate for my use cases, and how might they be
> > extended to handle them?  If we can improve them to be more flexible,
> > that may be better than adding more bandaids.
> >
> > Bear in mind that SPARQL is also a commonly used "rules language", using
> > either CONSTRUCT or INSERT.  ShExMap also acts as a rules language (and
> > template language), as does SPIN.
> >
> > David Booth
> >
> > On 12/13/22 16:41, Adam Sobieski wrote:
> >> Martin,
> >> All,
> >> Hello. I updated the Automated Planning and Scheduling Community
> Group's
> >> wiki to showcase /Reasonable Ontology Templates (OTTR)/:
> >> https://github.com/w3c-cg/planning/wiki/Ontologies
> > <https://github.com/w3c-cg/planning/wiki/Ontologies>
> >> <https://github.com/w3c-cg/planning/wiki/Ontologies
> > <https://github.com/w3c-cg/planning/wiki/Ontologies>> .
> >> I am also interested in computation and Semantic Web technologies. I am
> >> thinking about inspectable, reflectable, reifiable, semantic templates,
> >> macros, and functions (see also: the Function Ontology (FnO)). It could
> >> be that the reification of language-integrated semantic templates and
> >> functions would involve OTTR and/or FnO models.
> >> With respect to automated planning and scheduling, planning domains'
> >> operators' preconditions and effects can be represented as inspectable,
> >> reflectable, reifiable functions using Semantic Web technologies (in
> >> particular using n-ary semantic predicate calculus expressions).
> >>
> >> Semantic templating can be of use for implementing generic types and
> >> functions, e.g,. "Widget<T>" and "function<T>(x, y, z)".
> >>
> >> I am thinking about how best to represent conditional branching logic
> in
> >> semantic templates. These scenarios interest me in the contexts of
> >> planning domains and computer lexicons. Also interesting, with respect
> >> to OTTR, are patterns and compression.
> >> Utilizing the mapping I shared, we could do new things. While I'm still
> >> thinking about the specific syntax (e.g., "^^" or "??"), we could now
> >> access and utilize the query string portions of URIs in Semantic Web
> >> languages. I'm arguing that this would be generally useful and that it
> >> would specifically benefit the technologies under discussion.
> >> Best regards,
> >> Adam
> >>
> >> ------------------------------------------------------------------------
> >> *From:* Martin Georg Skjæveland <martige@ifi.uio.no>
> >> *Sent:* Tuesday, December 13, 2022 8:23 AM
> >> *To:* william.vanwoensel@gmail.com <william.vanwoensel@gmail.com>;
> >> adamsobieski@hotmail.com <adamsobieski@hotmail.com>
> >> *Cc:* doerthe.arndt@tu-dresden.de <doerthe.arndt@tu-dresden.de>;
> >> semantic-web@w3.org <semantic-web@w3.org>
> >> *Subject:* Re: Templates, Generics, and Parametric Polymorphism in
> >> Semantic Web Languages
> >> Hi,
> >>
> >> there seems to be enough keyword matches to allow me to mention a
> >> project that I have been working on, Reasonable Ontology Templates
> >> (OTTR), see http://ottr.xyz <http://ottr.xyz> <http://ottr.xyz <
> http://ottr.xyz>>.
> >>
> >> OTTR is a template language for in particular RDF. It does not have all
> >> the features you mention, its primary feature is to be able to
> >> compactly represent complex statements as template instances that are
> >> expanded via a simple recursive template expansion mechanim to plain
> >> RDF.
> >>
> >> Example; (using a modelling pattern from the Pizza ontology), this OTTR
> >> template instance
> >>
> >> [ ottr:of      <http://tpl.ottr.xyz/p/pizza/0.2/NamedPizza
> >> <http://tpl.ottr.xyz/p/pizza/0.2/NamedPizza
> > <http://tpl.ottr.xyz/p/pizza/0.2/NamedPizza>>> ;
> >>    ottr:values (x:argument1 x:argument2 (x:argument3-1 x:argument3-2))
> >> ]
> >>
> >> expands to:
> >>
> >> x:argument3-1  a  owl:Class .
> >>
> >> pz:hasTopping  a  owl:ObjectProperty .
> >>
> >> x:argument1  rdfs:subClassOf  pz:NamedPizza ;
> >>          rdfs:subClassOf  [ a                   owl:Restriction ;
> >>                             owl:onProperty      pz:hasTopping ;
> >>                             owl:someValuesFrom  x:argument3-1
> >>                           ] ;
> >>          rdfs:subClassOf  [ a                   owl:Restriction ;
> >>                             owl:onProperty      pz:hasTopping ;
> >>                             owl:someValuesFrom  x:argument3-2
> >>                           ] ;
> >>          rdfs:subClassOf  [ a               owl:Restriction ;
> >>                             owl:hasValue    x:argument2 ;
> >>                             owl:onProperty  pz:hasCountryOfOrigin
> >>                           ] ;
> >>          rdfs:subClassOf  [ a                  owl:Restriction ;
> >>                             owl:allValuesFrom  [ a            owl:Class
> >> ;
> >>                                                  owl:unionOf  (
> >> x:argument3-1 x:argument3-2 )
> >>                                                ] ;
> >>                             owl:onProperty     pz:hasTopping
> >>                           ] .
> >>
> >> x:argument3-2  a  owl:Class .
> >>
> >> pz:hasCountryOfOrigin
> >>          a       owl:ObjectProperty .
> >>
> >>
> >> This example is found here: https://tpl.ottr.xyz/p/pizza/0.2/NamedPizza
> > <https://tpl.ottr.xyz/p/pizza/0.2/NamedPizza>
> >> <https://tpl.ottr.xyz/p/pizza/0.2/NamedPizza
> > <https://tpl.ottr.xyz/p/pizza/0.2/NamedPizza>>
> >> More templates here: https://tpl.ottr.xyz/ <https://tpl.ottr.xyz/> <
> https://tpl.ottr.xyz/
> > <https://tpl.ottr.xyz/>>
> >> Playground here: https://weblutra.ottr.xyz/ <https://weblutra.ottr.xyz/>
>
> > <https://weblutra.ottr.xyz/ <https://weblutra.ottr.xyz/>>
> >>
> >> Cheers,
> >> Martin
> >>
> >> On Tue, 2022-12-13 at 12:59 +0000, Adam Sobieski wrote:
> >>> William,
> >>> All,
> >>>
> >>> Thank you. This proposed language feature is generally useful and, in
> >>> my opinion, merits consideration across Semantic Web languages (e.g.,
> >>> N3, Turtle, TriG). I'm working on more concrete arguments
> >>> here: https://github.com/w3c-cg/planning/discussions/27
> > <https://github.com/w3c-cg/planning/discussions/27>
> >> <https://github.com/w3c-cg/planning/discussions/27
> > <https://github.com/w3c-cg/planning/discussions/27>> .
> >>>
> >>> Some clarifying key points:
> >>>    1. There exists a bidirectional mapping between the proposed
> >>> syntax and URIs/URLs with their query string portions utilized.
> >>>    2. These URIs with their query string portions utilized can be
> >>> used wherever a URI node or named graph can, across Semantic Web
> >>> languages.
> >>>
> >>> Expanding on point 1, the following:
> >>>
> >>> ex:Widget^^(ex:Foo ex:Foo2 ex:Foo3)
> >>> maps with:
> >>>
> >>>
> http://example.org/?T[]=http%3A%2F%2Fexample.org%2F%23Foo&T[]=http%3A%2F%2Fexample.org%2F%23Foo2&T[]=http%3A%2F%2Fexample.org%2F%23Foo3#Widget
> <
> http://example.org/?T[]=http%3A%2F%2Fexample.org%2F%23Foo&T[]=http%3A%2F%2Fexample.org%2F%23Foo2&T[]=http%3A%2F%2Fexample.org%2F%23Foo3#Widget>
> <
> http://example.org/?T[]=http%3A%2F%2Fexample.org%2F%23Foo&T[]=http%3A%2F%2Fexample.org%2F%23Foo2&T[]=http%3A%2F%2Fexample.org%2F%23Foo3#Widget
> <
> http://example.org/?T[]=http%3A%2F%2Fexample.org%2F%23Foo&T[]=http%3A%2F%2Fexample.org%2F%23Foo2&T[]=http%3A%2F%2Fexample.org%2F%23Foo3#Widget
> >>
> >>> and the following:
> >>>
> >>> ex:Widget^^(("p1" ex:Foo) ("p2" ex:Foo2) ("p3" ex:Foo3))
> >>> maps with:
> >>>
> >>>
> http://example.org?p1=http%3A%2F%2Fexample.org%2F%23Foo&p2=http%3A%2F%2Fexample.org%2F%23Foo2&p3=http%3A%2F%2Fexample.org%2F%23Foo3#Widget
> <
> http://example.org?p1=http%3A%2F%2Fexample.org%2F%23Foo&p2=http%3A%2F%2Fexample.org%2F%23Foo2&p3=http%3A%2F%2Fexample.org%2F%23Foo3#Widget>
> <
> http://example.org?p1=http%3A%2F%2Fexample.org%2F%23Foo&p2=http%3A%2F%2Fexample.org%2F%23Foo2&p3=http%3A%2F%2Fexample.org%2F%23Foo3#Widget
> <
> http://example.org?p1=http%3A%2F%2Fexample.org%2F%23Foo&p2=http%3A%2F%2Fexample.org%2F%23Foo2&p3=http%3A%2F%2Fexample.org%2F%23Foo3#Widget
> >>
> >>> .
> >>>
> >>> This mapping technique is recursive; templates' arguments can be
> >>> templates.
> >>>
> >>> This mapping technique is generally useful across Semantic Web
> >>> languages and enables a number of interesting and useful features.
> >>> Some of these envisioned features are powered by additional
> >>> technologies, e.g., PHP and N3.
> >>>
> >>> Pertaining to N3 specifically, while one could model templates and
> >>> their parameters as you have indicated, the proposed solution enables
> >>> N3 "named graph templates", with a rather nice syntactic sugar, as
> >>> prototyped
> >>> here: https://github.com/w3c-cg/planning/discussions/27#discussioncom
> > <https://github.com/w3c-cg/planning/discussions/27#discussioncom>
> >> <https://github.com/w3c-cg/planning/discussions/27#discussioncom
> > <https://github.com/w3c-cg/planning/discussions/27#discussioncom>>
> >>> ment-4388356 .
> >>>
> >>> While it's a work in progress, I'm excited about this one. Comments,
> >>> questions, and feedback are welcomed!
> >>>
> >>>
> >>> Best regards,
> >>> Adam
> >>>
> >>> From: William Van Woensel <william.vanwoensel@gmail.com>
> >>> Sent: Tuesday, December 13, 2022 6:48 AM
> >>> To: Adam Sobieski <adamsobieski@hotmail.com>
> >>> Cc: Doerthe Arndt <doerthe.arndt@tu-dresden.de>; semantic-web@w3.org
> >>> <semantic-web@w3.org>
> >>> Subject: Re: Templates, Generics, and Parametric Polymorphism in
> >>> Semantic Web Languages [Was Re: Syntactic Options for Probabilistic
> >>> Semantics]
> >>>
> >>> Hi Adam
> >>>
> >>> Why introduce a new syntax (I believe you had a similar discussion
> >>> before with Doerthe before on probabilities :-)
> >>>
> >>> Unsure whether I fully understand your proposal - so feel free to
> >>> criticize - but an option could just easily be:
> >>>         ex:Widget tpl:parameters ( ex:Foo ex:Foo2 ex:Foo3 ) .
> >>> Or
> >>>         ex:Widget tpl:parameters ( [
> >>>                 tpl:label “param1” ;
> >>>                 tpl:value ex:Foo
> >>>         ] [
> >>>                 tpl:label “param2” ;
> >>>                 tpl:value ex:Foo2
> >>>         ] [
> >>>                 tpl:label “param3” ;
> >>>                 tpl:value ex:Foo3
> >>>         ] ) .
> >>>
> >>> A set of N3 rules could then directly operate on these parameters (as
> >>> they are also written in N3) to instantiate the template.
> >>>
> >>>
> >>> W
> >>>
> >>> > On Dec 12, 2022, at 10:58 PM, Adam Sobieski
> >>> > <adamsobieski@hotmail.com> wrote:
> >>> >
> >>> > With respect to syntactic possibilities for templates, generics,
> >>> > and parametric polymorphism in Semantic Web languages, it occurs
> >>> > that all the brackets are already in use...
> >>> > How, then, might we represent templates and generics? One
> >>> > possibility is to utilize a list-like syntax for arguments and some
> >>> > sort of connector, like:
> >>> > <http://www.example.org/#Widget
> >> <http://www.example.org/#Widget
> > <http://www.example.org/#Widget>>>^^(ex:Foo ex:Foo2 ex:Foo3)
> >>> > ex:Widget^^(ex:Foo ex:Foo2 ex:Foo3)  Here is how it would look with
> >>> > recursive structure:
> >>> >
> >>> > <http://www.example.org/#Widget
> >> <http://www.example.org/#Widget
> > <http://www.example.org/#Widget>>>^^(ex:Foo ex:Foo2^^(xsd:integer)
> >>> > ex:Foo3) ex:Widget^^(ex:Foo ex:Foo2^^(xsd:integer) ex:Foo3)  Do any
> >>> > other syntactic possibilities come to mind?
> >>> >    Best regards,
> >>> > Adam
> >>> > From: Adam Sobieski <adamsobieski@hotmail.com>
> >>> > Sent: Monday, December 12, 2022 2:37 PM
> >>> > To: William Van Woensel <william.vanwoensel@gmail.com>
> >>> > Cc: Doerthe Arndt <doerthe.arndt@tu-dresden.de>;
> >>> > semantic-web@w3.org <semantic-web@w3.org>
> >>> > Subject: Re: Syntactic Options for Probabilistic Semantics
> >>> >   William,
> >>> > All,
> >>> >
> >>> > Thank you for the useful example. I've been recently thinking about
> >>> > "graph reification" which is showcased in your
> >>> > example:http://ppr.cs.dal.ca:3002/n3/editor/s/ztVCkf2R .
> >>> >
> >>> > N3 Syntactic Sugar
> >>> > As interesting, here are some more rough-draft syntactic sketches:
> >>> >
> >>> > @foreach(rdf:Statement ?stmt in example:graph1 insert
> >>> > example:graph2)
> >>> > {
> >>> >     ...
> >>> > }
> >>> >    @foreach(ext:Graph ?g in example:dataset1 insert example:graph2)
> >>> > {
> >>> >    ...
> >>> > }
> >>> >    @foreach(ext:Graph ?g in example:dataset1)
> >>> > {
> >>> >    @foreach(rdf:Statement ?stmt in ?g insert example:graph2)
> >>> >    {
> >>> >       ...
> >>> >    }
> >>> > }
> >>> >    N3, Client-side Preprocessing, Templates and Generics
> >>> >
> >>> > In addition to client-side PHP [2], I am also thinking about N3 as
> >>> > a potential "semantic preprocessing" technology. With client-side
> >>> > preprocessing [1], runtime arguments – including entire graphs or
> >>> > knowledgebases – can be provided to preprocessors which can then
> >>> > access the graphs or knowledgebases to utilize program logic to
> >>> > vary output contents, e.g., TriG content. As envisioned, graphs or
> >>> > knowledgebases would be provided to preprocessing environments as
> >>> > implicit arguments alongside possible explicit arguments which
> >>> > could be URIs or data types, e.g., boolean values, strings, or
> >>> > numerical values.
> >>> > Towards using N3 in a semantic preprocessing capacity, one could
> >>> > define a reserved input graph name, e.g., “urn:reserved:input”, for
> >>> > an input graph or knowledgebase to be provided at runtime. There
> >>> > would, then, be a matter of how one might best express other input
> >>> > parameters (e.g., T, or T1, T2, T3) which would, similarly, be
> >>> > bound to argument values when invoking the preprocessor.
> >>> > Scenarios considered include, broadly, templates and generics. For
> >>> > a concrete example, “ex:Widget<ex:Dog>” and “ex:Widget<ex:Person>”
> >>> > might result in output content which differs based on facts
> >>> > asserted in the provided graph or knowledgebase about dogs and
> >>> > people, e.g., a dog has four legs and a person two. The
> >>> > preprocessing logic which would produce these generic types would
> >>> > receive an implicit argument, a graph or knowledgebase, and an
> >>> > explicit argument value, in this case a URI, for a template
> >>> > parameter T, e.g., "ex:Dog" or "ex:Person".
> >>> > As envisioned, output content from semantic preprocessing could be
> >>> > semantic graphs. In the running example, the output content might
> >>> > represent a type or class. Resultant types or classes might have
> >>> > URIs resembling:
> >>> > “http://www.example.org/?T=http%3A%2F%2Fwww.example.org%2F%23Dog#Wi
> >>> > dget” and
> >>> > “http://www.example.org/?T=http%3A%2F%2Fwww.example.org%2F%23Person
> >>> > #Widget”.
> >>> > While I’m looking at these preprocessing scenarios towards
> >>> > advancing expressiveness for planning domain definitions, other
> >>> > applications of interest to me include machine lexicons. For
> >>> > instance, “verb:Walk<ex:Dog>” and “verb:Walk<ex:Person>” might have
> >>> > similar but differing semantic content, e.g., definitions differing
> >>> > as dogs have four legs and people have two.
> >>> >
> >>> >
> >>> > Best regards,
> >>> > Adam
> >>> >
> >>> > [1] https://github.com/w3c-cg/planning/discussions/21
> > <https://github.com/w3c-cg/planning/discussions/21>
> >> <https://github.com/w3c-cg/planning/discussions/21
> > <https://github.com/w3c-cg/planning/discussions/21>> [2]
> >>> > https://github.com/seanmorris/php-wasm
> > <https://github.com/seanmorris/php-wasm>
> >> <https://github.com/seanmorris/php-wasm
> > <https://github.com/seanmorris/php-wasm>>
> >>> > From: William Van Woensel <william.vanwoensel@gmail.com>
> >>> > Sent: Monday, December 12, 2022 9:35 AM
> >>> > To: Adam Sobieski <adamsobieski@hotmail.com>
> >>> > Cc: Doerthe Arndt <doerthe.arndt@tu-dresden.de>;
> >>> > semantic-web@w3.org <semantic-web@w3.org>
> >>> > Subject: Re: Syntactic Options for Probabilistic Semantics
> >>> >   Hi Adam
> >>> >
> >>> > See here for some examples on how you can infer new statements
> >>> > based on the contents of a graph:
> >>> > http://ppr.cs.dal.ca:3002/n3/editor/s/ztVCkf2R
> > <http://ppr.cs.dal.ca:3002/n3/editor/s/ztVCkf2R>
> >> <http://ppr.cs.dal.ca:3002/n3/editor/s/ztVCkf2R
> > <http://ppr.cs.dal.ca:3002/n3/editor/s/ztVCkf2R>>
> >>> >
> >>> > (These are arbitrary examples; if you had something concrete in
> >>> > mind, I can try to write a better example.)
> >>> >
> >>> > I think the syntactic sugar you propose could be intuitive for this
> >>> > kind of use case (a more imperative style of programming).
> >>> >
> >>> >
> >>> > W
> >>> >
> >>> > > On Dec 11, 2022, at 3:37 AM, Adam Sobieski
> >>> > > <adamsobieski@hotmail.com> wrote:
> >>> > >
> >>> > > Dörthe,
> >>> > > All,
> >>> > >
> >>> > > With respect to syntactic options for probabilistic logic and
> >>> > > semantics, I recently created a GitHub discussion
> >>> > > thread:https://github.com/w3c-cg/planning/discussions/26#discussi
> >>> > > oncomment-4369123 . The most recent comment, there, broaches some
> >>> > > syntactic options inc
>

Received on Saturday, 17 December 2022 13:42:48 UTC