📄 rqlparser.java
字号:
ResourceQuery q; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case IDENTIFIER: case CLASSVAR: case PROPERTYVAR: q = var(); {if (true) return q;} break; case NULL: q = null_value(); {if (true) return q;} break; case URI: q = uri(); {if (true) return q;} break; case DOMAIN: q = domain(); {if (true) return q;} break; case RANGE: q = range(); {if (true) return q;} break; case SUBCLASSOF: q = subClassOf(); {if (true) return q;} break; case SUBPROPERTYOF: q = subPropertyOf(); {if (true) return q;} break; case TYPEOF: q = typeOf(); {if (true) return q;} break; case SUPERPROPERTYOF: q = superPropertyOf(); {if (true) return q;} break; case SUPERCLASSOF: q = superClassOf(); {if (true) return q;} break; default: jj_la1[7] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public DataVar null_value() throws ParseException { Token t; t = jj_consume_token(NULL); // FIXME a null token is now returned as a DataVar, because there is // no specific 'nulltoken' object in the data model. should we change // this? {if (true) return new DataVar(t.image);} throw new Error("Missing return statement in function"); } final public void rangeslist(List selectors) throws ParseException { ranges_elem(selectors); label_3: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: ; break; default: jj_la1[8] = jj_gen; break label_3; } jj_consume_token(COMMA); ranges_elem(selectors); } } final public void ranges_elem(List selectors) throws ParseException { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case CLASS: case PROPERTY: class_or_property_selector(selectors); break; case LBRACE: case TYPEOF: case SUBCLASSOF: case SUPERCLASSOF: case SUBPROPERTYOF: case SUPERPROPERTYOF: case DOMAIN: case RANGE: case CLASSVAR: case PROPERTYVAR: case URI: pathexpr(selectors); break; default: jj_la1[9] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } final public void class_or_property_selector(List selectors) throws ParseException { RdfsClass rdfsClass; ClassVar classVar; RdfProperty rdfProperty; PropertyVar propVar; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case CLASS: rdfsClass = rdfs_class(); jj_consume_token(LBRACE); classVar = classvar(); jj_consume_token(RBRACE); ClassSelector classSel = new ClassSelector(classVar, rdfsClass); _unboundVarList.remove(classVar); selectors.add(classSel); break; case PROPERTY: rdfProperty = rdf_property(); jj_consume_token(LBRACE); propVar = propertyvar(); jj_consume_token(RBRACE); PropertySelector propSel = new PropertySelector(propVar, rdfProperty); _unboundVarList.remove(propVar); selectors.add(propSel); break; default: jj_la1[10] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } final public void pathexpr(List selectors) throws ParseException { // Vars for implicit joins between path elements FromTo fromTo = new FromTo(); fromTo = first_pathelem(selectors); label_4: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case DOT: ; break; default: jj_la1[11] = jj_gen; break label_4; } fromTo = joined_pathelem(selectors, fromTo); } }/* The first path element of a row (possibly) */ final public FromTo first_pathelem(List selectors) throws ParseException { FromTo sourceFromTo = null; FromTo targetFromTo = null; PropertyQuery propQ = null; ClassQuery classQ = null; URI uri = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case LBRACE: jj_consume_token(LBRACE); sourceFromTo = from_to(selectors); jj_consume_token(RBRACE); break; default: jj_la1[12] = jj_gen; ; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PROPERTY: case SUBPROPERTYOF: case SUPERPROPERTYOF: case PROPERTYVAR: propQ = property_query(); break; case CLASS: case TYPEOF: case SUBCLASSOF: case SUPERCLASSOF: case DOMAIN: case RANGE: case CLASSVAR: classQ = class_query(); break; case URI: uri = uri(); break; default: jj_la1[13] = jj_gen; jj_consume_token(-1); throw new ParseException(); } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case LBRACE: jj_consume_token(LBRACE); targetFromTo = from_to(selectors); jj_consume_token(RBRACE); break; default: jj_la1[14] = jj_gen; ; } if (classQ != null) { if (targetFromTo == null) { {if (true) throw new ParseException("from_to part missing for " + classQ.toString());} } if (sourceFromTo != null) { {if (true) throw new ParseException("Not a property query: " + classQ.toString());} } if (targetFromTo.dataVar == null) { if (targetFromTo.classQ == null) { {if (true) throw new ParseException("Data or class var missing for " + classQ.toString());} } else if (targetFromTo.classQ instanceof ClassVar) { // Query like: classQ { : $X} ClassSelector classSel = new ClassSelector((ClassVar)targetFromTo.classQ, classQ); _unboundVarList.remove(targetFromTo.classQ); _unboundVarList.remove(classQ); selectors.add(classSel); } else { {if (true) throw new ParseException("target should be class var for " + classQ.toString());} } } else { // Query like: classQ {X} InstanceSelector insSel = new InstanceSelector( targetFromTo.dataVar, classQ, false); _unboundVarList.remove(targetFromTo.dataVar); _unboundVarList.remove(classQ); selectors.add(insSel); } } else if (uri != null) { if (sourceFromTo == null && targetFromTo != null && targetFromTo.classQ != null && targetFromTo.classQ instanceof ClassVar) { // query is of the form 'uri{ : $X}' or 'uri{X : $X}' // FIXME what if targetFromTo.classQ is not just a var? // create a class selector constraining $X to subclasses // of uri. FIXME currently subClassOf(X) does not return X // itself, this is necessary here. classQ = new SubClassOf((ClassQuery)uri, true); ClassSelector classSel = new ClassSelector((ClassVar)targetFromTo.classQ, classQ); _unboundVarList.remove(targetFromTo.classQ); _unboundVarList.remove(classQ); selectors.add(classSel); if (targetFromTo.dataVar != null) { InstanceSelector instSel = new InstanceSelector(targetFromTo.dataVar, targetFromTo.classQ, true); _unboundVarList.remove(targetFromTo.dataVar); _unboundVarList.remove(targetFromTo.classQ); selectors.add(instSel); } } else if (sourceFromTo != null || targetFromTo == null || // implicit join using "." targetFromTo.dataVar == null || // schema path selector targetFromTo.classQ != null) // schema path selector { // This is a property selector. This will be handled in // the next if-statement propQ = (PropertyQuery)uri; } else { // Don't know what kind of selector this is, use an // UnknownSelector UnknownSelector unknownSel = new UnknownSelector( uri, targetFromTo.dataVar); _unboundVarList.remove(targetFromTo.dataVar); selectors.add(unknownSel); } } // Not 'else if' because propQ can be set later in case of uri !!! if (propQ != null) { // Both FromTo's are needed: if (sourceFromTo == null) { sourceFromTo = new FromTo(); } if (targetFromTo == null) { targetFromTo = new FromTo(); } // In case just one of the FromTo's has a dataVar, the other // should get an anonymous DataVar. if (sourceFromTo.dataVar != null) { if (targetFromTo.dataVar == null) { targetFromTo.dataVar = new DataVar(getAnonymousVarName()); if (targetFromTo.classQ != null) { // We've created a new class restriction InstanceSelector resSel = new InstanceSelector( targetFromTo.dataVar, targetFromTo.classQ, true); _unboundVarList.remove(targetFromTo.classQ); selectors.add(resSel); } } } else { // sourceFromTo.dataVar == null if (targetFromTo.dataVar != null) { sourceFromTo.dataVar = new DataVar(getAnonymousVarName()); if (sourceFromTo.classQ != null) { // We've created a new class restriction InstanceSelector resSel = new InstanceSelector( sourceFromTo.dataVar, sourceFromTo.classQ, true); _unboundVarList.remove(sourceFromTo.classQ); selectors.add(resSel); } } } // Now both FromTo's are ensured to be complete // Create a property selector for the property in case propQ // is not a PropertyVar itself PropertyVar propVar = null; if (propQ instanceof PropertyVar) { propVar = (PropertyVar)propQ; // If both source and target are empty // (e.g. {} @P {} ), we still need a // property selector. if (sourceFromTo.dataVar == null && targetFromTo.dataVar == null) { PropertySelector propSel = new PropertySelector(propVar, new RdfProperty()); _unboundVarList.remove(propVar); selectors.add(propSel); } } else { // Use anonymous var that can be shared with other selectors propVar = new PropertyVar(getAnonymousVarName()); PropertySelector propSel = new PropertySelector(propVar, propQ); _unboundVarList.remove(propQ); selectors.add(propSel); } // If appropriate, create DataPathSelector if (sourceFromTo.dataVar != null && targetFromTo.dataVar != null) { boolean extendedPropInterpretation = true; if (propQ instanceof PropertyVar) { extendedPropInterpretation = false; } DataPathSelector dps = new DataPathSelector(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -