Add schema URN to Schema.Attribute

Attributes that have equivalent names causes problems during attribute filtering.
diff --git a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/ProviderRegistry.java b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/ProviderRegistry.java
index ccf4a94..5f51c2b 100644
--- a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/ProviderRegistry.java
+++ b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/ProviderRegistry.java
@@ -189,8 +189,9 @@
     }
 
     log.debug("calling set attributes with " + fieldList.size() + " fields");
+    String urn = set != null ? set.id() : srt.schema();
     Set<String> invalidAttributes = new HashSet<>();
-    List<Attribute> createAttributes = createAttributes(fieldList, invalidAttributes, clazz.getSimpleName());
+    List<Attribute> createAttributes = createAttributes(urn, fieldList, invalidAttributes, clazz.getSimpleName());
     schema.setAttributes(createAttributes);
 
     if (!invalidAttributes.isEmpty()) {
@@ -219,7 +220,7 @@
     return schema;
   }
 
-  private static List<Attribute> createAttributes(List<Field> fieldList, Set<String> invalidAttributes, String nameBase) throws InvalidProviderException {
+  private static List<Attribute> createAttributes(String urn, List<Field> fieldList, Set<String> invalidAttributes, String nameBase) throws InvalidProviderException {
     List<Attribute> attributeList = new ArrayList<>();
 
     for (Field f : fieldList) {
@@ -249,6 +250,7 @@
       Attribute attribute = new Attribute();
       attribute.setField(f);
       attribute.setName(attributeName);
+      attribute.setUrn(urn);
       
       List<String> canonicalTypes = null;
       Field [] enumFields = sa.canonicalValueEnum().getFields();
@@ -379,7 +381,7 @@
         Class<?> componentType;
         if (!attribute.isMultiValued()) {
           componentType = f.getType();
-          attribute.setSubAttributes(createAttributes(Arrays.asList(f.getType().getDeclaredFields()), invalidAttributes, nameBase + "." + f.getName()), AddAction.APPEND);
+          attribute.setSubAttributes(createAttributes(urn, Arrays.asList(f.getType().getDeclaredFields()), invalidAttributes, nameBase + "." + f.getName()), AddAction.APPEND);
         } else if (f.getType().isArray()) {
           componentType = f.getType().getComponentType();
         } else {
@@ -388,7 +390,7 @@
         }
         
         List<Field> fl = ScimUtils.getFieldsUpTo(componentType, Object.class);
-        List<Attribute> la = createAttributes(fl, invalidAttributes, nameBase + "." + f.getName());
+        List<Attribute> la = createAttributes(urn, fl, invalidAttributes, nameBase + "." + f.getName());
           
         attribute.setSubAttributes(la, AddAction.APPEND);
       }
diff --git a/scim-spec/scim-spec-schema/src/main/java/edu/psu/swe/scim/spec/schema/Schema.java b/scim-spec/scim-spec-schema/src/main/java/edu/psu/swe/scim/spec/schema/Schema.java
index 3de6508..0d54154 100644
--- a/scim-spec/scim-spec-schema/src/main/java/edu/psu/swe/scim/spec/schema/Schema.java
+++ b/scim-spec/scim-spec-schema/src/main/java/edu/psu/swe/scim/spec/schema/Schema.java
@@ -100,6 +100,8 @@
       APPEND
     }
 
+    String urn;
+
     // The attribute name must match the ABNF pattern defined in section 2.1 of
     // the SCIM Schema specification.
     @XmlElement