Narzędzie walidacji XML Schema (XSD)? [zamknięte]

W biurze piszemy obecnie aplikację, która będzie generować pliki XML na podstawie podanego schematu. Mamy schemat w an .Plik XSD.

Czy istnieją narzędzia lub biblioteki, których możemy użyć do automatycznego testowania, aby sprawdzić, czy wygenerowany XML pasuje do schematu?

Wolelibyśmy darmowe narzędzia, które są odpowiednie do użytku komercyjnego, chociaż nie będziemy łączyć kontrolera schematu, więc musi on być używany tylko przez deweloperów podczas rozwoju.

Nasz językiem programowania jest C++ , jeśli to robi jakąś różnicę, chociaż myślę, że nie powinno, ponieważ moglibyśmy wygenerować plik xml, a następnie wykonać walidację, wywołując oddzielny program w teście.

Author: Vertexwahn, 2008-09-24

14 answers

Po kilku badaniach myślę, że najlepszą odpowiedzią jest Xerces , ponieważ implementuje wszystkie XSD, jest wieloplatformowy i szeroko stosowany. Stworzyłem mały projekt Java na github do walidacji z wiersza poleceń przy użyciu domyślnego parsera JRE, którym jest zwykle Xerces. Może być używany w systemach Windows / Mac/Linux.

Istnieje również wersja C++ Xerces dostępna, jeśli wolisz go używać. Narzędzie StdInParse może być użyte do wywołania go z linii poleceń. Ponadto, komentator poniżej wskazuje na to bardziej kompletne narzędzie do owijania .

Możesz również użyć xmllint, który jest częścią libxml . Być może już go zainstalowałeś. Przykład użycia:

xmllint --noout --schema XSD_FILE XML_FILE

Problem polega na tym, że libxml nie implementuje wszystkich specyfikacji, więc możesz napotkać problemy: (

Alternatywnie, jeśli jesteś w systemie Windows, możesz użyć msxml , ale będziesz potrzebował jakiegoś opakowania, aby go wywołać, takiego jak GUI opisane w tym DDJ Artykuł . Jednak wydaje się, że większość ludzi w systemie Windows używa edytora XML, takiego jak Notepad++ (jak opisano w Nate ' s answer) lub XML Notepad 2007 jako zasugerowane przez SteveC (Istnieje również kilka komercyjnych edytorów, o których nie wspomnę tutaj).

W końcu przekonasz się, że różne programy, niestety, dadzą różne wyniki. Jest to w dużej mierze spowodowane złożonością specyfikacji XSD. Możesz przetestować swój schemat z kilku narzędzia.

UPDATE : rozszerzyłem o to w blogu .

 228
Author: Adrian Mouat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:36

Istnieje Wtyczka Notepad++ o nazwie XML Tools, która oferuje weryfikację i walidację XML w stosunku do XSD.

Możesz zobaczyć, jak z niego korzystać tutaj .

 110
Author: Nate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-06 13:59:38

Xmlstarlet jest narzędziem wiersza poleceń, które zrobi to i więcej:

$ xmlstarlet val --help
XMLStarlet Toolkit: Validate XML document(s)
Usage: xmlstarlet val <options> [ <xml-file-or-uri> ... ]
where <options>
  -w or --well-formed        - validate well-formedness only (default)
  -d or --dtd <dtd-file>     - validate against DTD
  -s or --xsd <xsd-file>     - validate against XSD schema
  -E or --embed              - validate using embedded DTD
  -r or --relaxng <rng-file> - validate against Relax-NG schema
  -e or --err                - print verbose error messages on stderr
  -b or --list-bad           - list only files which do not validate
  -g or --list-good          - list only files which validate
  -q or --quiet              - do not list files (return result code only)

NOTE: XML Schemas are not fully supported yet due to its incomplete
      support in libxml2 (see http://xmlsoft.org)

XMLStarlet is a command line toolkit to query/edit/check/transform
XML documents (for more information see http://xmlstar.sourceforge.net/)

Użycie w Twoim przypadku byłoby następujące:

xmlstarlet val --xsd your_schema.xsd your_file.xml
 22
Author: Charles Duffy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-16 17:00:30

Dla Windows istnieje darmowy XML Notepad 2007 . Możesz wybrać XSD, aby go zweryfikować przeciwko

 14
Author: SteveC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-12 13:19:29

Online XML Schema Validator firmy DecisionSoft umożliwia sprawdzenie pliku XML pod danym schematem.

 5
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-02 12:49:09
 3
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-24 01:44:17

Edytor XML do szybkiej i łatwej walidacji XML jest dostępny pod adresem http://www.xml-buddy.com

Wystarczy uruchomić instalator, a następnie można zweryfikować pliki XML za pomocą łatwej w użyciu aplikacji desktopowej lub Wiersza poleceń. Ponadto otrzymasz również wsparcie dla Schematron i RelaxNG. Obsługiwana jest również Walidacja wsadowa...

Aktualizacja 1/13/2012: narzędzie wiersza poleceń jest bezpłatne i używa Xerces jako parsera XML.

 3
Author: Clemens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-15 15:07:06

Http://www.xmlvalidation.com/

(należy zaznaczyć pole "Validate against external XML schema")

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-05 19:33:56

Dopiero się uczę. Używam RELAX NG i używam xmllint do walidacji. Denerwują mnie błędy wychodzące z xmlllint. Chciałbym, żeby były bardziej pouczające.

Jeśli w XML jest nieprawidłowy atrybut, to xmllint podaje nazwę nieobsługiwanego atrybutu. Ale jeśli brakuje atrybutu w XML, po prostu pojawia się komunikat, że element nie może zostać zweryfikowany.

Pracuję nad bardzo skomplikowanym XML z bardzo skomplikowanymi regułami i Jestem w tym nowy, więc śledzenie, którego atrybutu brakuje, zajmuje dużo czasu.

Update: właśnie znalazłem narzędzie java, które bardzo mi się podoba. Może być uruchamiany z linii poleceń jak xmllint i obsługuje RELAX NG: https://msv.dev.java.net/

 2
Author: Pengo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-30 22:03:37

Znalazłem ten walidator online z 'corefiling' całkiem przydatny -
http://www.corefiling.com/opensource/schemaValidate.html

Po wypróbowaniu kilku narzędzi do walidacji mojego xsd, to jest ten, który dał mi szczegółowe informacje o błędzie - więc byłem w stanie naprawić błąd w schemacie.

 2
Author: iniki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-28 11:31:53

Jednym z świetnych wizualnych narzędzi do walidacji i generowania XSD z XML jest IntelliJ IDEA, intuicyjny i prosty.

 1
Author: jipipayo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-08 10:43:37

Można podłączyć XML schema do Microsoft Visual Studio Intellisense. Ta opcja daje zarówno walidację w czasie rzeczywistym, jak i autouzupełnianie, co jest po prostu niesamowite.

Mam ten dokładny scenariusz uruchomiony na mojej darmowej kopii Microsoft Visual C++ 2010 Express.

 1
Author: AaronDanielson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-10 21:44:40

Kolejny walidator online XML Schema (XSD): http://www.utilities-online.info/xsdvalidation/.

 1
Author: Ignacio Corral Campos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-22 06:13:46

Zazwyczaj używam XSD firmy Microsoft, aby pomóc wygenerować xsd z pliku. NET. Analizuję również sekcje xml za pomocą xmlstarlet. Ostatnim darmowym narzędziem, które byłoby dla Ciebie przydatne, jest altovaxml, który jest dostępny pod tym adresem URL: http://www.altova.com/download_components.html .

To pozwala mi skanować wszystkie pliki xml wykrywając, którego xsd użyć przez parsowanie xml.

# Function:
#    verifyschemas - Will validate all xml files in a configuration directory against the schemas in the passed in directory
# Parameters:
#    The directory where the schema *.xsd files are located.  Must be using dos pathing like: VerifySchemas "c:\\XMLSchemas\\"
# Requirements:
#    Must be in the directory where the configuration files are located
#
verifyschemas()
{
    for FILENAME in $(find . -name '*.xml' -print0 | xargs -0)
    do
        local SchemaFile=$1$(getconfignamefromxml $FILENAME).xsd
        altovaxml /validate $FILENAME /schema $SchemaFile > ~/temp.txt 2> /dev/null
        if [ $? -ne 0 ]; then
            printf "Failed to verify: "
            cat ~/temp.txt | tail -1 | tr -d '\r'
            printf "    - $FILENAME with $SchemaFile\n"
        fi
    done
}

Do wygenerowania xml używam: XSD DOTNET.dll /type: cfgclass & rename schema0.xsd CFGCLASS.xsd

Aby uzyskać nazwę xsd używam: xmlstarlet sel-T-M / XXX/ * - v local-name () $1 / sed 's / $ / /'

Pozwala mi to na pobranie poprawnego XSD za pomocą znacznika elementu w pliku xml.

Wynik netto jest taki, że mogę wywołać funkcję bash, aby skanować wszystkie pliki XML i je zweryfikować. Nawet jeśli znajdują się w wielu podkatalogach.

 0
Author: Andrew Stern,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-22 18:53:33