Search code examples
mediawikimediawiki-apisemantic-mediawiki

Using property OR in "conditions" parameter of askargs action with Semantic MediaWiki API


I'm trying to fetch results via API using the module askargs. I have no problems getting results when I have just one condition or more conditions aggregated with the operator AND where I make use of the pipe character to separate them (like written in documentation).

E.g.

[[Category:+]] AND [[Jurisdiction::A]] AND [[Type::B]]

Category:+ | Jurisdiction::A | Type::B

But the pipe character doesn't work with OR.

I need to be able to use both logical conditions with several arguments within the same query.

Am I missing something?


Solution

  • Am I missing something?

    No. The API doesn't handle OR condition, due to simplistic code in the query parameters formatter.

    See file SemanticMediaWiki/src/MediaWiki/Api/ApiRequestParameterFormatter.php at line 132:

    protected function formatConditions( $condition ) {
            return "[[$condition]]";  
        }
    

    Every condition in the query is formatted with surrounding brackets, leading OR to be interpreted as a page title.

    An alternative is to use Special:Ask with URL encoded query and json format:

    https://www.semantic-mediawiki.org/wiki/Special:Ask/-5B-5BHas-20keyword::askargs-5D-5DOR-5B-5BHas-20keyword::ask-5D-5D/-3F%3Dhelp-20page/-3FHas-20description%3Ddescription/format%3Djson