Description
Currently, framing allows you to select subject definitions based on @type matching or duck typing for included properties. It allows value properties to be explicitly matched based on defining the property and excluding things that are undefined, but it does not allow you to be more specific about the types of values selected.
For example, DBPedia creates output in many languages, and it would be reasonable to frame to get just a specific language. This could be supported by adding more specific value matching. Consider the following:
Document:
{
"rdfs:comment": [
{"@value": "comment in english", "@language": "en"},
{"@value": "commentar auf deutsch", "@language": "de"},
{"@value": "日本語でのコメント", "@language": "ja"},
]
}
Frame:
{
"@context": {},
"rdfs:comment": {"@value": {}, "@language": "en"}
}
This might select only those values that match the specific language. Or, using a {} wildcard, only those values that have a defined language. The same could be used for @type: {}, when used in conjunction with@value. (We could also consider @language: false or @type: false to indicate that there is no language or type.
Using the array syntax, multiple values could be selected:
{
"@context": {},
"rdfs:comment": [
{"@value": {}, "@language": "en"}
{"@value": {}, "@language": "de"}
]
}
This could be extended to say that for a property, the {} wildcard only selects resources, and to select a value requires an explicit {"@value": {}} to be a value. Personally, I think that if you use {"@type": {}}, it's clear that you only want values which are resources, and that {} can remain a wildcard matching both values and resources.