mbeckerle commented on code in PR #973:
URL: https://github.com/apache/daffodil/pull/973#discussion_r1117656694


##########
daffodil-test/src/test/resources/org/apache/daffodil/section23/dfdl_expressions/expressions_unused_path_no_context.dfdl.xsd:
##########
@@ -28,20 +28,119 @@
     </xs:appinfo>
   </xs:annotation>
 
+
   <xs:element name="e1" type="xs:int" dfdl:lengthKind="explicit" 
dfdl:length="1" />
 
-  <xs:group name="unused_group">
+  <xs:group name="unused_group_1">
     <xs:sequence>
       <xs:element name="value1" type="xs:string" dfdl:lengthKind="explicit" 
dfdl:length="1" />
       <xs:sequence dfdl:terminator="{ ./value1 }" />
     </xs:sequence>
   </xs:group>
 
-  <xs:complexType name="unused_complex_type">
+  <xs:complexType name="unused_complex_type_1">
     <xs:sequence>
       <xs:element name="value2" type="xs:string" dfdl:lengthKind="explicit" 
dfdl:length="1" />
       <xs:sequence dfdl:terminator="{ ./value2 }"/>
     </xs:sequence>
   </xs:complexType>
 
+
+  <xs:group name="unused_group_2">
+    <xs:sequence>
+      <xs:sequence dfdl:terminator="{ ./value3 }" />
+    </xs:sequence>
+  </xs:group>
+
+  <xs:complexType name="unused_complex_type_2">
+    <xs:sequence>
+      <xs:sequence dfdl:terminator="{ ./value4 }"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:element name="unused_element_2">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:sequence dfdl:terminator="{ ./value5 }"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+
+
+  <xs:group name="unused_group_3">
+    <xs:sequence>
+      <xs:element name="unused" type="xs:string" dfdl:terminator="{ ../value6 
}" />
+    </xs:sequence>
+  </xs:group>
+
+  <xs:complexType name="unused_complex_type_3">
+    <xs:sequence>
+      <xs:element name="unused" type="xs:string" dfdl:terminator="{ ../value7 
}" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:element name="unused_element_3">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="unused" type="xs:string" dfdl:terminator="{ 
../../value8 }" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+
+
+  <xs:element name="unused_element_4">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="value9" type="xs:string" />
+        <xs:element name="nest1">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="nest2" type="xs:string" dfdl:terminator="{ 
../../value9 }" />

Review Comment:
   Is this line producing a warning? I see a `<warning>value9</warning>` above.
   
   I don't think this should produce a warning. The ../.. walks up to nest1 
then unused_element_4, but not past. 
   
   unused_element_4 is an element. Had it been a type or group then yes, I can 
see a warning being ok. But it's an element. So why should this warn?



##########
daffodil-core/src/main/scala/org/apache/daffodil/core/dpath/Expression.scala:
##########
@@ -868,11 +868,25 @@ sealed abstract class StepExpression(val step: String, 
val pred: Option[Predicat
   extends Expression {
 
   def relPathErr() = {
-    val err = new RelativePathPastRootError(
-      this.schemaFileLocation,
-      "Relative path '%s' past root element.",
-      this.wholeExpressionText,
-    )
+    // This path expression cannot be compiled because we went past the root. 
This normally
+    // should be an SDE with a RelativePathPastRootError. However, if we don't 
have any element
+    // compile infos or the current root is not the distinguished root that 
Daffodil is
+    // compiling, it means this expression is used on a term that is not a 
descendent of the
+    // distinguish root. The expression might make sense if a different 
distinguished root were

Review Comment:
   typo: shoudl be "// distinguished root"



##########
daffodil-test/src/test/resources/org/apache/daffodil/section23/dfdl_expressions/expressions_unused_path_no_context.dfdl.xsd:
##########
@@ -28,20 +28,119 @@
     </xs:appinfo>
   </xs:annotation>
 
+
   <xs:element name="e1" type="xs:int" dfdl:lengthKind="explicit" 
dfdl:length="1" />
 
-  <xs:group name="unused_group">
+  <xs:group name="unused_group_1">
     <xs:sequence>
       <xs:element name="value1" type="xs:string" dfdl:lengthKind="explicit" 
dfdl:length="1" />
       <xs:sequence dfdl:terminator="{ ./value1 }" />

Review Comment:
   So, this is a bit odd. The . in ./value1 refers to "some parent element" 
because this is inside a group. 
   
   But we don't care what element that is. 
   
   I'm ok with this issuing a warning, I think, so long as existing schemas 
don't pour out tons of such warnings. 
   But this is the borderline case where it would be nice if there was a way to 
avoid the warning in this case. 
   
   I can see how the expression compiler can't cope with this though. It wants 
that Up step to refer to an element that has DPathCompileInfo. There is no 
such. 
   
   So this is a corner case where we definitely cannot compile the expression, 
but we may not want to issue a warning. 
   
   I'd say let's merge this in, and try  it out and if we get too many such 
warnings deal with it then. 
   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to