2009-08-07 6 views
1

Wenn ich diese beiden Klassen, die zwei unterschiedliche Eigenschaften haben, aber mit dem gleichen Namen:Wie definiert man eine Eigenschaft mit demselben Namen auf zwei verschiedenen Typen in ROWLEX?

[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 mit http://www.w3.org/RDF/Validator/ Service zu validieren. Alles ist in Ordnung und sie sind korrekt. Aber nachdem ich versuche, OWL-Dateien aus diesen Klassen mit OntologyExtractor.exe-Tool zu generieren, bekomme ich diese Nachricht: "Ontology Extraktion fehlgeschlagen. http://test.org/1.0#title ist mehr als einen Typ zugeordnet." Dies ist eine seltsame Nachricht, da die oberen Klassen korrekt sind und es einige RDF-Spezifikationen gibt, die dieselbe Situation mit verschiedenen Klassen haben, die dieselben benannten Eigenschaften haben.

Antwort

1

Ich erwarte, dass es ein Fehler in ROWLEX ist. Ihr Fall ist ein gültiger, aber ich nehme an, ich habe mich nicht darauf vorbereitet, als ich OntologyExtractor geschrieben habe. Ich werde versuchen, eine Lösung so schnell wie möglich zu veröffentlichen.

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

[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 verwenden, wird dieser Code eine OWL-Eigenschaft mit einem anonymen Domain-Klasse führen, dass die Vereinigung von Typ1 und Typ2 ist.
Während dies technisch perfekt Lösung ist, begrenzen das Festlegen von Domänen auf Eigenschaften ihre mögliche zukünftige Wiederverwendung. Als Lösung sollten Sie die Eigenschaftendomäne durch lokale Einschränkungen 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; } 
} 

Sollten Sie verlassen UseLocalRestrictionInsteadOfDomain nicht gesetzt ist, ROWLEX zwischen Domain und lokale Beschränkung wählt den aktuellen Kontext nach.

+0

Großartig! Vielen Dank! Ich werde es danach bestätigen. –

Verwandte Themen