Vous pouvez aisément déterminer si des instances d'un objet données comportent un ensemble de valeurs anyAttribute en vérifiant leurs propriétés pour savoir si les propriétés ouvertes représentent des attributs.
L'objet données ne prévoit pas de mécanisme pour déterminer si un type d'objet données inclut une balise anyAttribute. Seuls les objets données comportent un concept d'ouverture qui s'applique aux balises any et <anyAttribute/> et qui permet l'ajout de propriétés supplémentaires. S'il est vrai que si un objet données a défini isOpen() = true et isSequenced() = false, il doit inclure une balise anyAttribute, si isOpen() = true et isSequenced() = true, le type d'objet données pouvant ou non inclure une balise anyAttribute.
L'objet données fournit des méthodes d'interrogation des métadonnées pour répondre à l'aide d'un programme à cette question et bien d'autres sur la structure XSD qui a servi à le générer. Le modèle InfoSet peut être interrogé pour déterminer si nécessaire l'existence de la balise anyAttribute. Parce que la balise anyAttribute est unique et que sa valeur peut être ou non true, les objets métier fournissent également une méthode BOXSDHelper hasAnyAttribute(Type) pour déterminer si la définition d'un attribut ouvert sur cet objet données produira un résultat valide. L'exemple de code suivant illustre ces concepts :
DataObject dobj = ... // Vérifiez si le type est ouvert. S'il ne l'est pas, aucune // valeur anyAttribute ne peut y être définie. boolean isOpen = dobj.getType().isOpen() ; si (!isOpen) return false ; // Aucune valeur anyAttribute définie // Les propriétés ouvertes sont ajoutées à la liste des propriétés de l'instance, mais pas // la liste des propriétés. Par conséquent, la comparaison de leurs tailles peut permettre de déterminer facilement // si des données ouvertes sont définies int instancePropertyCount = dobj.getInstanceProperties().size(); int definedPropertyCount = dobj.getType().getProperties().size(); // Si leur taille est identique, aucun contenu ouvert n'est défini si (instancePropertyCount == definedPropertyCount) return false ; // Vérifiez les propriétés du contenu ouvert pour déterminer l'une d'elles constituent des attributs pour (int i=definedPropertyCount; i<instancePropertyCount; i++) { Property prop = (Property)dobj.getInstanceProperties().get(i); si (boXsdHelper.isAttribute(prop)) { return true ; // Valeur anyAttribute trouvée } } return false ; // Aucune valeur anyAttribute définie