Пространство имен XML и свойство размещения схемы? - PullRequest
3 голосов
/ 27 июня 2011

Во многих примерах xml я вижу много имен, которые даже не используют в xml, как в примере ниже, мы определили имена имен как xsi, aop и одно пространство имен по умолчанию.Если мы не используем их, какова цель их определения.Не прикрепил XML как его довольно большой.

Второй вопрос: - Предположим, что мы используем эти nameschemas .. Обычно мы определяем значения namechemas и schemalocation с некоторым веб-адресом, таким как http://someAdddress//.Что, если мы определим их с каким-то произвольным значением, таким как ABC или что-то еще.Это изменит?Есть ли какая-либо обработка, которую мы делаем с этих веб-адресов?

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/ 
schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema 
/aop/spring-aop-2.0.xsd"> 

Другой вопрос - мы определили schemalocation только для пространства имен xsi, а не для пространства имен aop.Почему так?

Последний вопрос: можем ли мы определить пространство имен xsi1 вместо xsi?Это делает какой-либо им

Ответы [ 3 ]

4 голосов
/ 28 июня 2011

Как правило, в случае, если привязка пространства имен не используется в документе, объявление этого пространства имен является избыточным и может быть безопасно опущено (наоборот, оно не принесет никакого вреда, находясь там). скажем так должно быть, но есть исключения. Одним из них является проверка DTD, которая иногда требует наличия или отсутствия определенного объявления пространства имен для определенного элемента (обработка DTD не учитывает пространство имен, поэтому она обрабатывает пространства имен как атрибуты). Другое довольно редкое исключение: я видел XML-словари, в которых объявления пространства имен используются для передачи семантики, отличной от простого объявления привязки для префикса пространства имен, например, это может указывать информацию о версии. Это плохой дизайн XML, но есть много плохого дизайна XML.

Что касается xsi: schemaLocation, некоторые инструменты / приложения игнорируют это, другие могут интерпретировать его как запрос на выполнение проверки схемы по схеме, найденной в определенном месте.

0 голосов
/ 01 ноября 2018

Если вы хотите назначить схему XSD XML-файлу без использования пространства имен, вы также можете просто использовать атрибут xsi:noNamespaceSchemaLocation вместо xsi:SchemaLocation. Источник

Пример:

<myElement
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="myschema.xsd"
>
0 голосов
/ 11 июня 2014

В первом абзаце вы спросили, что если мы определим пространство имен XML и не будем его использовать?

Ну, ничего плохого не случится. Это просто для вашего использования, и вы не используете его. Это как переменная, определенная в вашей функции, которую вы просто не используете.

Теперь в одном из ваших утверждений есть ошибка, что вы не используете xsi, aop и пространство имен по умолчанию. Это неправда. Потому что xsi - это экземпляр схемы xml. Вы используете его в следующей строке, где пишете <xsi:schemaLocation ... />. По сути, это позволяет вам создать экземпляр определения схемы, который вы создали в своем файле xsd / dtd. Вы можете / не могли использовать aop, я не могу сказать, пока вы не покажете мне XML-файл. Теперь с пространством имен по умолчанию вы немного запутались. Пространство имен по умолчанию в документах XML сообщает проверяющему схему, что все элементы, используемые в этом документе XML, объявлены в пространстве имен «<some namespace>». См. http://www.w3schools.com/Schema/schema_schema.asp под заголовком «Ссылка на схему в документе XML».

Теперь ваш второй вопрос заключается в том, что все пространства имен обычно определяются как URL. Можем ли мы определить это как какое-то другое имя?

Да, вы можете. Вот пример файла xsd и xml.

<?xml
    version="1.0"
    encoding="UTF-8"
?>

<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="mynamespace"
    xmlns="mynamespace"
    elementFormDefault="qualified"
>
    <xs:element name="note">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="to">
                    <xs:complexType>
                        <xs:attribute name="lang" type="xs:string" use="required"></xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Вот XML:

<?xml
    version="1.0"
    encoding="utf-8"
?>

<note
    xmlns:note="mynamespace"
    xmlns="mynamespace"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="mynamespace myschema.xsd"
>
    <note:to lang="en"></note:to>
</note>

Итак, вы можете видеть, что я определил другое имя для пространства имен, и оно отлично работает в моем затмении.

Я думаю (и я предполагаю здесь), что есть причина, по которой люди используют URI в качестве пространства имен. Потому что, если вы просто сохраните имя, как я сделал «mynamespace», и другие люди захотят импортировать / использовать вашу схему, тогда ваше имя и их имя могут столкнуться. Теперь вы не можете написать простое имя и надеяться, что каждый человек в мире не будет использовать это имя, поэтому люди используют URI в качестве своих пространств имен, потому что URI уникальны, и у других нет причин использовать ваш URI при создании схем для своих приложений. .

Ваш третий вопрос: почему мы не определили schemaLocation для приложения так же, как для xsi? Посмотрите еще раз в вашем schemaLocation. Вы определили 4 значения, разделенных пробелами. 2 для xsi и два для aop.

Ваш последний вопрос был, можете ли вы определить xsi1 вместо xsi. Вы можете. Infact вы можете определить любое имя, которое вы хотите. Это переменная, которая используется как сокращение для представления пространства имен.

PS: я недавно начал изучать XML / XSD. Поэтому, если вы найдете мой ответ неверным, пожалуйста, поделитесь правильным ответом, и я отредактирую свой. Спасибо.

...