Какова точка узла пространства имен root в XML и где будет определяться такое пространство имен? - PullRequest
1 голос
/ 05 февраля 2020

В настоящее время я изучаю определение онтологии SPARQL, которое содержится в XML - что-то, от чего я довольно смутно.

Я знаком с концепцией namespacing. т. е. такой узел XML:

<rdf:Description rdf:about="...">
    <rdf:type rdf:resource="..."/>
    <rdf:type rdf:resource="..."/>
    <rdfs:domain rdf:resource="..."/>
    <rdfs:range rdf:resource="..."/>
</rdf:Description>

ссылается на пространства имен rdf и rdfs, которые определены в узле XML document root:

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"

И тогда я понимаю, что для любого XML приложения синтаксического анализа это означает, что тогда узел эффективно работает:

<Description about="...">
    <type resource="..."/>
    <type resource="..."/>
    <domain resource="..."/>
    <range resource="..."/>
</Description>

С тегами (Description, type, domain и range), а также атрибуты тега (about и resource), уникальные в контексте анализа rdf XML. Я думаю, что для парсера нужны правила - но эти теги никогда не спутают с тегами с тем же именем, но определенными для другой цели. т.е. xmlns="http://finanacial-instruments.com/xmlns", где теги с одинаковыми именами используются в разных контекстах (пожалуйста, дайте мне знать, если это не имеет смысла).

Вопрос

В В этом конкретном документе XML, который я просматриваю, узел root сам по себе является пространством имен:

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
    xmlns="http://meta.icos-cp.eu/ontologies/cpmeta/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

, то есть узел root равен <rdf:RDF ...>. С моей точки зрения это не имеет большого значения, так как я уже знал, что это документ RDF. Но какой смысл иметь пространство имен root и где это пространство имен определено?

============= EDIT

Глядя на ответ ниже, эта ссылка: http://www.jclark.com/xml/xmlns.htm помог мне.

Включает следующее:

<cars:part xmlns:cars="http://www.cars.com/xml"/>

maps to

<{http://www.cars.com/xml}part/>

Я не осознавал, что пространство имен также применимо к тегу, в котором указано пространство имен.

1 Ответ

2 голосов
/ 05 февраля 2020

Джеймс Кларк предоставляет полезную сводку о том, как работают пространства имен на

http://www.jclark.com/xml/xmlns.htm

и (годы спустя) вдумчивый блог о том, был ли дизайн выполнен правильно в

https://blog.jclark.com/2010/01/xml-namespaces.html

(Комментарии также заслуживают прочтения. Большинство из них от экспертов, к мнению которых стоит относиться серьезно.)

Что касается вопроса «в чем смысл?», Многие люди будут утверждать, что это очень мало, но в то время это было модно. Возможно, причина того, что это было модно, в том, что люди думали, что они строят что-то вроде будущего, и держать ваши варианты открытыми для неизвестного будущего - обычная черта среди хороших разработчиков программного обеспечения.

Что касается вопроса " где определено пространство имен ", ответ: это зависит от пространства имен. Во многих случаях, если вы go обращаетесь к URI, связанному с пространством имен, это укажет вам спецификацию, но в других случаях это не так, и вам просто придется искать ее. Как и в случае со всем, что связано с программным обеспечением, иногда люди используют пространство имен и никогда не пишут для него никакой документации.

...