Question

Si j'ai ces deux classes qui ont deux propriétés différentes mais avec le même nom:

[RdfSerializable]
public class Type1
{
    [RdfProperty(true), Name = "title"]
    public string Title { get; set; }
}

[RdfSerializable]
public class Type2
{
    [RdfProperty(true), Name = "title"]
    public string Title { get; set; }
}

et essayer de les sérialiser à RDF et les valider avec http://www.w3.org / RDF / Validator / service . Tout va bien et ils sont corrects. Mais après que je tente de générer des fichiers OWL de ces classes avec l'outil OntologyExtractor.exe je reçois ce message: « Extraction d'ontologies a échoué. http://test.org/1.0#title est affectée à plus d'un type." Ceci est un message étrange que les classes supérieures sont correctes et il y a des spécifications RDF qui a même situation avec des classes différentes qui ont les mêmes propriétés nommées.

Était-ce utile?

La solution

Je pense qu'il est un bogue dans ROWLEX. Votre cas est valide, mais je suppose que je n'ai pas préparé pour quand je l'ai écrit OntologyExtractor. Je vais essayer de libérer une solution le plus rapidement possible.

EDIT : ROWLEX2.1 est libéré, vous pouvez le télécharger à partir de http: / /rowlex.nc3a.nato.int. Version 2.1 (entre autres) prend désormais en charge la fonctionnalité de propriété partagée. Le code exact dans la question entraînerait toujours la même erreur! Pour remédier à cela, vous devez modifier la décoration de votre code comme suit:

[RdfSerializable] 
public class Type1 
{ 
    [RdfProperty(true, Name = "title", ExcludeFromOntology=true)] 
    public string Title { get; set; } 
} 

[RdfSerializable] 
public class Type2 
{ 
    [RdfProperty(true, Name = "title", 
               DomainAsType = new Type[]{typeof(Type1), typeof(Type2)})] 
    public string Title { get; set; } 
} 

Utilisation du OntologyExtractor.exe, ce code entraînera une propriété OWL de avec une classe de domaine anonyme qui est l'Union des Type1 et Type2.
Bien que ce soit la solution technique parfaitement correcte, la mise en domaines sur les propriétés limiter leur réutilisation future. Comme solution, vous pouvez remplacer le domaine de la propriété avec des restrictions locales. Vous pouvez y parvenir comme suit:

[RdfSerializable] 
public class Type2 
{ 
    [RdfProperty(true, Name = "title", 
               DomainAsType = new Type[]{typeof(Type1), typeof(Type2)},
               UseLocalRestrictionInsteadOfDomain = true)] 
    public string Title { get; set; } 
} 

Si vous quittez UseLocalRestrictionInsteadOfDomain pas définie, ROWLEX choisit entre le domaine et la restriction locale en fonction du contexte actuel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top