Domanda

Se ho queste due classi che hanno due proprietà diverse, ma con lo stesso nome:

[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; }
}

e cercare di loro serializzare per RDF e validare con http://www.w3.org / RDF / Validator / servizio . Tutto va bene e sono corrette. Ma dopo cerco di generare file OWL da quelle classi con lo strumento OntologyExtractor.exe ottengo quel messaggio: "Estrazione Ontologia fallito. http://test.org/1.0#title viene assegnato a più di un genere." Questo è strano messaggio, come le classi superiori sono corretti e ci sono alcune specifiche RDF che ha stessa situazione con diverse classi che hanno stesse proprietà denominate.

È stato utile?

Soluzione

mi aspetto che è un bug in ROWLEX. Il tuo caso è uno valido, ma suppongo non mi preparo per questo quando ho scritto OntologyExtractor. Cercherò di rilasciare un fix al più presto possibile.

Modifica : ROWLEX2.1 viene rilasciato, è possibile scaricarlo da http: / /rowlex.nc3a.nato.int. Versione 2.1 (tra gli altri) ora supporta la funzionalità di proprietà condivisa. Il codice esatto nella questione sarebbe ancora causare lo stesso errore! Per ovviare a questo, si dovrebbe modificare la decorazione del vostro codice come segue:

[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; } 
} 

Uso della OntologyExtractor.exe, questo codice si tradurrà una proprietà OWL di dominio con una classe anonima che è l'unione di Type1 e Type2.
Anche se questo è tecnicamente perfetta soluzione corretta, impostando i domini sulle proprietà limitare la loro eventuale riutilizzo futuro. Come soluzione, si potrebbe desiderare di sostituire il dominio di proprietà con restrizioni locali. È possibile raggiungere questo obiettivo nel seguente modo:

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

In caso di lasciare UseLocalRestrictionInsteadOfDomain non impostato, ROWLEX sceglie tra il dominio e la restrizione locale secondo il contesto attuale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top