diff --git a/specifications/grammar-40/xpath-grammar.xml b/specifications/grammar-40/xpath-grammar.xml
index 758499f04..6e24b5ec1 100644
--- a/specifications/grammar-40/xpath-grammar.xml
+++ b/specifications/grammar-40/xpath-grammar.xml
@@ -2862,6 +2862,20 @@ ErrorVal ::= "$" VarName
"e"
whose value matches element(Employee)
,
regardless what other entries the map might contain.
+ For generality, the syntax record(*)
define an extensible record type that has no explicit
+ field declarations. The item type denoted by record(*)
is equivalent to the item type
+ map(*)
: that is, it allows any map.
+
A record test can constrain only those entries whose keys are strings, but when the record test is marked as extensible, then other entries may be present in the map with non-string keys. Entries whose key is a string can be expressed using an (unquoted) NCName if the key conforms to @@ -6352,15 +6359,20 @@ declare function flatten($tree as tree) as item()* {
Record TestsGiven item types A and B, A ⊆
B is true if any of the following apply:
A is map(*)
and B is record(*)
.
All of the following are true:
A is a record test
B is map(*)
A is a record test.
B is map(*)
or record(*)
.
record(longitude, latitude)
⊆ map(*)
record(longitude, latitude, *)
⊆ record(*)
record(*)
⊆ map(*)