You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/01/15 17:43:49 UTC

[isis] 06/06: ISSI-439: renames mementoSerialization to snapshot

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-439
in repository https://gitbox.apache.org/repos/asf/isis.git

commit ec2664d6211beecb20edb8f22a2baf733ef4822e
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Jan 15 17:43:00 2021 +0000

    ISSI-439: renames mementoSerialization to snapshot
---
 .../2.0.0-M1/mignotes/removed-annotations.adoc     |  4 +-
 .../2.0.0-M1/mignotes/updated-annotations.adoc     |  7 +-
 .../modules/ROOT/pages/2020/2.0.0-M5/mignotes.adoc | 43 ++++++------
 .../pages/index/applib/annotation/Property.adoc    |  4 +-
 .../userguide/modules/fun/pages/view-models.adoc   |  3 +-
 .../adoc/modules/applib-ant/pages/Property.adoc    |  4 +-
 .../{mementoSerialization.adoc => snapshot.adoc}   | 11 ++-
 .../adoc/modules/applib-ant/pages/view-models.adoc |  6 +-
 .../apache/isis/applib/annotation/Property.java    | 10 +--
 .../{MementoSerialization.java => Snapshot.java}   | 19 +++--
 ...ExcludeFacet.java => SnapshotExcludeFacet.java} |  2 +-
 ...ract.java => SnapshotExcludeFacetAbstract.java} |  6 +-
 .../property/PropertyAnnotationFacetFactory.java   |  4 +-
 ...SnapshotExcludeFacetForPropertyAnnotation.java} | 18 ++---
 .../update/PropertySetAndClearFacetFactory.java    |  2 +-
 ...rred.java => SnapshotExcludeFacetInferred.java} |  6 +-
 .../spec/feature/OneToOneAssociation.java          |  4 +-
 .../specimpl/OneToManyAssociationMixedIn.java      |  8 +--
 .../PropertyMethodsFacetFactoryTest.java           | 12 ++--
 ...sistedAnnotationOnPropertyFacetFactoryTest.java | 12 ++--
 .../PropertyAnnotationFacetFactoryTest.java        | 14 ++--
 .../specimpl/OneToOneAssociationAbstractTest.java  |  6 +-
 .../HasAsciiDocDescription_description.java        |  4 +-
 .../HasAsciiDocDescription_sources.java            |  4 +-
 .../child/ActionAssociateWithVm-description.adoc   |  2 +-
 .../dom/annotDomain/Property/PropertyMenu.java     | 22 +++---
 .../PropertySnapshotVm-description.adoc}           | 10 ++-
 .../PropertySnapshotVm.java}                       | 51 +++++++++-----
 .../PropertySnapshotVm.layout.xml}                 |  3 +-
 .../PropertySnapshotVm_takeXmlSnapshot.java}       | 35 ++++++++--
 .../SnapshotExcludedMetaAnnotation.java}           |  8 +--
 .../SnapshotIncludedMetaAnnotation.java}           |  8 +--
 .../PropertySnapshotChildVm-description.adoc}      |  4 +-
 .../snapshot/child/PropertySnapshotChildVm.java}   | 81 +++++++++++-----------
 .../child/PropertySnapshotChildVm.layout.xml}      | 15 ++--
 .../src/main/java/demoapp/dom/menubars.layout.xml  |  2 +-
 .../xmlSnapshotService/XmlSnapshotParentVm.java    |  4 +-
 .../child/XmlSnapshotChildVm-description.adoc      |  2 +-
 .../peer/XmlSnapshotPeerVm-description.adoc        |  2 +-
 39 files changed, 248 insertions(+), 214 deletions(-)

diff --git a/antora/components/relnotes/modules/ROOT/pages/2018/2.0.0-M1/mignotes/removed-annotations.adoc b/antora/components/relnotes/modules/ROOT/pages/2018/2.0.0-M1/mignotes/removed-annotations.adoc
index 71f1d6a..6b5ac86 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2018/2.0.0-M1/mignotes/removed-annotations.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2018/2.0.0-M1/mignotes/removed-annotations.adoc
@@ -67,7 +67,7 @@ Similarly, the `Bulk.InteractionContext` domain service is replaced with the lin
 
 |`@Collection`
 |`notPersisted`
-| Removed, replaced with link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Collection_mementoSerialization[`@Collection#mementoSerialization()`]
+| Removed, no replacement.
 
 |`@CollectionInteraction`
 |
@@ -247,7 +247,7 @@ ChangedEvent`
 
 |`@Property`
 |`notPersisted`
-| Removed, replaced with link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Collection_mementoSerialization[`@Collection#mementoSerialization()`]
+| Removed, replaced with link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant_Property_snapshot[`@Property#snapshot()`]
 
 |`@PropertyInteraction`
 |
diff --git a/antora/components/relnotes/modules/ROOT/pages/2018/2.0.0-M1/mignotes/updated-annotations.adoc b/antora/components/relnotes/modules/ROOT/pages/2018/2.0.0-M1/mignotes/updated-annotations.adoc
index fce030f..611524f 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2018/2.0.0-M1/mignotes/updated-annotations.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2018/2.0.0-M1/mignotes/updated-annotations.adoc
@@ -56,7 +56,7 @@ In all cases `NOT_SPECIFIED` is the new default.
 | Default changed from `BELOW` to `NOT_SPECIFIED`.
 
 
-.3+|link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant-Collection[`@Collection`]
+.2+|link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant-Collection[`@Collection`]
 
 | link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant-Collection_hidden[`hidden`]
 | Default changed from `NOWHERE` to `NOT_SPECIFIED`.
@@ -64,9 +64,6 @@ In all cases `NOT_SPECIFIED` is the new default.
 | link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant-Collection_editing[`editing`]
 | Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
 
-| link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant-Collection_mementoSerialization[`mementoSerialization`]
-| Replaces `notPersisted`, taking values of `INCLUDED`, `EXCLUDED` or `NOT_SPECIFIED`.
-Defaults to `NOT_SPECIFIED`.
 
 
 
@@ -125,7 +122,7 @@ Defaults to `NOT_SPECIFIED`.
 | link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant-Property_hidden[`hidden`]
 | Default changed from `NOWHERE` to `NOT_SPECIFIED`.
 
-| link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant-Property_mementoSerialization[`mementoSerialization`]
+| link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#_rgant-Property_snapshot[`snapshot`]
 | Replaces `notPersisted`, taking values of `INCLUDED`, `EXCLUDED` or `NOT_SPECIFIED`.
 Defaults to `NOT_SPECIFIED`.
 
diff --git a/antora/components/relnotes/modules/ROOT/pages/2020/2.0.0-M5/mignotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2020/2.0.0-M5/mignotes.adoc
index d5548de..0c0bb1e 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2020/2.0.0-M5/mignotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2020/2.0.0-M5/mignotes.adoc
@@ -27,8 +27,8 @@ isis.core.metaModel.validator.serviceActionsOnly=true // <.>
 isis.core.metaModel.validator.mixins-only=true        // <.>
 ----
 <.> `@DomainService(natureOfService=VIEW/REST)` is now solely used for UI menu action providers and REST end-points.
-There is no longer the need to validate uses of `natureOfService=DOMAIN` as this option was removed.  
-<.> Support for services that contribute members to other `DomainObjects` was removed. Use `Mixins` instead. 
+There is no longer the need to validate uses of `natureOfService=DOMAIN` as this option was removed.
+<.> Support for services that contribute members to other `DomainObjects` was removed. Use `Mixins` instead.
 
 See the former java-doc for hints on how to migrate the previous options.
 
@@ -87,19 +87,16 @@ VIEW_CONTRIBUTIONS_ONLY,
 | was
 | now what?
 
-| `@ActionLayout(contributed=...)` 
+| `@ActionLayout(contributed=...)`
 | was only effective on mixin methods; use `@Action`, `@Property` or `@Collection` instead
 
-| `@Action/@Property(command=...)` 
+| `@Action/@Property(command=...)`
 | replaced with `commandPublishing`
 
-| `@Action/@Property(publish=...)` 
+| `@Action/@Property(publish=...)`
 | replaced with `executionPublishing`
 
-| `@Collection(mementoSerialization=...)`
-| TODO: work in progress
-
-| `@DomainObject(audit=...)` 
+| `@DomainObject(audit=...)`
 | replaced with `entityChangePublishing`
 
 | `@DomainObject(nature=...)`
@@ -108,23 +105,23 @@ VIEW_CONTRIBUTIONS_ONLY,
 * `INMEMORY_ENTITY`
 | use `@DomainObject(nature=VIEW_MODEL)` instead
 
-| `@DomainObject(publish=...)` 
+| `@DomainObject(publish=...)`
 | replaced with `entityChangePublishing`
 
 | `@DomainService(repositoryFor=...)`
-| if this domain service acts as a repository for an entity type, 
+| if this domain service acts as a repository for an entity type,
 specify that entity type (was never implemented)
 
 | `@Mixin`
-| use `@Action`, `@Property` or `@Collection` instead; 
+| use `@Action`, `@Property` or `@Collection` instead;
 
-for more fine grained control (eg. setting the mixin's method name) 
+for more fine grained control (eg. setting the mixin's method name)
 use `@DomainObject(nature=MIXIN, ...)` combined with one of the above
 
 | `@ViewModel`
 | use `@DomainObject(nature=VIEW_MODEL)` instead
 
-| `@ViewModelLayout` 
+| `@ViewModelLayout`
 | use `@DomainObjectLayout` instead
 
 |===
@@ -190,18 +187,18 @@ CommandServiceInternal -> CommandPublisher
 | new
 
 | AuthenticationSession
-| Authentication (no longer holds MessageBroker or session attributes, is now immutable) 
+| Authentication (no longer holds MessageBroker or session attributes, is now immutable)
 
-| AuthenticationSessionStrategy 
+| AuthenticationSessionStrategy
 | AuthenticationStrategy
 
-| AuthenticationSessionStrategyBasicAuth (*1*)  
-| AuthenticationStrategyBasicAuth 
+| AuthenticationSessionStrategyBasicAuth (*1*)
+| AuthenticationStrategyBasicAuth
 
-| AuthenticationSessionStrategyDefault (*1*) 
+| AuthenticationSessionStrategyDefault (*1*)
 | AuthenticationStrategyDefault
 
-| AuthenticationSessionTracker#getInteraction : Interaction  
+| AuthenticationSessionTracker#getInteraction : Interaction
 | AuthenticationContext#currentInteraction : *Optional*<Interaction>
 
 | Clock (moved from applib module to fixture-applib module)
@@ -220,10 +217,10 @@ CommandServiceInternal -> CommandPublisher
 | MessageBroker is held by InteractionSession
 
 | QueryDefault removed
-| 
+|
 [line-through]#new QueryDefault<>(CommandJdo.class, "findByParent",
                         "parent", parent));#
-                        
+
 Query.named(CommandJdo.class, "findByParent") +
     .withParameter("parent", parent));
 
@@ -248,7 +245,7 @@ Query.named(CommandJdo.class, "findByParent") +
 <T> T detachedEntity(Class<T> ofType);     // <.>
 ----
 <.> if applicable use `<T> T detachedEntity(T entity)` instead ... "new is the new new", passing
-in a new-ed up (entity) instance is more flexible and also more error prone, eg. it allows the compiler to check 
+in a new-ed up (entity) instance is more flexible and also more error prone, eg. it allows the compiler to check
 validity of the used constructor rather than doing construction reflective at runtime
 
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Property.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Property.adoc
index ba77536..34be6e0 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Property.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Property.adoc
@@ -26,7 +26,7 @@ Domain semantics for domain object property.
 
   int maxLength() default -1; // <.>
 
-  MementoSerialization mementoSerialization() default MementoSerialization.NOT_SPECIFIED; // <.>
+  Snapshot snapshot() default Snapshot.NOT_SPECIFIED; // <.>
 
   Class<? extends Specification>[] mustSatisfy() default {}; // <.>
 
@@ -107,7 +107,7 @@ The maximum entry length of a field.
 
 The default value (-1) indicates that no maxLength has been specified.
 --
-<.> `[teal]#*_mementoSerialization_*#` : `xref:system:generated:index/applib/annotation/MementoSerialization.adoc[MementoSerialization]`
+<.> `[teal]#*_snapshot_*#` : `xref:system:generated:index/applib/annotation/MementoSerialization.adoc[MementoSerialization]`
 +
 --
 Indicates whether the property should be included or excluded from mementos.
diff --git a/api/adoc/userguide/modules/fun/pages/view-models.adoc b/api/adoc/userguide/modules/fun/pages/view-models.adoc
index a5130ba..fef7075 100644
--- a/api/adoc/userguide/modules/fun/pages/view-models.adoc
+++ b/api/adoc/userguide/modules/fun/pages/view-models.adoc
@@ -241,7 +241,8 @@ public class CustomerRecordOnSAP {
     // ...
 }
 ----
-|Annotated with xref:refguide:applib-ant:DomainObject.adoc#nature[`@DomainObject#nature`] and a nature of `EXTERNAL_ENTITY`, with memento derived automatically from the properties of the domain object.  Collections are ignored, as are any properties annotated as xref:refguide:applib-ant:Property.adoc#mementoSerialization[memento serialization].
+|Annotated with xref:refguide:applib-ant:DomainObject.adoc#nature[`@DomainObject#nature`] and a nature of `EXTERNAL_ENTITY`, with memento derived automatically from the properties of the domain object.
+Collections are ignored, as are any properties annotated as xref:refguide:applib-ant:Property.adoc#snapshot[snapshot=EXCLUDED].
 
 | In-memory entity
 | WARNING: TODO INMEMORY_ENTITY was removed, this use-case is still valid for consideration, what to do?
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/Property.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/Property.adoc
index 5f99732..b86a33c 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/Property.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/Property.adoc
@@ -54,7 +54,7 @@ Maximum number of characters for string parameters; ignored otherwise +
 +
 TIP: In many/most cases you should however use xref:refguide:applib-ant:Column.adoc[`@Column#length()`]
 
-<.> xref:refguide:applib-ant:Property.adoc#mementoSerialization[`mementoSerialization()`]
+<.> xref:refguide:applib-ant:Property.adoc#snapshot[`snapshot()`]
 +
 Whether to exclude from snapshots. +
 
@@ -134,7 +134,7 @@ include::Property/fileAccept.adoc[leveloffset=+1]
 include::Property/hidden.adoc[leveloffset=+1]
 include::Property/maxLength.adoc[leveloffset=+1]
 include::Property/mustSatisfy.adoc[leveloffset=+1]
-include::Property/mementoSerialization.adoc[leveloffset=+1]
+include::Property/snapshot.adoc[leveloffset=+1]
 include::Property/optionality.adoc[leveloffset=+1]
 include::Property/projecting.adoc[leveloffset=+1]
 include::Property/regexPattern.adoc[leveloffset=+1]
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/Property/mementoSerialization.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/Property/snapshot.adoc
similarity index 73%
rename from api/applib/src/main/adoc/modules/applib-ant/pages/Property/mementoSerialization.adoc
rename to api/applib/src/main/adoc/modules/applib-ant/pages/Property/snapshot.adoc
index 8b584a7..91ce4c7 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/Property/mementoSerialization.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/Property/snapshot.adoc
@@ -1,12 +1,12 @@
-[#mementoSerialization]
-= `mementoSerialization()`
+[#snapshot]
+= `snapshot()`
 
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 :page-partial:
 
 CAUTION: this documentation may be inaccurate.
 
-The `mementoSerialization` attribute indicates whether the property should be included/excluded from any snapshots generated by the xref:refguide:applib-svc:XmlSnapshotService.adoc[`XmlSnapshotService`].
+The `snapshot` attribute indicates whether the property should be included/excluded from any snapshots generated by the xref:refguide:applib-svc:XmlSnapshotService.adoc[`XmlSnapshotService`].
 
 For example:
 
@@ -17,7 +17,7 @@ import lombok.Setter;
 
 public class Order {
 
-    @Property(mementoSerialization=EXCLUDED)
+    @Property(snapshot=EXCLUDED)
     @Getter @Setter
     private Order previousOrder;
 
@@ -35,7 +35,4 @@ public class Order {
 }
 ----
 
-== See also
-
-This attribute is also supported for xref:refguide:applib-ant:Collection.adoc#mementoSerialization[collections].
 
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/view-models.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/view-models.adoc
index bcce4c8..cb115a0 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/view-models.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/view-models.adoc
@@ -50,7 +50,7 @@ See this xref:userguide:btb:about.adoc#view-model-instantiation[tip] for further
 View models must have a no-arg constructor; this is used internally by the framework for subsequent "recreation".
 
 The view model's memento will be derived from the value of the view model object's properties.
-Any xref:refguide:applib-ant:Property.adoc#mementoSerialization[`@Property#mementoSerialization`] properties will be excluded from the memento, as will any properties excluded from the metamodel using xref:refguide:applib-ant:Programmatic.adoc[`@Programmatic`].
+Any properties annotated with xref:refguide:applib-ant:Programmatic.adoc[`@Programmatic`] will be excluded from the memento.
 Properties that are merely xref:refguide:applib-ant:Property.adoc#hidden[hidden] _are_ included in the memento.
 
 View models, as defined by `@DomainObject(nature=VIEW_MODEL)` have some limitations:
@@ -64,8 +64,8 @@ If you are using view models heavily, you may wish to restrict yourself to just
 
 [NOTE]
 ====
-The `@DomainObject` annotation allows the `objectType` to be specified, 
-meaning that it is compatible with the metamodel validation check enabled by the 
+The `@DomainObject` annotation allows the `objectType` to be specified,
+meaning that it is compatible with the metamodel validation check enabled by the
 xref:refguide:config:configuring-core.adoc#metamodel-validation[`explicitObjectType`] configuration property.
 
 Instead, use xref:refguide:applib-ant:DomainObject.adoc#nature[`@DomainObject#nature()`] with `Nature.VIEW_MODEL`, and specify xref:refguide:applib-ant:DomainObject.adoc#objectType[`@DomainObject#objectType()`].
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/Property.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
index 1308583..526a68d 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
@@ -110,13 +110,13 @@ public @interface Property {
             default "";
 
     /**
-     * Whether {@link Interaction.Execution}s 
-     * (triggered property edits), should be dispatched to 
+     * Whether {@link Interaction.Execution}s
+     * (triggered property edits), should be dispatched to
      * {@link ExecutionSubscriber}s.
      */
     Publishing executionPublishing()
             default Publishing.NOT_SPECIFIED;
-    
+
     /**
      * For uploading {@link Blob} or {@link Clob}, optionally restrict the files accepted (eg <tt>.xslx</tt>).
      *
@@ -153,8 +153,8 @@ public @interface Property {
      *     <code>javax.jdo.annotations.NotPersistent</code>
      * </p>
      */
-    MementoSerialization mementoSerialization()
-            default MementoSerialization.NOT_SPECIFIED;
+    Snapshot snapshot()
+            default Snapshot.NOT_SPECIFIED;
 
     /**
      * The {@link org.apache.isis.applib.spec.Specification}(s) to be satisfied by this property.
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/MementoSerialization.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/Snapshot.java
similarity index 67%
rename from api/applib/src/main/java/org/apache/isis/applib/annotation/MementoSerialization.java
rename to api/applib/src/main/java/org/apache/isis/applib/annotation/Snapshot.java
index cf670a6..145951e 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/MementoSerialization.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/Snapshot.java
@@ -19,29 +19,26 @@
 package org.apache.isis.applib.annotation;
 
 /**
- * Whether the property or collection is included if the domain object is serialized into a memento.
- * @since 1.x {@index}
+ * Whether the property is included if the domain object graph is serialized
+ * into a snapshot.
+ * @since 2.x {@index}
  */
-public enum MementoSerialization {
+public enum Snapshot {
 
     /**
-     * Property or collection is included in any mementos.
+     * Property is included in any snapshots.
      * This is the fallback/default if not explicitly excluded.
      */
     INCLUDED,
 
     /**
-     * Property or collection's state is excluded from any mementos.
-     *
-     * <p>
-     *     Corresponds to <tt>@Property(notPersisted=true)</tt> or <tt>@Collection(notPersisted=true)</tt> prior to Isis 2.x
-     * </p>
+     * Property is excluded from any snapshots.
      */
     EXCLUDED,
 
     /**
-     * Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta
-     * annotations or superclasses/interfaces).
+     * Ignore the value provided by this annotation (meaning that the framework
+     * will keep searching, in meta annotations or superclasses/interfaces).
      */
     NOT_SPECIFIED
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/memserexcl/MementoSerializationExcludeFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/memserexcl/SnapshotExcludeFacet.java
similarity index 94%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/memserexcl/MementoSerializationExcludeFacet.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/memserexcl/SnapshotExcludeFacet.java
index 029221c..fd3e341 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/memserexcl/MementoSerializationExcludeFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/memserexcl/SnapshotExcludeFacet.java
@@ -25,6 +25,6 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
  * Indicates that a property should be excluded from snapshots (as per
  * <code>XmlSnapshotService</code>.
  */
-public interface MementoSerializationExcludeFacet extends Facet {
+public interface SnapshotExcludeFacet extends Facet {
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/memserexcl/MementoSerializationExcludeFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/memserexcl/SnapshotExcludeFacetAbstract.java
similarity index 81%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/memserexcl/MementoSerializationExcludeFacetAbstract.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/memserexcl/SnapshotExcludeFacetAbstract.java
index a8d17dd..5798aeb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/memserexcl/MementoSerializationExcludeFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/memserexcl/SnapshotExcludeFacetAbstract.java
@@ -23,13 +23,13 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public abstract class MementoSerializationExcludeFacetAbstract extends FacetAbstract implements MementoSerializationExcludeFacet {
+public abstract class SnapshotExcludeFacetAbstract extends FacetAbstract implements SnapshotExcludeFacet {
 
     public static Class<? extends Facet> type() {
-        return MementoSerializationExcludeFacet.class;
+        return SnapshotExcludeFacet.class;
     }
 
-    public MementoSerializationExcludeFacetAbstract(final FacetHolder holder) {
+    public SnapshotExcludeFacetAbstract(final FacetHolder holder) {
         super(type(), holder);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
index e3d445d..57f46f1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
@@ -55,7 +55,7 @@ import org.apache.isis.core.metamodel.facets.properties.property.modify.Property
 import org.apache.isis.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromDefault;
 import org.apache.isis.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromPropertyAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.property.mustsatisfy.MustSatisfySpecificationFacetForPropertyAnnotation;
-import org.apache.isis.core.metamodel.facets.properties.property.notpersisted.MementoSerializationExcludeFacetForPropertyAnnotation;
+import org.apache.isis.core.metamodel.facets.properties.property.notpersisted.SnapshotExcludeFacetForPropertyAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.property.regex.RegExFacetForPatternAnnotationOnProperty;
 import org.apache.isis.core.metamodel.facets.properties.property.regex.RegExFacetForPropertyAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
@@ -315,7 +315,7 @@ implements MetaModelRefiner {
         val holder = processMethodContext.getFacetHolder();
 
         // search for @Property(notPersisted=...)
-        val facet = MementoSerializationExcludeFacetForPropertyAnnotation.create(propertyIfAny, holder);
+        val facet = SnapshotExcludeFacetForPropertyAnnotation.create(propertyIfAny, holder);
 
         super.addFacet(facet);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/notpersisted/MementoSerializationExcludeFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/notpersisted/SnapshotExcludeFacetForPropertyAnnotation.java
similarity index 66%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/notpersisted/MementoSerializationExcludeFacetForPropertyAnnotation.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/notpersisted/SnapshotExcludeFacetForPropertyAnnotation.java
index d69b5b0..494ebfc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/notpersisted/MementoSerializationExcludeFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/notpersisted/SnapshotExcludeFacetForPropertyAnnotation.java
@@ -21,26 +21,26 @@ package org.apache.isis.core.metamodel.facets.properties.property.notpersisted;
 
 import java.util.Optional;
 
-import org.apache.isis.applib.annotation.MementoSerialization;
+import org.apache.isis.applib.annotation.Snapshot;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.MementoSerializationExcludeFacet;
-import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.MementoSerializationExcludeFacetAbstract;
+import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacetAbstract;
 
-public class MementoSerializationExcludeFacetForPropertyAnnotation extends MementoSerializationExcludeFacetAbstract {
+public class SnapshotExcludeFacetForPropertyAnnotation extends SnapshotExcludeFacetAbstract {
 
-    public MementoSerializationExcludeFacetForPropertyAnnotation(final FacetHolder holder) {
+    public SnapshotExcludeFacetForPropertyAnnotation(final FacetHolder holder) {
         super(holder);
     }
 
-    public static MementoSerializationExcludeFacet create(
+    public static SnapshotExcludeFacet create(
             final Optional<Property> propertyIfAny,
             final FacetHolder holder) {
 
         return propertyIfAny
-                .map(Property::mementoSerialization)
-                .filter(mementoSerialization -> mementoSerialization == MementoSerialization.EXCLUDED)
-                .map(mementoSerialization -> new MementoSerializationExcludeFacetForPropertyAnnotation(holder))
+                .map(Property::snapshot)
+                .filter(snapshot -> snapshot == Snapshot.EXCLUDED)
+                .map(snapshot -> new SnapshotExcludeFacetForPropertyAnnotation(holder))
                 .orElse(null);
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertySetAndClearFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertySetAndClearFacetFactory.java
index 013bd29..0d66ed1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertySetAndClearFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertySetAndClearFacetFactory.java
@@ -75,7 +75,7 @@ public class PropertySetAndClearFacetFactory extends MethodPrefixBasedFacetFacto
             FacetUtil.addFacet(new PropertySetterFacetViaSetterMethod(setMethod, property));
             FacetUtil.addFacet(new PropertyInitializationFacetViaSetterMethod(setMethod, property));
         } else {
-            FacetUtil.addFacet(new NotPersistableFacetInferred(property));
+            FacetUtil.addFacet(new SnapshotExcludeFacetInferred(property));
 
             // previously we also added the DisabledFacetAlwaysEverywhere facet here.
             // however, the PropertyModifyFacetFactory (which comes next) might install a PropertySetterFacet instead.
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/NotPersistableFacetInferred.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/SnapshotExcludeFacetInferred.java
similarity index 83%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/NotPersistableFacetInferred.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/SnapshotExcludeFacetInferred.java
index 8846339..31a8ed8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/NotPersistableFacetInferred.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/SnapshotExcludeFacetInferred.java
@@ -20,11 +20,11 @@
 package org.apache.isis.core.metamodel.facets.properties.update;
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.MementoSerializationExcludeFacetAbstract;
+import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacetAbstract;
 
-public class NotPersistableFacetInferred extends MementoSerializationExcludeFacetAbstract {
+public class SnapshotExcludeFacetInferred extends SnapshotExcludeFacetAbstract {
 
-    public NotPersistableFacetInferred(final FacetHolder holder) {
+    public SnapshotExcludeFacetInferred(final FacetHolder holder) {
         super(holder);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
index b6861c7..9f184c4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
@@ -21,7 +21,7 @@ package org.apache.isis.core.metamodel.spec.feature;
 
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.MementoSerializationExcludeFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
 /**
@@ -56,7 +56,7 @@ public interface OneToOneAssociation extends ObjectAssociation, OneToOneFeature,
      * not be persisted.
      */
     default boolean isNotPersisted() {
-        return containsFacet(MementoSerializationExcludeFacet.class);
+        return containsFacet(SnapshotExcludeFacet.class);
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
index b42e35f..3b1c6a4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
@@ -33,8 +33,8 @@ import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetAbstract;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
 import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
 import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetForContributee;
-import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.MementoSerializationExcludeFacet;
-import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.MementoSerializationExcludeFacetAbstract;
+import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacetAbstract;
 import org.apache.isis.core.metamodel.interactions.InteractionHead;
 import org.apache.isis.core.metamodel.services.publishing.ExecutionPublisher;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -100,11 +100,11 @@ public class OneToManyAssociationMixedIn extends OneToManyAssociationDefault imp
         //
         // ensure the mixedIn collection cannot be modified, and derive its TypeOfFaccet
         //
-        final MementoSerializationExcludeFacet mementoSerializationExcludeFacet = new MementoSerializationExcludeFacetAbstract(this) {};
+        final SnapshotExcludeFacet snapshotExcludeFacet = new SnapshotExcludeFacetAbstract(this) {};
         final DisabledFacet disabledFacet = disabledFacet();
         final TypeOfFacet typeOfFacet = new TypeOfFacetAbstract(getSpecification().getCorrespondingClass(), this) {};
 
-        FacetUtil.addFacet(mementoSerializationExcludeFacet);
+        FacetUtil.addFacet(snapshotExcludeFacet);
         FacetUtil.addFacet(disabledFacet);
         FacetUtil.addFacet(typeOfFacet);
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
index a22194b..161abeb 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
@@ -35,7 +35,7 @@ import org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContex
 import org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacetViaMethod;
 import org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacetViaMethodFactory;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.MementoSerializationExcludeFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet;
 import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor;
 import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessorFactory;
 import org.apache.isis.core.metamodel.facets.properties.autocomplete.PropertyAutoCompleteFacet;
@@ -48,7 +48,7 @@ import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefault
 import org.apache.isis.core.metamodel.facets.properties.defaults.method.PropertyDefaultFacetViaMethod;
 import org.apache.isis.core.metamodel.facets.properties.defaults.method.PropertyDefaultFacetViaMethodFactory;
 import org.apache.isis.core.metamodel.facets.properties.disabled.inferred.DisabledFacetOnPropertyInferredFactory;
-import org.apache.isis.core.metamodel.facets.properties.update.NotPersistableFacetInferred;
+import org.apache.isis.core.metamodel.facets.properties.update.SnapshotExcludeFacetInferred;
 import org.apache.isis.core.metamodel.facets.properties.update.PropertyModifyFacetFactory;
 import org.apache.isis.core.metamodel.facets.properties.update.PropertySetAndClearFacetFactory;
 import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
@@ -175,8 +175,8 @@ public class PropertyMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
 
         facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod));
 
-        assertNull(facetedMethod.getFacet(MementoSerializationExcludeFacet.class));
-        assertNull(facetedMethod.getFacet(MementoSerializationExcludeFacet.class));
+        assertNull(facetedMethod.getFacet(SnapshotExcludeFacet.class));
+        assertNull(facetedMethod.getFacet(SnapshotExcludeFacet.class));
     }
 
     public void testSetterFacetIsInstalledForModifyMethodAndMethodRemoved() {
@@ -239,9 +239,9 @@ public class PropertyMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         facetFactoryForModify.process(processMethodContext);
         disabledFacetOnPropertyInferredFactory.process(processMethodContext);
 
-        Facet facet = facetedMethod.getFacet(MementoSerializationExcludeFacet.class);
+        Facet facet = facetedMethod.getFacet(SnapshotExcludeFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof NotPersistableFacetInferred);
+        assertTrue(facet instanceof SnapshotExcludeFacetInferred);
 
         facet = facetedMethod.getFacet(DisabledFacet.class);
         assertNull(facet);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/NotPersistedAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/NotPersistedAnnotationOnPropertyFacetFactoryTest.java
index d38495d..b19f01a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/NotPersistedAnnotationOnPropertyFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/NotPersistedAnnotationOnPropertyFacetFactoryTest.java
@@ -21,13 +21,13 @@ package org.apache.isis.core.metamodel.facets.properties.property;
 
 import java.lang.reflect.Method;
 
-import org.apache.isis.applib.annotation.MementoSerialization;
+import org.apache.isis.applib.annotation.Snapshot;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
-import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.MementoSerializationExcludeFacet;
-import org.apache.isis.core.metamodel.facets.properties.property.notpersisted.MementoSerializationExcludeFacetForPropertyAnnotation;
+import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet;
+import org.apache.isis.core.metamodel.facets.properties.property.notpersisted.SnapshotExcludeFacetForPropertyAnnotation;
 
 import lombok.val;
 
@@ -51,7 +51,7 @@ public class NotPersistedAnnotationOnPropertyFacetFactoryTest extends AbstractFa
 
         class Customer {
             @SuppressWarnings("unused")
-            @Property(mementoSerialization = MementoSerialization.EXCLUDED)
+            @Property(snapshot = Snapshot.EXCLUDED)
             public String getFirstName() {
                 return null;
             }
@@ -60,9 +60,9 @@ public class NotPersistedAnnotationOnPropertyFacetFactoryTest extends AbstractFa
 
         processNotPersisted(facetFactory, new FacetFactory.ProcessMethodContext(Customer.class, null, method, methodRemover, facetedMethod));
 
-        final Facet facet = facetedMethod.getFacet(MementoSerializationExcludeFacet.class);
+        final Facet facet = facetedMethod.getFacet(SnapshotExcludeFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof MementoSerializationExcludeFacetForPropertyAnnotation);
+        assertTrue(facet instanceof SnapshotExcludeFacetForPropertyAnnotation);
 
         assertNoMethodsRemoved();
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
index 8a636e1..0692b73 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
@@ -33,7 +33,7 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertTrue;
 
-import org.apache.isis.applib.annotation.MementoSerialization;
+import org.apache.isis.applib.annotation.Snapshot;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.Where;
@@ -54,7 +54,7 @@ import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.mustsatisfyspec.MustSatisfySpecificationFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacetAbstract;
-import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.MementoSerializationExcludeFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet;
 import org.apache.isis.core.metamodel.facets.properties.property.disabled.DisabledFacetForPropertyAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation;
@@ -67,7 +67,7 @@ import org.apache.isis.core.metamodel.facets.properties.property.modify.Property
 import org.apache.isis.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromDefault;
 import org.apache.isis.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromPropertyAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.property.mustsatisfy.MustSatisfySpecificationFacetForPropertyAnnotation;
-import org.apache.isis.core.metamodel.facets.properties.property.notpersisted.MementoSerializationExcludeFacetForPropertyAnnotation;
+import org.apache.isis.core.metamodel.facets.properties.property.notpersisted.SnapshotExcludeFacetForPropertyAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.property.regex.RegExFacetForPropertyAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacetAbstract;
@@ -581,7 +581,7 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
         public void withAnnotation() {
 
             class Customer {
-                @Property(mementoSerialization = MementoSerialization.EXCLUDED)
+                @Property(snapshot = Snapshot.EXCLUDED)
                 @Getter @Setter private String name;
             }
 
@@ -595,9 +595,9 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
             processNotPersisted(facetFactory, processMethodContext);
 
             // then
-            final MementoSerializationExcludeFacet mementoSerializationExcludeFacet = facetedMethod.getFacet(MementoSerializationExcludeFacet.class);
-            Assert.assertNotNull(mementoSerializationExcludeFacet);
-            Assert.assertTrue(mementoSerializationExcludeFacet instanceof MementoSerializationExcludeFacetForPropertyAnnotation);
+            final SnapshotExcludeFacet snapshotExcludeFacet = facetedMethod.getFacet(SnapshotExcludeFacet.class);
+            Assert.assertNotNull(snapshotExcludeFacet);
+            Assert.assertTrue(snapshotExcludeFacet instanceof SnapshotExcludeFacetForPropertyAnnotation);
         }
 
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationAbstractTest.java
index d22993d..79716b5 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationAbstractTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationAbstractTest.java
@@ -36,7 +36,7 @@ import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2.Mode;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.MementoSerializationExcludeFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -148,14 +148,14 @@ public class OneToOneAssociationAbstractTest {
 
     @Test
     public void notPersistedWhenDerived() throws Exception {
-        final MementoSerializationExcludeFacet mockFacet = mockFacetIgnoring(MementoSerializationExcludeFacet.class);
+        final SnapshotExcludeFacet mockFacet = mockFacetIgnoring(SnapshotExcludeFacet.class);
         facetedMethod.addFacet(mockFacet);
         assertTrue(objectAssociation.isNotPersisted());
     }
 
     @Test
     public void notPersistedWhenFlaggedAsNotPersisted() throws Exception {
-        final MementoSerializationExcludeFacet mockFacet = mockFacetIgnoring(MementoSerializationExcludeFacet.class);
+        final SnapshotExcludeFacet mockFacet = mockFacetIgnoring(SnapshotExcludeFacet.class);
         facetedMethod.addFacet(mockFacet);
         assertTrue(objectAssociation.isNotPersisted());
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_description.java b/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_description.java
index edcbff2..1ba84b8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_description.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_description.java
@@ -22,7 +22,7 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.MementoSerialization;
+import org.apache.isis.applib.annotation.Snapshot;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Where;
@@ -33,7 +33,7 @@ import lombok.RequiredArgsConstructor;
 import demoapp.dom._infra.resources.AsciiDocReaderService;
 
 @SuppressWarnings("CdiManagedBeanInconsistencyInspection")
-@Property(mementoSerialization = MementoSerialization.EXCLUDED)
+@Property(snapshot = Snapshot.EXCLUDED)
 @RequiredArgsConstructor
 public class HasAsciiDocDescription_description {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_sources.java b/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_sources.java
index 9aec142..1f0a24b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_sources.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_sources.java
@@ -22,7 +22,7 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.MementoSerialization;
+import org.apache.isis.applib.annotation.Snapshot;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Where;
@@ -33,7 +33,7 @@ import lombok.val;
 
 import demoapp.dom._infra.resources.MarkupVariableResolverService;
 
-@Property(mementoSerialization = MementoSerialization.EXCLUDED)
+@Property(snapshot = Snapshot.EXCLUDED)
 @RequiredArgsConstructor @SuppressWarnings("CdiManagedBeanInconsistencyInspection")
 public class HasAsciiDocDescription_sources {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/associateWith/child/ActionAssociateWithVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/associateWith/child/ActionAssociateWithVm-description.adoc
index e755465..e781e8d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/associateWith/child/ActionAssociateWithVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Action/associateWith/child/ActionAssociateWithVm-description.adoc
@@ -1,3 +1,3 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-This child object exists just to act as the element of the two collections of the `PropertyMementoSerializationVm` demo object.
+This child object exists just to act as the element of the two collections of the `PropertySnapshotVm` demo object.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/PropertyMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/PropertyMenu.java
index aaf17a7..e284d38 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/PropertyMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/PropertyMenu.java
@@ -30,7 +30,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.applib.value.Clob;
 
-import demoapp.dom.annotDomain.Property.mementoSerialization.PropertyMementoSerializationVm;
+import demoapp.dom.annotDomain.Property.snapshot.PropertySnapshotVm;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
@@ -50,6 +50,7 @@ import demoapp.dom.annotDomain.Property.projecting.PropertyProjectingVm;
 import demoapp.dom.annotDomain.Property.projecting.child.PropertyProjectingChildVm;
 import demoapp.dom.annotDomain.Property.projecting.jdo.PropertyProjectingChildJdoEntities;
 import demoapp.dom.annotDomain.Property.regexPattern.PropertyRegexPatternVm;
+import demoapp.dom.annotDomain.Property.snapshot.child.PropertySnapshotChildVm;
 import demoapp.dom.types.Samples;
 
 @DomainService(nature=NatureOfService.VIEW, objectType = "demo.PropertyMenu")
@@ -132,13 +133,6 @@ public class PropertyMenu {
     }
 
     @Action(semantics = SemanticsOf.SAFE)
-    @ActionLayout(cssClassFa="fa-camera", describedAs = "Snapshot inclusion/exclusion")
-    public PropertyMementoSerializationVm mementoSerialization(){
-        val vm = new PropertyMementoSerializationVm("value");
-        return new PropertyMementoSerializationVm("value");
-    }
-
-    @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-star-half-alt", describedAs = "Regular expressions, such as email")
     public PropertyMustSatisfyVm mustSatisfy(){
         val vm = new PropertyMustSatisfyVm();
@@ -182,6 +176,18 @@ public class PropertyMenu {
         return vm;
     }
 
+    @Action(semantics = SemanticsOf.SAFE)
+    @ActionLayout(cssClassFa="fa-camera", describedAs = "Snapshot inclusion/exclusion")
+    public PropertySnapshotVm snapshot(){
+        val vm = new PropertySnapshotVm("value");
+
+        vm.getChildren().add(new PropertySnapshotChildVm("child 1"));
+        vm.getChildren().add(new PropertySnapshotChildVm("child 2"));
+        vm.getChildren().add(new PropertySnapshotChildVm("child 3"));
+
+        return new PropertySnapshotVm("value");
+    }
+
     private void setSampleBlob(String suffix, Consumer<Blob> blobConsumer) {
         blobSamples.stream()
                 .filter(x -> x.getName().endsWith(suffix))
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/PropertySnapshotVm-description.adoc
similarity index 92%
rename from examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/PropertySnapshotVm-description.adoc
index 0c0bd9b..ff7689d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/PropertySnapshotVm-description.adoc
@@ -1,6 +1,6 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-The `mementoSerialization` element of the `@Property` annotation specifies whether a property should be included in an XML snapshot, as created by the `XmlSnapshotService`:
+The `snapshot` element of the `@Property` annotation specifies whether a property should be included in an XML snapshot, as created by the `XmlSnapshotService`:
 
 The `takeSnapshot` mixin action shows how this service is used:
 
@@ -76,3 +76,11 @@ include::MementoSerializationExcludedMetaAnnotation.java[tags=class]
 == Snapshot
 
 TODO: inline the resultant snapshot
+
+[source,xml]
+.snapshot.xml
+----
+----
+
+
+
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm.java b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/PropertySnapshotVm.java
similarity index 72%
rename from examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm.java
rename to examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/PropertySnapshotVm.java
index abb8b44..370e279 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/PropertySnapshotVm.java
@@ -16,18 +16,23 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.annotDomain.Property.mementoSerialization;
+package demoapp.dom.annotDomain.Property.snapshot;
+
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
+import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.MementoSerialization;
+import org.apache.isis.applib.annotation.Snapshot;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
@@ -37,19 +42,20 @@ import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.annotDomain.Property.snapshot.child.PropertySnapshotChildVm;
 
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
 @DomainObject(
     nature=Nature.VIEW_MODEL,
-    objectType = "demo.PropertyMementoSerializationVm",
+    objectType = "demo.PropertySnapshotVm",
     editing = Editing.ENABLED
 )
 @NoArgsConstructor
-public class PropertyMementoSerializationVm implements HasAsciiDocDescription {
+public class PropertySnapshotVm implements HasAsciiDocDescription {
 
-    public PropertyMementoSerializationVm(String text) {
+    public PropertySnapshotVm(String text) {
         this.text = text;
         this.excludedProperty = text;
         this.includedProperty = text;
@@ -59,7 +65,7 @@ public class PropertyMementoSerializationVm implements HasAsciiDocDescription {
     }
 
     public String title() {
-        return "PropertyMementoSerializationVm";
+        return "PropertySnapshotVm";
     }
 
 //tag::no-annotation[]
@@ -72,10 +78,10 @@ public class PropertyMementoSerializationVm implements HasAsciiDocDescription {
 
 //tag::annotated-not_specified[]
     @Property(
-        mementoSerialization = MementoSerialization.NOT_SPECIFIED
+        snapshot = Snapshot.NOT_SPECIFIED
     )
     @PropertyLayout(
-        describedAs = "@Property(mementoSerialization = NOT_SPECIFIED)"
+        describedAs = "@Property(snapshot = NOT_SPECIFIED)"
     )
     @MemberOrder(name = "annotations", sequence = "1")
     @XmlElement(required = true)
@@ -85,10 +91,10 @@ public class PropertyMementoSerializationVm implements HasAsciiDocDescription {
 
 //tag::annotated-excluded[]
     @Property(
-        mementoSerialization = MementoSerialization.EXCLUDED
+        snapshot = Snapshot.EXCLUDED
     )
     @PropertyLayout(
-        describedAs = "@Property(mementoSerialization = EXCLUDED)"
+        describedAs = "@Property(snapshot = EXCLUDED)"
     )
     @MemberOrder(name = "annotations", sequence = "2")
     @XmlElement(required = true)
@@ -98,10 +104,10 @@ public class PropertyMementoSerializationVm implements HasAsciiDocDescription {
 
 //tag::annotated-included[]
     @Property(
-        mementoSerialization = MementoSerialization.INCLUDED
+        snapshot = Snapshot.INCLUDED
     )
     @PropertyLayout(
-        describedAs = "@Property(mementoSerialization = INCLUDED)"
+        describedAs = "@Property(snapshot = INCLUDED)"
     )
     @MemberOrder(name = "annotations", sequence = "2")
     @XmlElement(required = true)
@@ -110,10 +116,10 @@ public class PropertyMementoSerializationVm implements HasAsciiDocDescription {
 //end::annotated-included[]
 
 //tag::meta-annotated-excluded[]
-    @MementoSerializationExcludedMetaAnnotation     // <.>
+    @SnapshotExcludedMetaAnnotation     // <.>
     @Property()
     @PropertyLayout(
-        describedAs = "@MementoSerializationExcludedMetaAnnotation "
+        describedAs = "@SnapshotExcludedMetaAnnotation "
     )
     @MemberOrder(name = "meta-annotations", sequence = "1")
     @XmlElement(required = true)
@@ -122,14 +128,14 @@ public class PropertyMementoSerializationVm implements HasAsciiDocDescription {
 //end::meta-annotated-excluded[]
 
 //tag::meta-annotated-included[]
-    @MementoSerializationIncludedMetaAnnotation                 // <.>
+    @SnapshotIncludedMetaAnnotation                 // <.>
     @Property(
-        mementoSerialization = MementoSerialization.EXCLUDED    // <.>
+        snapshot = Snapshot.EXCLUDED    // <.>
     )
     @PropertyLayout(
         describedAs =
-            "@MementoSerializationIncludedMetaAnnotation "
-            + "@Property(mementoSerialization = EXCLUDED)"
+            "@SnapshotIncludedMetaAnnotation "
+            + "@Property(snapshot = EXCLUDED)"
     )
     @MemberOrder(name = "meta-annotations-overridden", sequence = "1")
     @XmlElement(required = true)
@@ -137,4 +143,13 @@ public class PropertyMementoSerializationVm implements HasAsciiDocDescription {
     private String metaAnnotatedPropertyOverridden;
 //end::meta-annotated-included[]
 
+//tag::children[]
+    @Getter @Setter
+    @Collection
+    @XmlElementWrapper(name = "children")
+    @XmlElement(name = "child")
+    private List<PropertySnapshotChildVm> children = new ArrayList<>();
+//end::children[]
+
+
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/PropertySnapshotVm.layout.xml
similarity index 97%
copy from examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm.layout.xml
copy to examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/PropertySnapshotVm.layout.xml
index 8c2abe6..82a1249 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/PropertySnapshotVm.layout.xml
@@ -18,7 +18,7 @@
 	<bs3:row>
 		<bs3:col span="10" unreferencedActions="true">
 			<cpt:domainObject />
-			<cpt:action id="takeSnapshot"/>
+			<cpt:action id="takeXmlSnapshot"/>
 		</bs3:col>
 		<bs3:col span="2">
 			<cpt:fieldSet name="" id="sources" />
@@ -34,6 +34,7 @@
 					<cpt:fieldSet name="Meta-annotated" id="meta-annotations"/>
 					<cpt:fieldSet name="Meta-annotated overrriden" id="meta-annotated-overrriden"/>
 					<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
+					<cpt:collection id="children"/>
 				</bs3:col>
 			</bs3:row>
 		</bs3:col>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm_takeSnapshot.java b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/PropertySnapshotVm_takeXmlSnapshot.java
similarity index 65%
rename from examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm_takeSnapshot.java
rename to examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/PropertySnapshotVm_takeXmlSnapshot.java
index bb49d51..7843394 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm_takeSnapshot.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/PropertySnapshotVm_takeXmlSnapshot.java
@@ -16,7 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.annotDomain.Property.mementoSerialization;
+package demoapp.dom.annotDomain.Property.snapshot;
+
+import java.util.Locale;
 
 import javax.inject.Inject;
 
@@ -34,22 +36,41 @@ import lombok.val;
     semantics = SemanticsOf.SAFE
 )
 @RequiredArgsConstructor
-public class PropertyMementoSerializationVm_takeSnapshot {
+public class PropertySnapshotVm_takeXmlSnapshot {
 
     @Inject XmlSnapshotService xmlSnapshotService;
     @Inject XmlService xmlService;
 
-    private final PropertyMementoSerializationVm vm;
+    private final PropertySnapshotVm vm;
+
+    public static enum FileType {
+        XML,
+        XSD
+    }
 
 //tag::class[]
-    public Clob act(String fileName) {
+    public Clob act(
+            final FileType fileType,
+            final String fileName,
+            final boolean includeChildren,
+            final boolean forceIncludeExcluded) {
         val builder = xmlSnapshotService.builderFor(vm);
+        if(includeChildren) {
+            builder.includePath("children");
+        }
+        if(forceIncludeExcluded) {
+            builder.includePath("excludedProperty");
+        }
         val snapshot = builder.build();
-        val doc = snapshot.getXmlDocument();
+        val doc = fileType == FileType.XML
+                ? snapshot.getXmlDocument() : snapshot.getXsdDocument();
         return asClob(xmlService.asString(doc), fileName);
     }
-    public String default0Act() {
-        return "snapshot.xml";
+    public FileType default0Act() {
+        return FileType.XML;
+    }
+    public String default1Act(final FileType fileType) {
+        return "snapshot." + fileType.name().toLowerCase();
     }
 
     private static Clob asClob(final String xmlStr, final String fileName) {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/MementoSerializationIncludedMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/SnapshotExcludedMetaAnnotation.java
similarity index 82%
rename from examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/MementoSerializationIncludedMetaAnnotation.java
rename to examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/SnapshotExcludedMetaAnnotation.java
index c7725c1..1312704 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/MementoSerializationIncludedMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/SnapshotExcludedMetaAnnotation.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.annotDomain.Property.mementoSerialization;
+package demoapp.dom.annotDomain.Property.snapshot;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Inherited;
@@ -24,17 +24,17 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-import org.apache.isis.applib.annotation.MementoSerialization;
+import org.apache.isis.applib.annotation.Snapshot;
 import org.apache.isis.applib.annotation.Property;
 
 //tag::class[]
-@Property(mementoSerialization = MementoSerialization.INCLUDED) // <.>
+@Property(snapshot = Snapshot.EXCLUDED) // <.>
 @Inherited
 @Target({
         ElementType.METHOD, ElementType.FIELD                   // <.>
 })
 @Retention(RetentionPolicy.RUNTIME)
-public @interface MementoSerializationIncludedMetaAnnotation {
+public @interface SnapshotExcludedMetaAnnotation {
 
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/MementoSerializationExcludedMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/SnapshotIncludedMetaAnnotation.java
similarity index 82%
rename from examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/MementoSerializationExcludedMetaAnnotation.java
rename to examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/SnapshotIncludedMetaAnnotation.java
index e8d399c..abcf653 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/MementoSerializationExcludedMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/SnapshotIncludedMetaAnnotation.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.annotDomain.Property.mementoSerialization;
+package demoapp.dom.annotDomain.Property.snapshot;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Inherited;
@@ -24,17 +24,17 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-import org.apache.isis.applib.annotation.MementoSerialization;
+import org.apache.isis.applib.annotation.Snapshot;
 import org.apache.isis.applib.annotation.Property;
 
 //tag::class[]
-@Property(mementoSerialization = MementoSerialization.EXCLUDED) // <.>
+@Property(snapshot = Snapshot.INCLUDED) // <.>
 @Inherited
 @Target({
         ElementType.METHOD, ElementType.FIELD                   // <.>
 })
 @Retention(RetentionPolicy.RUNTIME)
-public @interface MementoSerializationExcludedMetaAnnotation {
+public @interface SnapshotIncludedMetaAnnotation {
 
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/XmlSnapshotPeerVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/child/PropertySnapshotChildVm-description.adoc
similarity index 89%
copy from examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/XmlSnapshotPeerVm-description.adoc
copy to examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/child/PropertySnapshotChildVm-description.adoc
index a2f1be1..d34d5a3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/XmlSnapshotPeerVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/child/PropertySnapshotChildVm-description.adoc
@@ -1,3 +1,5 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-This object exists just to be referenced by the `PropertyMementoSerializationVm` demo object.
+TODO
+
+This (child) object ...
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm.java b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/child/PropertySnapshotChildVm.java
similarity index 52%
copy from examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm.java
copy to examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/child/PropertySnapshotChildVm.java
index cacc2f6..6f2cf9d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/child/PropertySnapshotChildVm.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.services.core.xmlSnapshotService;
+package demoapp.dom.annotDomain.Property.snapshot.child;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -24,76 +24,73 @@ import java.util.List;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
 import org.apache.isis.applib.annotation.Collection;
-import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.MementoSerialization;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Snapshot;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.services.core.xmlSnapshotService.child.XmlSnapshotChildVm;
-import demoapp.dom.services.core.xmlSnapshotService.peer.XmlSnapshotPeerVm;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
-import lombok.val;
 
-@XmlRootElement(name = "root")
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.annotDomain.Property.hidden.PropertyHiddenVm;
+import demoapp.dom.annotDomain.Property.snapshot.SnapshotExcludedMetaAnnotation;
+import demoapp.dom.annotDomain.Property.snapshot.SnapshotIncludedMetaAnnotation;
+
+//tag::class[]
+@XmlRootElement(name = "child")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
 @DomainObject(
-    nature=Nature.VIEW_MODEL,
-    objectType = "demo.XmlSnapshotParentVm"
+        nature=Nature.VIEW_MODEL,
+        objectType = "demo.PropertyHiddenChildVm"
 )
 @NoArgsConstructor
-public class XmlSnapshotParentVm implements HasAsciiDocDescription {
+public class PropertySnapshotChildVm implements HasAsciiDocDescription {
 
-    public XmlSnapshotParentVm(String text) {
-        this.text = text;
-        this.otherText = text;
+    public PropertySnapshotChildVm(String value) {
+        excludedProperty = value;
+        includedProperty = value;
     }
 
     public String title() {
-        return "XmlSnapshotService parent VM";
+        return "Property#xmlSnapshot (child object)";
     }
 
-    @Property(editing = Editing.ENABLED)
-    @MemberOrder(name = "properties", sequence = "1")
+//tag::annotated-excluded[]
+    @Property(
+        snapshot = Snapshot.EXCLUDED
+    )
+    @PropertyLayout(
+        describedAs = "@Property(snapshot = EXCLUDED)"
+    )
+    @MemberOrder(name = "annotations", sequence = "2")
     @XmlElement(required = true)
     @Getter @Setter
-    private String text;
+    private String excludedProperty;
+//end::annotated-excluded[]
 
-    @Property(editing = Editing.ENABLED, mementoSerialization = MementoSerialization.EXCLUDED)
-    @MemberOrder(name = "properties", sequence = "2")
+//tag::annotated-included[]
+    @Property(
+            snapshot = Snapshot.INCLUDED
+    )
+    @PropertyLayout(
+            describedAs = "@Property(snapshot = INCLUDED)"
+    )
+    @MemberOrder(name = "annotations", sequence = "2")
     @XmlElement(required = true)
     @Getter @Setter
-    private String otherText;
-
-    @Property(editing = Editing.ENABLED)
-    @MemberOrder(name = "properties", sequence = "3")
-    @XmlElement(required = false)
-    @Getter @Setter
-    private XmlSnapshotPeerVm peer;
-
-//tag::class-collections-children[]
-    @Collection()
-    @CollectionLayout()
-    @Getter
-    private List<XmlSnapshotChildVm> children = new ArrayList<>();
+    private String includedProperty;
+//end::annotated-included[]
 
-    // ...
-//end::class-collections-children[]
-
-    public XmlSnapshotParentVm addChild(final String value) {
-        val childVm = new XmlSnapshotChildVm(value);
-        getChildren().add(childVm);
-        return this;
-    }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/child/PropertySnapshotChildVm.layout.xml
similarity index 83%
rename from examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/child/PropertySnapshotChildVm.layout.xml
index 8c2abe6..70f0ba4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/mementoSerialization/PropertyMementoSerializationVm.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/annotDomain/Property/snapshot/child/PropertySnapshotChildVm.layout.xml
@@ -15,10 +15,10 @@
         xmlns:cpt="http://isis.apache.org/applib/layout/component"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 
+
 	<bs3:row>
 		<bs3:col span="10" unreferencedActions="true">
 			<cpt:domainObject />
-			<cpt:action id="takeSnapshot"/>
 		</bs3:col>
 		<bs3:col span="2">
 			<cpt:fieldSet name="" id="sources" />
@@ -27,15 +27,10 @@
 
 	<bs3:row>
 		<bs3:col span="6">
-			<bs3:row>
-				<bs3:col span="12">
-					<cpt:fieldSet name="Not annotated" id="no-annotations"/>
-					<cpt:fieldSet name="Annotated" id="annotations"/>
-					<cpt:fieldSet name="Meta-annotated" id="meta-annotations"/>
-					<cpt:fieldSet name="Meta-annotated overrriden" id="meta-annotated-overrriden"/>
-					<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-				</bs3:col>
-			</bs3:row>
+			<cpt:fieldSet name="Properties" id="variants"/>
+			<cpt:fieldSet name="Meta-annotated" id="meta-annotated"/>
+			<cpt:fieldSet name="Meta-annotated Overridden" id="meta-annotated-overridden"/>
+			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
 		</bs3:col>
 		<bs3:col span="6">
 			<cpt:fieldSet name="Description" id="description" >
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
index c2e5bb1..9154ba2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
@@ -153,11 +153,11 @@ For latest we use: https://raw.githubusercontent.com/apache/isis/master/antora/s
                 <mb3:serviceAction objectType="demo.PropertyMenu" id="fileAccept"/>
                 <mb3:serviceAction objectType="demo.PropertyMenu" id="hidden"/>
                 <mb3:serviceAction objectType="demo.PropertyMenu" id="maxLength"/>
-                <mb3:serviceAction objectType="demo.PropertyMenu" id="mementoSerialization"/>
                 <mb3:serviceAction objectType="demo.PropertyMenu" id="mustSatisfy"/>
                 <mb3:serviceAction objectType="demo.PropertyMenu" id="optionality"/>
                 <mb3:serviceAction objectType="demo.PropertyMenu" id="projecting"/>
                 <mb3:serviceAction objectType="demo.PropertyMenu" id="regexPattern"/>
+                <mb3:serviceAction objectType="demo.PropertyMenu" id="snapshot"/>
             </mb3:section>
         </mb3:menu>
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm.java
index cacc2f6..f887f87 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm.java
@@ -32,7 +32,7 @@ import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.MementoSerialization;
+import org.apache.isis.applib.annotation.Snapshot;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 
@@ -69,7 +69,7 @@ public class XmlSnapshotParentVm implements HasAsciiDocDescription {
     @Getter @Setter
     private String text;
 
-    @Property(editing = Editing.ENABLED, mementoSerialization = MementoSerialization.EXCLUDED)
+    @Property(editing = Editing.ENABLED, snapshot = Snapshot.EXCLUDED)
     @MemberOrder(name = "properties", sequence = "2")
     @XmlElement(required = true)
     @Getter @Setter
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/child/XmlSnapshotChildVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/child/XmlSnapshotChildVm-description.adoc
index e755465..e781e8d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/child/XmlSnapshotChildVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/child/XmlSnapshotChildVm-description.adoc
@@ -1,3 +1,3 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-This child object exists just to act as the element of the two collections of the `PropertyMementoSerializationVm` demo object.
+This child object exists just to act as the element of the two collections of the `PropertySnapshotVm` demo object.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/XmlSnapshotPeerVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/XmlSnapshotPeerVm-description.adoc
index a2f1be1..063e761 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/XmlSnapshotPeerVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/XmlSnapshotPeerVm-description.adoc
@@ -1,3 +1,3 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-This object exists just to be referenced by the `PropertyMementoSerializationVm` demo object.
+This object exists just to be referenced by the `PropertySnapshotVm` demo object.