Frage

Wenn ich diese beiden Klassen, die zwei unterschiedliche Eigenschaften haben, aber mit dem gleichen Namen:

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

und versuchen, sie zu RDF serialisiert und validieren sie mit http://www.w3.org / RDF / Validator / Service. Alles ist in Ordnung, und sie sind richtig. Aber nachdem ich versuche, OWL-Dateien aus diesen Klassen mit OntologyExtractor.exe Werkzeug zu erzeugen, erhalte ich diese Meldung: „Ontology Extraktion fehlgeschlagen. http://test.org/1.0#title wird auf mehr als eine zugewiesene Art." Das ist seltsam Nachricht als die oberen Klassen korrekt sind und es gibt einige RDF-Spezifikationen, die gleiche Situation mit verschiedenen Klassen hat die gleichen benannte Eigenschaften haben.

War es hilfreich?

Lösung

Ich erwarte, dass es ein Fehler in ROWLEX ist. Ihr Fall ist ein gültiger, aber ich nehme an, ich nicht für sie vorbereitet hat, als ich OntologyExtractor schrieb. Ich werde versuchen, so schnell wie möglich ein Update zu veröffentlichen.

Bearbeiten : ROWLEX2.1 freigegeben wird, können Sie es von http: / /rowlex.nc3a.nato.int . Version 2.1 (unter anderem) unterstützt jetzt die Immobilien Funktionalität. Der genaue Code in der Frage würde immer noch den gleichen Fehler! Zu überwinden, sollten Sie die Dekoration Ihres Codes ändern wie folgt:

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

die OntologyExtractor.exe Unter Verwendung dieser Code eine OWL-Eigenschaft mit einer anonymen Domain-Klasse führt, dass die Vereinigung von Typ1 und Typ2 ist.
Während dies technisch perfekt richtige Lösung ist, das Setzen von Domains auf Eigenschaften begrenzen deren mögliche zukünftige Wiederverwendung. Als eine Lösung, können Sie die Eigenschaft Domain mit lokalen Einschränkungen zu ersetzen. Sie können das erreichen, wie folgt:

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

Wenn Sie nicht gesetzt verlassen UseLocalRestrictionInsteadOfDomain, ROWLEX wählt zwischen Domain und lokaler Beschränkung entsprechend den aktuellen Kontext.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top