schematron-nokogiri 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,72 @@
1
+ <schema xmlns="http://purl.oclc.org/dsdl/schematron">
2
+
3
+ <title>
4
+ Florida Digital Archive SIP Validation
5
+ </title>
6
+
7
+ <ns prefix="mets" uri="http://www.loc.gov/METS/"/>
8
+ <ns prefix="dts" uri="http://www.fcla.edu/dls/md/daitss/"/>
9
+ <ns prefix="xlink" uri="http://www.w3.org/1999/xlink"/>
10
+
11
+ <pattern name="Descriptor should have Agreement Info">
12
+
13
+ <rule context="/mets:mets">
14
+ <assert test="mets:amdSec/mets:digiprovMD/mets:mdWrap/mets:xmlData/dts:daitss/dts:AGREEMENT_INFO">
15
+ A digiprovMD wrapping an AGREEMENT_INFO element is required
16
+ </assert>
17
+ </rule>
18
+
19
+ <rule context="//dts:AGREEMENT_INFO">
20
+ <assert test="@ACCOUNT">Agreement Info must have an account</assert>
21
+ <assert test="@PROJECT">Agreement Info must have a project</assert>
22
+ </rule>
23
+
24
+ </pattern>
25
+
26
+ <pattern name="All files must have a location">
27
+ <rule context="//mets:file">
28
+ <assert test="mets:FLocat">a file must have a location</assert>
29
+ <assert test="mets:FLocat/@xlink:href">a file location must have a path reference</assert>
30
+ </rule>
31
+ </pattern>
32
+
33
+ <pattern name="All file checksums must be proper MD5 or SHA-1">
34
+
35
+ <rule context="//mets:file[@CHECKSUM and @CHECKSUMTYPE = 'MD5']">
36
+ <assert test="string-length(@CHECKSUM) = 32">
37
+ MD5 must be 32 characters
38
+ </assert>
39
+ <assert test="string-length(translate(@CHECKSUM, '0987654321abcdefABCDEF', '')) = 0">
40
+ MD5 must be only characters 0-9, A-Z, a-z
41
+ </assert>
42
+ </rule>
43
+
44
+ <rule context="//mets:file[@CHECKSUM and @CHECKSUMTYPE = 'SHA-1']">
45
+ <assert test="string-length(@CHECKSUM) = 40">
46
+ SHA-1 must be 40 characters
47
+ </assert>
48
+ <assert test="string-length(translate(@CHECKSUM, '0987654321abcdefABCDEF', '')) = 0">
49
+ SHA-1 must be only characters 0-9, A-Z, a-z
50
+ </assert>
51
+ </rule>
52
+
53
+ </pattern>
54
+
55
+ <pattern name="All files must be referenced in the structMap">
56
+ <rule context="//mets:file">
57
+ <assert test="./@ID = //mets:fptr/@FILEID">
58
+ file must be referenced in the structMap
59
+ </assert>
60
+ </rule>
61
+ </pattern>
62
+
63
+ <pattern name="All fptr in the structMap should point to a file">
64
+ <rule context="//mets:fptr">
65
+ <assert test="./@FILEID = //mets:file/@ID">
66
+ file pointer must reference a file
67
+ </assert>
68
+ </rule>
69
+ </pattern>
70
+
71
+
72
+ </schema>
@@ -0,0 +1,35 @@
1
+ <schema xmlns="http://purl.oclc.org/dsdl/schematron">
2
+
3
+ <title>
4
+ Florida Digital Archive SIP Validation
5
+ </title>
6
+
7
+ <ns prefix="mets" uri="http://www.loc.gov/METS/"/>
8
+ <ns prefix="pre" uri="info:lc/xmlns/premis-v2"/>
9
+ <ns prefix="dts" uri="http://www.fcla.edu/dls/md/daitss/"/>
10
+
11
+ <pattern name="PREMIS object should bein the proper buckets">
12
+
13
+ <rule context="//pre:event">
14
+ <assert test="parent::mets:xmlData/parent::mets:mdWrap/parent::mets:digiprovMD">
15
+ PREMIS events must be contained in a METS digiprovMD
16
+ </assert>
17
+ </rule>
18
+
19
+ <rule context="//pre:object">
20
+ <assert test="parent::mets:xmlData/parent::mets:mdWrap/parent::mets:techMD">
21
+ PREMIS objects must be contained in a METS techMD
22
+ </assert>
23
+ </rule>
24
+
25
+ </pattern>
26
+
27
+ <pattern name="METS should have embedded PREMIS">
28
+ <rule context="mets:mets">
29
+ <report test="not(//mets:mdWrap[@MDTYPE='PREMIS'])">
30
+ This METS file has no embedded PREMIS
31
+ </report>
32
+ </rule>
33
+ </pattern>
34
+
35
+ </schema>
@@ -0,0 +1,54 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+ require 'schematron-nokogiri'
3
+
4
+ describe SchematronNokogiri::Schema do
5
+
6
+ it "should load a schema from a libxml document" do
7
+ file = File.join "spec", "schema", "pim.sch"
8
+ doc = Nokogiri::XML(File.open(file))
9
+ lambda { SchematronNokogiri::Schema.new doc }.should_not raise_error
10
+ end
11
+
12
+ it "should validate a good instance doc" do
13
+ schema_file = File.join 'spec', 'schema', 'fda_sip.sch'
14
+ instance_file = File.join 'spec', 'instances', 'daitss-sip', 'Example1.xml'
15
+
16
+ schema_doc = Nokogiri::XML(File.open(schema_file))
17
+ instance_doc = Nokogiri::XML(File.open(instance_file))
18
+
19
+ stron = SchematronNokogiri::Schema.new schema_doc
20
+ results = stron.validate instance_doc
21
+
22
+ results.should be_empty
23
+ end
24
+
25
+ it "should detect errors for a bad document" do
26
+ schema_file = File.join 'spec', 'schema', 'fda_sip.sch'
27
+ instance_file = File.join 'spec', 'instances', 'daitss-sip', 'Example2.xml'
28
+
29
+ schema_doc = Nokogiri::XML(File.open(schema_file))
30
+ instance_doc = Nokogiri::XML(File.open(instance_file))
31
+
32
+ stron = SchematronNokogiri::Schema.new schema_doc
33
+ results = stron.validate instance_doc
34
+
35
+ results.should_not be_empty
36
+ end
37
+
38
+ it "should log report rules in the results" do
39
+ schema_file = File.join 'spec', 'schema', 'pim.sch'
40
+ instance_file = File.join 'spec', 'instances', 'daitss-sip', 'Example1.xml'
41
+
42
+ schema_doc = Nokogiri::XML(File.open(schema_file))
43
+ instance_doc = Nokogiri::XML(File.open(instance_file))
44
+
45
+ stron = SchematronNokogiri::Schema.new schema_doc
46
+ results = stron.validate instance_doc
47
+
48
+ results.length.should == 1
49
+ results.first[:rule_type].should == 'report'
50
+
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1 @@
1
+ # nothing here yet
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: schematron-nokogiri
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Francesco Lazzarino
8
+ - Alexandru Szasz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-05-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.6'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.6'
28
+ description: Using this gem you can validate an XML document using a ISO Schematron
29
+ validation file
30
+ email: alexxed@gmail.com
31
+ executables:
32
+ - stron-nokogiri
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - ".semver"
37
+ - LICENSE.txt
38
+ - README.md
39
+ - bin/stron-nokogiri
40
+ - iso-schematron-xslt1/iso_abstract_expand.xsl
41
+ - iso-schematron-xslt1/iso_dsdl_include.xsl
42
+ - iso-schematron-xslt1/iso_schematron_message.xsl
43
+ - iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl
44
+ - iso-schematron-xslt1/iso_svrl_for_xslt1.xsl
45
+ - iso-schematron-xslt1/readme.txt
46
+ - lib/schematron-nokogiri.rb
47
+ - schematron-nokogiri.gemspec
48
+ - spec/command_spec.rb
49
+ - spec/feature_requests_spec.rb
50
+ - spec/instances/daitss-sip/Example1.xml
51
+ - spec/instances/daitss-sip/Example2.xml
52
+ - spec/instances/premis-in-mets/bad.xml
53
+ - spec/instances/premis-in-mets/good.xml
54
+ - spec/schema/fda_sip.sch
55
+ - spec/schema/pim.sch
56
+ - spec/schema_spec.rb
57
+ - spec/spec_helper.rb
58
+ homepage: https://github.com/alexxed/schematron
59
+ licenses:
60
+ - MIT
61
+ metadata: {}
62
+ post_install_message:
63
+ rdoc_options: []
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 2.4.8
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: ISO Schematron Validation using Nokogiri
82
+ test_files: []
83
+ has_rdoc: