Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file sparql_print.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690(*********************************************************************************)(* OCaml-RDF *)(* *)(* Copyright (C) 2012-2024 Institut National de Recherche en Informatique *)(* et en Automatique. All rights reserved. *)(* *)(* This program is free software; you can redistribute it and/or modify *)(* it under the terms of the GNU Lesser General Public License version *)(* 3 as published by the Free Software Foundation. *)(* *)(* This program is distributed in the hope that it will be useful, *)(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *)(* GNU General Public License for more details. *)(* *)(* You should have received a copy of the GNU General Public License *)(* along with this program; if not, write to the Free Software *)(* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA *)(* 02111-1307 USA *)(* *)(* Contact: Maxence.Guesdon@inria.fr *)(* *)(*********************************************************************************)(** Print Sparql abstract syntax tree. *)openSparql_typesletmap_optf=functionNone->None|Somex->Some(fx);;letdo_optf=functionNone->()|Somex->fx;;letp=Buffer.add_string;;letpp=Printf.bprintf;;letprint_list?sepbfl=letreciter=function[]->()|[path]->fbpath|path::q->fbpath;(matchsepwithNone->()|Somes->pbs);iterqiniterl;;letprint_irirefbir=pb("<"^(Iri.to_stringir.ir_iri)^">")letprint_irilocbr=pb("<"^(Iri.to_stringr.iri_iri)^">")letprint_varbv=pb("?"^v.var_name)letprint_bnodebbnode=matchbnode.bnode_labelwithNone->pb"[]"|Somes->pb("_:"^s)letprint_path_modb=function|ModOptional->pb"?"|ModList->pb"*"|ModOneOrMore->pb"+";;letprint_irib=function|Irirefir->print_irirefbir|Irir->print_irilocbr|PrefixedNamepname->pb(pname.pname_ns.pname_ns_name^":");(matchpname.pname_localwithNone->()|Somel->pbl.pname_local_name);;letprint_query_prolog_declb=function|BaseDecliriref->pb"BASE ";print_irirefbiriref;pb"\n"|PrefixDecl(pname_ns,iriref)->pb("PREFIX "^pname_ns.pname_ns_name^": ");print_irirefbiriref;pb"\n";;letprint_query_prologbdecls=List.iter(print_query_prolog_declb)decls;;letprint_string_litbs=pb(Term.quote_strs)letprint_rdf_literalbt=matcht.rdf_lit.Term.lit_typewithSomeiriwhenIri.equaliriRdf_.xsd_integer->pbt.rdf_lit.Term.lit_value|_->letlit=t.rdf_litinletlit,s_type=matcht.rdf_lit_typewithNone->lit,None|Someiri->({litwithTerm.lit_type=None},Some(fun()->pb"^^";print_iribiri))inpb(Term.string_of_term(Term.Literallit));matchs_typewithNone->()|Somef->f();;letprint_data_block_valueb=function|DataBlockValueIriiri->print_iribiri|DataBlockValueRdflit->print_rdf_literalblit|DataBlockValueNumericlit->print_rdf_literalblit|DataBlockValueBooleanlit->print_rdf_literalblit|DataBlockValueUndef->pb"UNDEF";;letprint_data_full_block_valueb=function|Nil->pb"()"|Valuel->pb"(";print_list~sep:" "bprint_data_block_valuel;pb")";;;letprint_inline_data_one_varbt=print_varbt.idov_var;pb" { ";print_list~sep:" "bprint_data_block_valuet.idov_data;pb" } ";;letprint_inline_data_fullbt=pb"(";print_list~sep:" "bprint_vart.idf_vars;pb") { ";print_list~sep:" "bprint_data_full_block_valuet.idf_values;pb" } ";;letprint_datablockb=function|InLineDataOneVari->print_inline_data_one_varbi|InLineDataFulli->print_inline_data_fullbiletprint_values_clauseb=functionNone->()|Somed->pb"\nVALUES ";print_datablockbd;;letprint_var_or_irib=function|VIVarv->print_varbv|VIIriiri->print_iribiri;;letrecprint_select_varbt=matcht.sel_var_exprwithNone->print_varbt.sel_var|Somee->pb"(";print_expressionbe;pb" AS ";print_varbt.sel_var;pb")"andprint_select_varsb=function|SelectAll->pb"*"|SelectVarsl->print_list~sep:" "bprint_select_varlandprint_select_clausebt=pb"SELECT ";(matcht.sel_flagwithNone->()|SomeDistinct->pb"DISTINCT "|SomeReduced->pb"REDUCED ");print_select_varsbt.sel_varsandprint_source_selector=print_iriandprint_dataset_clauseb=function|DefaultGraphClauses->pb"\nFROM ";print_source_selectorbs|NamedGraphClauses->pb"\nFROM NAMED ";print_source_selectorbsandprint_arg_listbt=pb"(";ift.argl_distinctthenpb"DISTINCT ";print_list~sep:", "bprint_expressiont.argl;pb")"andprint_function_callbt=print_iribt.func_iri;print_arg_listbt.func_argsandstring_of_bin_op=function|EEqual->"="|ENotEqual->"!="|ELt->"<"|ELte->"<="|EGt->">"|EGte->">="|EPlus->"+"|EMinus->"-"|EMult->"*"|EDiv->"/"|EOr->"||"|EAnd->"&&"andprint_exprb=function|EBin(e1,op,e2)->print_expressionbe1;pb(" "^(string_of_bin_opop)^" ");print_expressionbe2|EIn(ne,l)->print_expressionbne;pb" IN (";print_list~sep:", "bprint_expressionl;pb")"|ENotIn(ne,l)->print_expressionbne;pb" NOT IN (";print_list~sep:", "bprint_expressionl;pb")"|EUMinuse->pb"- ";print_expressionbe;|ENote->pb"!";print_expressionbe|EBicc->print_built_in_callbc|EFuncallc->print_function_callbc|ELitlit->print_rdf_literalblit|ENumericlit->print_rdf_literalblit|EBooleanlit->print_rdf_literalblit|EVarv->print_varbv|EIriiri->print_iribiriandprint_expressionbe=matche.exprwithEVar_|EFuncall_|EBic_|ELit_|ENumeric_|EBoolean_->print_exprbe.expr|_->pb"(";print_exprbe.expr;pb")"andprint_aggregateb=function|Bic_COUNT(dis,eopt)->ppb"COUNT(%s"(ifdisthen"DISTINCT "else"");(matcheoptwith|None->pb"*"|Somee->print_expressionbe);pb")"|Bic_SUM(dis,e)->ppb"SUM(%s"(ifdisthen"DISTINCT "else"");print_expressionbe;pb")"|Bic_MIN(dis,e)->ppb"MIN(%s"(ifdisthen"DISTINCT "else"");print_expressionbe;pb")"|Bic_MAX(dis,e)->ppb"MAX(%s"(ifdisthen"DISTINCT "else"");print_expressionbe;pb")";|Bic_AVG(dis,e)->ppb"AVG(%s"(ifdisthen"DISTINCT "else"");print_expressionbe;pb")"|Bic_SAMPLE(dis,e)->ppb"SAMPLE(%s"(ifdisthen"DISTINCT "else"");print_expressionbe;pb")"|Bic_GROUP_CONCAT(dis,e,s_opt)->ppb"GROUP_CONCAT(%s"(ifdisthen"DISTINCT "else"");print_expressionbe;(matchs_optwithNone->()|Somes->pb"; SEPARATOR=";print_string_litbs);pb")"andprint_built_in_callb=function|Bic_aggagg->print_aggregatebagg|Bic_fun(name,l)->pb(name^"(");print_list~sep:", "bprint_expressionl;pb")"|Bic_BOUNDv->pb"BOUND(";print_varbv;pb")"|Bic_EXISTSg->pb"EXISTS";print_group_graph_patternbg;|Bic_NOTEXISTSg->pb"NOT EXISTS";print_group_graph_patternbgandprint_group_conditionb=function|GroupBuiltInCallc->print_built_in_callbc|GroupFunctionCallc->print_function_callbc|GroupVargv->matchgv.grpvar_expr,gv.grpvarwithNone,None->assertfalse|Somee,None->pb"(";print_expressionbe;pb")"|Somee,Somev->pb"(";print_expressionbe;pb" AS ";print_varbv;pb")"|None,Somev->print_varbvandprint_constraintb=function|ConstrBuiltInCallc->print_built_in_callbc|ConstrFunctionCallc->print_function_callbc|ConstrExpre->pb"(";print_expressionbe;pb")"andprint_having_conditionbt=print_constraintbtandprint_order_conditionb=function|OrderAsce->pb"ASC (";print_expressionbe;pb")"|OrderDesce->pb"DESC (";print_expressionbe;pb")"|OrderConstrc->print_constraintbc|OrderVarv->print_varbvandprint_limit_offset_clausebt=(matcht.limoff_offsetwithNone->()|Somen->ppb"OFFSET %d"n);(matcht.limoff_limitwithNone->()|Somen->ppb"LIMIT %d"n)andprint_solution_modifierbt=(matcht.solmod_groupwith[]->()|l->pb" GROUP BY ";print_list~sep:" "bprint_group_conditionl);(matcht.solmod_havingwith[]->()|l->pb" HAVING ";print_list~sep:" "bprint_having_conditionl);(matcht.solmod_orderwithNone->()|Somel->pb" ORDER BY ";print_list~sep:" "bprint_order_conditionl);do_opt(print_limit_offset_clauseb)t.solmod_limoffandprint_bindbt=pb" BIND (";print_expressionbt.bind_expr;pb" AS ";print_varbt.bind_var;pb")"andprint_service_graph_patternbt=pb" SERVICE ";ift.servgp_silentthenpb"SILENT ";print_var_or_iribt.servgp_name;pb" ";print_group_graph_patternbt.servgp_patandprint_graph_graph_patternbt=pb" GRAPH ";print_var_or_iribt.graphgp_name;print_group_graph_patternbt.graphgp_patandprint_graph_pattern_eltb=function|Triplesl->print_triples_blockbl|Unionl->print_list~sep:" UNION "bprint_group_graph_patternl|Optionalg->pb" OPTIONAL ";print_group_graph_patternbg|Minusg->pb" MINUS ";print_group_graph_patternbg|GGPg->print_graph_graph_patternbg|Services->print_service_graph_patternbs|Filterc->pb" FILTER ";print_constraintbc|Bindbind->print_bindbbind|InlineDatad->pb" VALUES ";print_datablockbdandprint_graph_termb=function|GraphTermIriiri->print_iribiri|GraphTermLitlit->print_rdf_literalblit|GraphTermNumericlit->print_rdf_literalblit|GraphTermBooleanlit->print_rdf_literalblit|GraphTermBlankbnode->print_bnodebbnode|GraphTermNil->pb"()"|GraphTermNode_->assertfalseandprint_var_or_termb=function|Varv->print_varbv|GraphTermt->print_graph_termbtandprint_path_one_in_prop_setb=function|PathOneInIriiri->print_iribiri|PathOneInA->pb"a"|PathOneInNotIriiri->pb"^";print_iribiri|PathOneInNotA->pb"^a"andprint_path_primaryb=function|PathIriiri->print_iribiri|PathA->pb"a"|PathNegPropSetl->pb"!";(matchlwith[]->assertfalse|[one]->print_path_one_in_prop_setbone|l->pb"( ";print_list~sep:" | "bprint_path_one_in_prop_setl;pb" )";)|Pathpath->pb"( ";print_pathbpath;pb" )";andprint_path_eltbt=print_path_primarybt.pelt_primary;do_opt(print_path_modb)t.pelt_modandprint_path_elt_or_inverseb=function|Elte->print_path_eltbe|Inve->pb"^";print_path_eltbeandprint_path_sequencebl=print_list~sep:" / "bprint_path_elt_or_inverselandprint_pathbl=print_list~sep:" | "bprint_path_sequencelandprint_verbb=function|VerbPathp->print_pathbp|VerbVarv->print_varbv|VerbIriiri->print_iribiri|VerbA->pb"a"andprint_triples_nodeb=function|TNodeCollectionl->pb"(";List.iter(print_graph_nodeb)l;pb")"|TNodeBlankl->pb"[ ";print_list~sep:"; "bprint_prop_object_listl;pb" ]";andprint_graph_nodeb=function|GraphNodeVTt->print_var_or_termbt|GraphNodeTriplest->print_triples_nodebtandprint_objectbt=print_graph_nodebtandprint_prop_object_listbt=print_verbbt.propol_verb;pb" ";print_list~sep:";\n "bprint_objectt.propol_objectsandprint_triples_same_subjectb=function|TriplesVar(s,path)->print_var_or_termbs;pb" ";print_list~sep:" ; "bprint_prop_object_listpath;|TriplesNode(t,path)->print_triples_nodebt;pb" ";List.iter(print_prop_object_listb)pathandprint_triples_block=letfbt=print_triples_same_subjectbt;pb" .\n"infunbt->List.iter(fb)t.triplesandprint_ggp_subbt=print_list~sep:"\n"bprint_graph_pattern_eltt.ggp_sub_eltsandprint_group_graph_patternbpat=pb"{\n";(matchpatwith|SubSelects->print_sub_selectbs|GGPSubg->print_ggp_subbg);pb"\n}"andprint_sub_selectbt=print_select_clausebt.subsel_select;pb"\nWHERE ";print_group_graph_patternbt.subsel_where;pb"\n";print_solution_modifierbt.subsel_modifier;print_values_clausebt.subsel_values;;letprint_select_querybt=print_select_clausebt.select_select;pb" ";List.iter(print_dataset_clauseb)t.select_dataset;pb"\nWHERE ";print_group_graph_patternbt.select_where;pb"\n";print_solution_modifierbt.select_modifier;;;letprint_triples_templatebl=print_list~sep:" .\n"bprint_triples_same_subjectlletprint_construct_template=print_triples_templateletprint_construct_whereb=function|Constr_ggpp->print_group_graph_patternbp|Constr_templatet->print_triples_templatebtletprint_construct_querybt=pb"CONSTRUCT ";(matcht.constr_templatewithSometmpl->print_construct_templatebtmpl;pb" ";List.iter(print_dataset_clauseb)t.constr_dataset;pb"\nWHERE ";print_construct_wherebt.constr_where;|None->List.iter(print_dataset_clauseb)t.constr_dataset;pb"\nWHERE { ";print_construct_wherebt.constr_where;pb" }";);pb"\n";print_solution_modifierbt.constr_modifierletprint_describe_querybt=pb"DESCRIBE ";(matcht.desc_selwith[]->pb"*"|l->print_list~sep:" "bprint_var_or_iril;);pb" ";List.iter(print_dataset_clauseb)t.desc_dataset;(matcht.desc_wherewithNone->()|Somew->pb"\nWHERE ";print_group_graph_patternbw);pb"\n";print_solution_modifierbt.desc_modifier;;letprint_ask_querybt=pb"ASK ";List.iter(print_dataset_clauseb)t.ask_dataset;pb"\nWHERE ";print_group_graph_patternbt.ask_where;pb"\n";print_solution_modifierbt.ask_modifier;;letprint_quad_not_triplesbqnt=pb"GRAPH ";print_var_or_iribqnt.quadsnt_graph;pb" {";(matchqnt.quadsnt_tripleswithNone->()|Somet->pb" ";print_triples_templatebt;pb" ");pb"}"letprint_quads_itemb(qnt,topt)=print_quad_not_triplesbqnt;matchtoptwithNone->()|Somet->pb" . ";print_triples_templatebtletprint_quadsbq=(matchq.quads_tripleswithNone->()|Somet->print_triples_templatebt;pb" ");print_list~sep:" "bprint_quads_itemq.quads_listletprint_quad_databqd=pb"{ ";print_quadsbqd;pb" }"letprint_quad_pattern=print_quad_dataletprint_using_clauseb(named,iri,_loc)=ifnamedthenpb"NAMED ";print_iribiriletprint_update_modifybt=(matcht.umod_iriwithNone->()|Somei->pb"WITH ";print_iribi;pb" ");(matcht.umod_deletewithNone->()|Someqp->pb"DELETE ";print_quad_patternbqp;pb" ");(matcht.umod_insertwithNone->()|Someqp->pb"INSERT ";print_quad_patternbqp;pb" ");print_list~sep:" "bprint_using_clauset.umod_using;pb" WHERE ";print_group_graph_patternbt.umod_whereletprint_update_actionba=let()=matchawith|Update_load->pb"LOAD"|Update_clear->pb"CLEAR"|Update_drop->pb"DROP"|Update_add->pb"ADD"|Update_move->pb"MOVE"|Update_copy->pb"COPY"|Update_create->pb"CREATE"|Update_insert_dataqd->pb"INSERT DATA ";print_quad_databqd|Update_delete_dataqd->pb"DELETE DATA ";print_quad_databqd|Update_delete_whereqp->pb"DELETE WHERE ";print_quad_patternbqp|Update_modifym->print_update_modifybminpb"\n"letprint_update_querybt=print_list~sep:";\n"bprint_update_actiontletprint_query_kindb=function|Selectq->print_select_querybq|Constructq->print_construct_querybq|Describeq->print_describe_querybq|Askq->print_ask_querybq|Updateq->print_update_querybq;;letprint_querybq=print_query_prologbq.q_prolog;pb"\n";print_query_kindbq.q_kind;pb"\n";print_values_clausebq.q_values;;