2015-01-16 3 views
1

Я совершенно новый в использовании XSLT.Преобразование XML-файла в RDF с пустыми узлами

Я пишу преобразование XSL из документа XML (метаданных) в XML/RDF, и я также улучшаю модель, лежащую в основе исходного документа. В конкретных, исходный документ описывает человека, и в какой-то момент в нем перечислены все имена данного лица:

<?xml version="1.0" encoding="UTF-8"?> 
<Person RecordID="abcd"> 
    <PersonNames> 
     <PersonName> 
      <Surname>Doe</Surname> 
      <FirstName>John</FirstName> 
     </PersonName> 
     <PersonName> 
      <Surname>Doe</Surname> 
      <FirstName>Janine</FirstName> 
     </PersonName> 
     <PersonName> 
      <Surname>Smith</Surname> 
      <FirstName>Janine</FirstName> 
     </PersonName> 
    </PersonNames> 
</Person> 

Я не хочу, чтобы подключить URI человека к каждому из этих элементов в отдельности, так как при этом неясно, что «Джо Смит» никогда не был именем этого человека. Я бы предпочел использовать пустой узел для каждого имени, а затем связать FirstName и Surname с соответствующим пустым узлом; однако я не могу найти решение для создания идентификатора пустого узла (который я бы сделал внутри цикла xsl: for-each, который проходит через все имена человека), который затем я могу вызвать вне цикла и обратиться к нему.

Интуитивно я создавал бы идентификатор id_IDID для каждого из этих элементов, а затем вне цикла (и вне поддерева) я бы добавил соответствующие тройки. Результатом будет что-то вроде:

<rdf:RDF 'namespaces'> 
    <localontology:Person> 
    ... person's metadata ... 
    <foaf:name rdf:nodeID="name1"> 
    <foaf:name rdf:nodeID="name2"> 
    .... 
</localontology:Person> 
<rdf:Description rdf:nodeID="name1"> 
    <localontology:firstName 'FirstName in name1'> 
    <localontology:surname 'Surname in name1'> 
</rdf:Description> 
<rdf:Description rdf:nodeID="name1"> 
    <localontology:firstName 'FirstName in name2'> 
    <localontology:surname 'Surname in name2'> 
</rdf:Description> 

Я действительно не знаю, какие функции/конструкции я мог бы использовать ... есть кто-то, кто может помочь?

+0

Ваш вопрос непонятен: каков требуемый результат вашего примера (если предположить, что вы отправили ввод)? –

+0

Извините, я нажал кнопку «пост», прежде чем делать редактирование! Является ли это достаточно ясным? – klaraspina

+0

Извините, нет. Я не знаю, что вы подразумеваете под «тройками» или «пустым узлом». –

ответ

0

Я бы не использовал пустые узлы здесь. Пустые узлы могут иметь uri, такие как localontology: JohnDoe, который затем имеет имя firstName и фамилию как свойство. Такой uri имеет смысл, и когда люди используют имя, вы можете повторно использовать один и тот же экземпляр. Если вам нужна помощь в создании такого uri, оставляйте комментарий.

Если вы настаиваете на использовании пустых узлов, вы можете использовать число() и/или position() для получения текущего узла и использовать его для генерации uri. http://www.w3schools.com/xsl/el_number.asp

Смежные вопросы