Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

plik tests.properties:

Code Block

master=for $x in fn:doc({document})/*[fn:compare(fn:name(), 'msDescription')=0] return $x
rdf_dc=for $x in fn:doc({document})/*[fn:compare(fn:local-name(), 'RDF')=0] return $x

plik conversion.properties:

Code Block

master.Title=for $x in fn:doc({document})//msHeading/title return $x
master.Creator=for $x in fn:doc({document})//msHeading/author return $x
master.Description=for $x in fn:doc({document})//msContents/overview return $x
master.Publisher=for $x in fn:doc({document})//msContents/respStmt/resp/name return $x
master.Contributor=for $x in fn:doc({document})/msDescription/msContents/respStmt//resp return $x
master.Date=for $x in fn:doc({document})//msHeading/origDate return $x
master.Type=for $x in fn:doc({document})//physDesc/form return $x
master.Identifier=for $x in fn:doc({document})//msIdentifier/country/settlement/repository/idno return $x
master.Source=for $x in fn:doc({document})//msPart//idno return $x
master.Language=for $x in fn:doc({document})//msContents/textLang return $x
master.Language=, for $x in fn:doc({document})//msContents/textLang/@otherLangs return $x
master.Rights=for $x in fn:doc({document})//msIdentifier/repository return $x

rdf_dc.Title=for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Title'] return $x
rdf_dc.Creator=for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Creator'] return $x
rdf_dc.Subject=for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Subject'] return $x
rdf_dc.Description=for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Description'] return $x
rdf_dc.Publisher=for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Publisher'] return $x
rdf_dc.Contributor=for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Contributor'] return $x
rdf_dc.Date=for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Date'] return $x
rdf_dc.Type=for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Type'] return $x
rdf_dc.Identifier=for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Identifier'] return $x
rdf_dc.Source=for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Source'] return $x
rdf_dc.Language=for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Language'] return $x
rdf_dc.Relation=

Jak widać, plik conversion.properties zawiera reguły konwersji odpowiadające testom z pliku tests.properties. Reguły w pliku conversion.properties mogą być dwojakiego rodzaju:

  1. Reguła dla konkretnego atrybutu - klucz reguły składa się z klucza identyfikującego test z pliku tests.properties, kropki, oraz identyfikatora atrybutu (nazwy RDF) w systemie dLibra. W takim przypadku wartości wszystkich węzłów zwróconych przez zapytanie XQuery zostaną przypisane do atrybutu o tym identyfikatorze.
  2. Reguła uniwersalana - klucz reguły jest taki sam jak klucz identyfikujący test z pliku tests.properties. W takim przypadku każdy węzeł zwrócony przez zapytanie XQuery musi mieć nazwę taką samą jak nazwa RDF docelowego atrybutu. Przestrzenie nazw xmlns są ignorowane.

W przykładzie powyżej, konfiguracja dla formatu MASTER została zdefiniowana przy pomocy reguł pierwszego rodzaju, a dla formatu RDF - drugiego rodzaju. Nie ma przeszkód, aby w definicji jednego formatu wykorzystać oba rodzaje reguł jednocześnie - w takim przypadku, jeśli reguła uniwersalna wygeneruje wartości dla atrybutu, który ma również przypisaną dedykowaną regułę, to zostaną przypisane wartości uzyskane z obu reguł.

Dla danego formatu XML można zdefiniować tylko jedną regułę uniwersalną, jak i dla każdego konkretnego atrybut można przypisać tylko jedną dedykowaną regułę. Reguła XQuery może jednak składać się z kliku reguł połączonych przecinkami, np.:

Code Block
for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Relation']metadata/Tytul return $x
rdf_dc.Coverage=for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Coverage'] return $x
rdf_dc.Rights=, for $x in fn:doc({document})//*[fn:local-name()='Description']/*[fn:local-name()='Rights']extra/Podtytul return $x

 Jak widać, plik conversion.properties zawiera reguły konwersji odpowiadające testom z pliku tests.properties. Klucz w pliku conversion.properties składa się z klucza identyfikującego test w pliku tests.properties, kropki oraz identyfikatora atrybutu (nazwy RDF) w systemie dLibra. Wartości zapytań znajdujących się w pliku conversion.properties zostaną przypisane atrybutom o określonej nazwie RDF.

Załóżmy, że chcemy zaimportować plik A zawierający metadane w formacie XML. Mechanizm importu sprawdza kolejno testy znajdujące się w pliku tests.properties. Pierwszy test, który zwróci w wyniku listę wartości o rozmiarze większym od 0 decyduje o regułach konwersji. Załóżmy ze był to test opatrzony kluczem master. Mechanizm importu wybiera reguły konwersji z pliku conversion.properties - wszystkie te które rozpoczynają się od słowa master. Następnie wartości z zapytań XQuery trafiają do odpowiedniego atrybutu, np. do atrybutu, którego nazwa RDF to Title trafią wszystkie wartości z zapytania for $x in fn:doc({document})//msHeading/title return $x. Jeśli chcemy by dla jednego atrybutu obowiązywały dwa zapytania XQuery to należy dodać kolejną linię z zapytaniem (tak jak ma to miejsce w przypadku atrybutu Language).
Każde zapytanie XQuery powinno wykorzystywać ciąg znaków {document} do określenia dokumentu na którym wykonywane jest zapytanie. Rozszerzenie zamienia ten ciąg znaków ścieżką do pliku XML.