Vi null
elementos representados de várias maneiras:
O elemento está presente com xsi:nil="true"
:
<book>
<title>Beowulf</title>
<author xsi:nil="true"/>
</book>
O elemento está presente, mas representado como um elemento vazio (que eu acredito estar errado desde 'vazio' e null
é semanticamente diferente):
<book>
<title>Beowulf</title>
<author/>
</book>
<!-- or: -->
<book>
<title>Beowulf</title>
<author></author>
</book>
O elemento não está presente na marcação retornada :
<book>
<title>Beowulf</title>
</book>
O elemento possui um <null/>
elemento filho (de TStamper abaixo):
<book>
<title>Beowulf</title>
<author><null/></author>
</book>
Existe uma maneira correta ou canônica de representar esse null
valor? Existem outras maneiras além dos exemplos acima?
O XML para os exemplos acima é artificial, portanto, não leia demais. :)
xmlns:xsi="http://w3.org/2001/XMLSchema-instance"
. Observe o http: // ausente. É importante porque a string do namespace é na verdade apenas uma string para o analisador xml e não uma uri.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
. Observe "www". Veja w3.org/TR/xmlschema-1/#no-xsixsi:
prefixo deve ser declarado. Um analisador XML com reconhecimento de espaço de nome rejeitará seu documento XML se você tentar usar oxsi:
prefixo sem declará-lo. A especificação relevante aqui é w3.org/TR/xml-names/#nsc-NSDeclared ("restrição de espaço para nome: prefixo declarado"), que diz que os únicos prefixos predefinidos sãoxml:
exmlns:
. O Esquema XML baseia-se na especificação dos espaços para nome XML, mas não adiciona nenhum prefixo predefinido adicional, pois isso violaria a especificação dos espaços para nome XML.Não há resposta canônica, pois o XML basicamente não tem conceito nulo. Mas suponho que você queira mapear Xml / Object (já que os gráficos de objetos têm nulos); então a resposta para você é "qualquer que seja a ferramenta usada". Se você escreve manipulação, isso significa o que você preferir. Para ferramentas que usam o Esquema XML, esse
xsi:nil
é o caminho a seguir. Para a maioria dos mapeadores, omitir elemento / atributo correspondente é a maneira de fazê-lo.fonte
Depende de como você valida seu XML. Se você usar a validação do Esquema XML, a maneira correta de representar
null
valores é com oxsi:nil
atributo[ Fonte ]
fonte
A documentação no link w3
http://www.w3.org/TR/REC-xml/#sec-starttags
diz que estas são as formas recomendadas.
O atributo mencionado na outra resposta é um mecanismo de validação e não uma representação do estado. Consulte o http://www.w3.org/TR/xmlschema-1/#xsi_nil
Para esclarecer esta resposta: Conteúdo
fonte
Você usa
xsi:nil
quando a semântica do esquema indica que um elemento tem um valor padrão e que o valor padrão deve ser usado se o elemento não estiver presente. Eu tenho que assumir que existem pessoas inteligentes para quem a frase anterior não é uma idéia evidentemente terrível, mas parece nove tipos de coisas ruins para mim. Todo formato XML com o qual trabalhei representa valores nulos, omitindo o elemento. (Ou atributo, e boa sorte marcando um atributo comxsi:nil
.)fonte
date
elemento completamente não é de grande ajuda, pois o aplicativo não faz ideia de onde na página de título deseja a data para aparecer. (Se o elemento omitido tem apenas uma possível localização, este não é um problema, em vocabulários documentos reais quase todos os elementos têm muitas posições possíveis.)Simplesmente omitir o atributo ou elemento funciona bem em dados menos formais.
Se você precisar de informações mais sofisticadas, os esquemas GML adicionam o atributo nilReason, por exemplo: no GeoSciML :
xsi:nil
com um valor "true" é usado para indicar que nenhum valor está disponívelnilReason
pode ser usado para registrar informações adicionais para valores ausentes; esse pode ser um dos motivos padrão da GML (missing, inapplicable, withheld, unknown
) ou o texto anexado porother:
, ou pode ser um link de URI para uma explicação mais detalhada.Quando você está trocando dados, a função para a qual o XML é comumente usado, os dados enviados para um destinatário ou para uma determinada finalidade pode ter um conteúdo oculto que estaria disponível para outra pessoa que pagasse ou tivesse autenticação diferente. Saber o motivo pelo qual o conteúdo estava faltando pode ser muito importante.
Os cientistas também estão preocupados com a falta de informações. Por exemplo, se ele foi descartado por motivos de qualidade, eles podem querer ver os dados incorretos originais.
fonte
Em muitos casos, o objetivo de um valor Nulo é servir para um valor de dados que não estava presente em uma versão anterior do seu aplicativo.
Digamos que você tenha um arquivo xml do seu aplicativo "ReportMaster" versão 1.
Agora, no ReportMaster versão 2, foram adicionados mais alguns atributos que podem ou não ser definidos.
Se você usar a representação 'no tag significa null', obterá compatibilidade retroativa automática para ler seu arquivo xml ReportMaster 1.
fonte